客户端通过appId,redirectUrl,在open platform打开的页面上填写正确的用户名和密码后,open platform验证通过后,会跳转到redirectUrl,此时的redirectUrl上多个一个参数:request_code;

第三方应用 在后台 使用request_code,appId,appSecret,redirectUrl,获取token,然后使用这个token消费ResourceServer提供的API,获取想要的数据

什么是OAuth授权?

一、什么是OAuth协议
OAuth(开放授权)是一个开放标准,所谓OAuth(即Open Authorization,开放授权),它是为用户资源授权提供了一种安全简单的标准,
允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息。
而这种授权无需将用户提供用户名和密码提供给该第三方网站而是直接从服务商提供的页面直接登录。

OAuth允许用户提供一个访问标记(专业点叫做令牌)给第三方网站,一个访问标记(专业点叫做令牌)对应一个特定的第三方网站,同时该访问标记(专业点叫做令牌)只能在特定的时间内访问特定的资源

说白了就是:也就是说用户在访问第三方web或应用的时候,第三方在不知道用户的账号和密码的情况下 经过用户授权后就可以获取用户在服务商哪里存储的文章,微博信息等等信息

一、OAuth授权必须经过三个步骤

第一步:获取未授权的Request Token (请求标记)  跳转到服务商的登录页面

第二步:获取用户授权Request Token(请求标记) 用户输入账号密码进行登录授权

第三步:用授权过的Request Token(请求标记)  换取Access Token (访问标记)

以上三个步骤是OAuth授权的必须步骤 ,可能很多公司的授权方式各有不同,但是大致步骤是一样的

下面以新浪微博为例子 介绍下如何进行OAuth授权:

1.首先你要成为新浪的开发者  点击这里进入开发者网站:http://open.weibo.com

进入后注册一个账号 添加开发者个人信息 ,你可以直接用你的微博账号登录 然后加入开发者即可  详细步骤这里不再赘述

2.创建应用  如何创建应用,直接点击顶部导航栏的我的应用 即可 创建

*假设你创建的应用名称加做 "程序源微博"

*应用创建完毕默认 就进入"开发阶段" 就具备了授权资格

*这个时候点击我的应用 --> 应用信息 你会看到如下的信息

App Key:917518064   应用的唯一标识

App Secret:b18853174e2902fd05b04dc34d7be792  密钥

应用地址:https://itunes.apple.com/cn/genre/ios/id36?mt=8

这是时候我们还需要设置一个回调页面,就是授权成功后跳转的页面  如何设置?

点击编辑 然后输入你要回调的页面网址即可

2.有了上面的设置之后 我们就可以进行资源授权了 我们现在都是OAuth授权2.0

(1)首先第一步获取未授权的Request Token  来到服务器的登录界面

*新浪提供的页面是这个页面:https://api.weibo.com/oauth2/authorize

*必须要传递的两个参数:

client_id (string类型)     申请应用时分配的AppKey // 得知道给哪个应用授权
redirect_uri (string类型)     授权回调地址 // 授权成功后跳转到哪个页面

也就是说我们要正确的来到服务器提供的授权登录界面完整的url地址应该是这样的:

https://api.weibo.com/oauth2/authorize?client_id=917518064&redirect_uri=http://www.cnblogs.com/syios

打开上面的地址你会看到如下界面:

此时我们输入我们的微博账号 这里也可以自己给自己授权也就是说你可以用户刚刚创建应用的账号 对你的应用进行授权

当我们点击登录后 ,这次授权就成功了,当然如果你是第一次授权可能看到不是上面的界面 而是授权界面 这个时候你点击授权即可

登录成功后回跳转到回调页面

(2)获取授权过的Request Token 

授权成功后回自动跳转到回调页面

你会发现新浪会在回调页面后面拼接一个参数 这个参数code 就是授权成功后的 Request Token (请求标记)

(3)根据授权过Request Token(请求标记) 获取一个Access Token(访问标记) 

这一步是第三方应用后台完成的

这个时候新浪提供了另外一个地址 用来获取访问标记

URL : https://api.weibo.com/oauth2/access_token

当然也必须要传如下的参数 才能成功获取访问标记:

client_id          string     申请应用时分配的AppKey。
client_secret    string     申请应用时分配的AppSecret。
grant_type       string     请求的类型,填写authorization_code
code                string     调用authorize获得的code值。
redirect_uri      string     回调地址,需需与注册应用里的回调地址一致

这个时候我们只需要将所有的参数通过POST方式发送给新浪服务器之后我们会得到服务器的返回数据 返回结果如下:

{
"access_token" = "2.00vWf4GEUSKa7D739148f7608SXA9B";
"expires_in" = 137596133;
"remind_in" = 137596133;
uid = 1258537523;
}

access_token: 就是我们需要的访问标记 我们只需要获取这个标记 保存即可

uid:表示当前登录用户的ID

这里需要大家明白一个知识点:

access_token : 1个用户给1个应用授权成功后,就获得对应的1个access_token,作用是:允许1个应用访问1个用户的数据
uid:1个用户对应1个uid,每1个用户都有自己唯一的uid
举例:

张三 /李四
应用1 /应用2
张三给应用1、应用2授权成功了:1个uid、2个access_token
李四给应用2授权成功了:1个uid、1个access_token
上面操作:产生了2个uid,3个access_token

3.授权过程中的常见错误

1.invalid_request
1> 没有传递必填的请求参数
2> 请求参数不对
3> URL中间留有空格

2.invalid_client
1> client_id的值传递错误(AppKey不对)

3.redirect_uri_mismatch
1> 回调地址不对

提醒:授权帐号注意  如果应用还没有经过新浪审核,只能访问自己或者其他15个测试帐号的微博数据

好了,关于OAuth授权 就说这么多了

http://www.cnblogs.com/syios/p/4762546.html

Spring-security-Oauth2.0的样例,OAuth 2提供商sparklr2和OAuth 2客户端TONR 。我探索在互联网上了一下,整理相关文档。编译并运行了OAuth 2提供商sparklr2和OAuth 2客户端TONR,并检查所有的授权上。现在,我在这里从实用的角度讲解的OAuth 2.0的不同方面来理解Spring-security-Oauth2.0。

这篇文章是试图描述的OAuth 2.0以简化的形式来帮助开发商和服务提供商实施的协议。

我将涵盖以下主题在这篇文章中。

1 。实体
2 。创建应用程序
3 。授权, Grant-Type
                   a.Web服务器应用程序(Web Server)
                   b.基于浏览器的应用程序(Web Client)
                   c.手机应用程序(Mobile APP)
                   d.其它桌面应用程序
4 。访问资源
5 。资源

OAuth的服务器:
这也被称为OAuth的提供者。它的整体责任是验证和授权的用户/客户端和管理令牌。

第三方应用:
第三方应用程序俗称为客户端,将尝试获得访问用户的帐户。它需要从用户获得许可,才可以这样做。这可能是一个基于Web服务器的应用程序,基于浏览器的应用程序,桌面应用程序,手机/平板电脑应用程序或一些智能设备,如谷歌护目镜和智能电视。

资源服务器:
俗称为资源服务器的API ,从其中的数据会被提取出来或送达。这可能是SOAP或REST的基础服务提供商。

用户:
用户俗称为资源拥有者,谁可以访问访问资源。

创建应用程序:

在您开始OAuth的过程中,您必须先注册一个新的应用与服务/供应商。当注册一个新的应用程序,你通常注册基本信息,如应用程序ID,秘钥,授权发放,类型等,
另外,你必须注册一个重定向URI,用于将用户重定向到Web服务器,基于浏览器的,或移动应用程序。

重定向的URI :
该服务将只将用户重定向到注册的URI ,这有助于防止某些攻击。
任何HTTP重定向的URI必须与SSL安全保护,因此该服务将只重定向到的URI以“https ”开头。这可以防止从令牌在授权过程中被截获

客户端ID和授权密码:
注册您的应用程序后,你将拥有你的客户端ID和客户端授权密码。该客户端ID被认为是公共信息,并用于建立登录网址,或包括在一个页面上的JavaScript源代码。客户端授权密码必须保密。如果部署的应用程序不能保守授权密码的机密,如JavaScript或本机应用程序,那么这个授权密码不被使用。

授权方式:

OAuth 2的第一步骤是从用户获得授权。对于基于浏览器或移动应用程序,这通常是由显示给用户提供的服务的接口来实现的。

OAuth的2提供了不同的用例数批类型。定义的补助类型有:

一个Web服务器上运行的应用程序授权码
 隐含的基于浏览器的或移动应用程序
 密码与用户名和密码登录
 对于应用程序访问客户端凭据

Web服务器应用程序
Web应用程序都写在一个服务器端语言和运行服务器的应用程序的源代码是不提供给公众。

授权请求:

http://localhost:8080/oauth2/oauth/authorize?response_type=code&client_id=easylocate&scope=read&redirect_uri=http://localhost:8080/web

之后接受访问。该页面将被重定向到重定向URI的授权码。

http://localhost:8080/web/?code=t7ol7D

现在是时候来交换授权码来获得访问令牌。

http://localhost:8080/oauth2/oauth/token?grant_type=authorization_code&code=t7ol7D&redirect_uri=http://localhost:8080/web&client_id=easylocate&client_secret=secret

与访问令牌的OAuth的服务器回复

 {
“ ACCESS_TOKEN ”:“ 372c3458 - 4067 - 4b0b - 8b77 - 7930f660d990 ”
“ token_type ” : “bearer” ,
“ refresh_token ” : “ ce23c924 - 3f28 - 456C - A112 - b5d02162f10c ”
“ expires_in ” : 37364 ,
“scope” : “read”
}

万一错了授权码,的Oauth服务器回复的错误。

 {
“error” : “ invalid_grant ” ,
“ error_description ” : “无效的授权码: t7olD ”
}

安全性:需要注意的是该服务应要求应用程序进行预注册的重定向的URI 。否则将有一个错配。

基于浏览器的应用程序和移动应用程序:
基于浏览器的应用程序在浏览器从网页加载的源代码之后运行完全。由于整个源代码是提供给浏览器,他们不能保持其客户端秘密的保密性,所以这个秘密是不是在这种情况下使用。

授权请求:

http://localhost:8080/oauth2/oauth/authorize?response_type=token&client_id=easylocate&redirect_uri=http://localhost:8080/web&scope=read

之后接受访问。该页面将被重定向到重定向URI与令牌。

http://localhost:8080/web/#access_token=372c3458-4067-4b0b-8b77-7930f660d990&token_type=bearer&expires_in=37026

就是这样,没有其他的步骤!在这一点上,一些JavaScript代码可以(在#后的部分)拉出访问令牌的片段,并开始进行API请求。

如果出现错误,你反而会收到一条错误的URI片段,如:

http://localhost:8080/web/#error=invalid_scope&error_description=Invalid+scope:+rea&scope=read+write

基于密码:
OAuth2还提供了可用于令牌直接交换一个用户名和密码访问密码交付式。因为这显然需要的应用程序来收集用户的密码,它应该只用于由服务自身创建的应用程序。例如,原生Twitter的应用程序可以使用这笔款项型移动或桌面应用程序登录。

使用密码交付式,只是让类似下面的POST请求。我现在用的卷曲工具来演示POST请求。您可以使用任何其余客户端。

curl   -I -X POST -D http://localhost:8080/oauth2/oauth/token?grant_type=password&code=t7ol7D&redirect_uri=http://localhost:8080/web&client_id=easylocate&client_secret=secret
服务器将返回与令牌

{
“ ACCESS_TOKEN ”:“ 4e56e9ec - 2f8e - 46b4 - 88b1 - 5d06847909ad ”
“ token_type ” : “bearer” , “ refresh_token ”:“ 7e14c979 - 7039 - 49d0 - 9c5d - 854efe7f5b38 ”
“ expires_in ” : 36133 ,
“scope” : “read,write"
}

客户端凭据基于:
基于客户端credentals授权用于服务器到服务器应用程序的访问。我只是表示使用卷曲工具的POST请求。

curl   -I -X POST -D http://localhost:8080/oauth2/oauth/token?client_id = appId&grant_type = client_credentials & CLIENT_SECRET =秘密” http://localhost:8080/oauth2/oauth/token

服务器会回来的访问令牌

 {
“ ACCESS_TOKEN ”:“ 9cd23bef - ae56 - 46b0 - 82f5 - b9a8f78da569 ”
“ token_type ” : “bearer” ,
“ expires_in ” : 43199 ,
“scope” : “read”
}

访问的资源:

一旦您通过验证并获得访问令牌,可以提供访问令牌来访问受保护的资源。

http://blog.csdn.net/u011537073/article/details/52108369

http://projects.spring.io/spring-security-oauth/docs/oauth2.html

Oauth2.0 用Spring-security-oauth2的更多相关文章

  1. 【OAuth2.0】Spring Security OAuth2.0篇之初识

    不吐不快 因为项目需求开始接触OAuth2.0授权协议.断断续续接触了有两周左右的时间.不得不吐槽的,依然是自己的学习习惯问题,总是着急想了解一切,习惯性地钻牛角尖去理解小的细节,而不是从宏观上去掌握 ...

  2. 一文带你了解 OAuth2 协议与 Spring Security OAuth2 集成!

    OAuth 2.0 允许第三方应用程序访问受限的HTTP资源的授权协议,像平常大家使用Github.Google账号来登陆其他系统时使用的就是 OAuth 2.0 授权框架,下图就是使用Github账 ...

  3. Spring Security OAuth2.0认证授权四:分布式系统认证授权

    Spring Security OAuth2.0认证授权系列文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授 ...

  4. 使用Spring MVC测试Spring Security Oauth2 API

    不是因为看到希望了才去坚持,而坚持了才知道没有希望. 前言 在Spring Security源码分析十一:Spring Security OAuth2整合JWT和Spring Boot 2.0 整合 ...

  5. Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战

    一. 前言 [APP 移动端]Spring Security OAuth2 手机短信验证码模式 [微信小程序]Spring Security OAuth2 微信授权模式 [管理系统]Spring Se ...

  6. springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)

    项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖  ...

  7. Spring Security OAuth2.0 - AuthorizationServer和ResourceServer分离

    <Spring Security实现OAuth2.0授权服务 - 基础版>和<Spring Security实现OAuth2.0授权服务 - 进阶版>两篇文章中介绍如何搭建OA ...

  8. 基于spring boot2.0+spring security +oauth2.0+ jwt微服务架构

    github地址:https://github.com/hankuikuide/microservice-spring-security-oauth2 项目介绍 该项目是一个演示项目,主要演示了,基于 ...

  9. Spring Security OAuth2.0认证授权二:搭建资源服务

    在上一篇文章[Spring Security OAuth2.0认证授权一:框架搭建和认证测试](https://www.cnblogs.com/kuangdaoyizhimei/p/14250374. ...

  10. Spring Security OAuth2.0认证授权三:使用JWT令牌

    Spring Security OAuth2.0系列文章: Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二: ...

随机推荐

  1. DB 查询分析器 6.03 ,遨游于任何Windows操作系统之上的最优秀的数据库客户端工具

    DB 查询分析器 6.03 ,遨游于任何Windows操作系统之上的最优秀的数据库客户端工具 中国本土程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员  .03版本已经完全兼容 ...

  2. 属性动画之ValueAnimator

    原文链接:http://blog.csdn.net/guolin_blog/article/details/43536355

  3. VS2005工程的Device右边内容为空问题

    VS2005工程的Device右边内容为空问题 可能是刚刚在删除C盘一些文件或是这些文件因为某些原因丢失了,在打开WINCE6.0系统工程的时候,发现无法编译,才注意到VS2005工程的Device右 ...

  4. Linux - 工作管理(job control),jobs,fg,bg,kill

    什么是工作管理? 『进行工作管理的行为中, 其实每个工作都是目前 bash 的子程序,亦即彼此之间是有相关性的. 我们无法以 job control 的方式由 tty1 的环境去管理 tty2 的 b ...

  5. mybatis源码之SimpleStatementHandler

    /** * @author Clinton Begin */ public class SimpleStatementHandler extends BaseStatementHandler { pu ...

  6. 【uWSGI】实战之Django配置经验

    uWSGI 是应用服务器,实现了uwsgi, wsgi等协议,可以运行wsgi 应用 uwsgi 是协议名 Django配置 下面是自己经常用的一个配置模板,基于1.9以上的版本使用的, 主要基于dj ...

  7. 赋给个人账户sudo的全部root执行权限

    sudo visudo 输入root账户密码后,会自动打开sudoers文件编辑 在root     ALL=(ALL)    ALL此行下增加一行 user ALL=(ALL)    NOPASSW ...

  8. UML用例设计

    一. 用例图目的1) 界定系统范围.2) 描述参与者实现的目标和希望系统执行的一定功能.3) 描述系统功能与外部系统,人,组织交互的关系. 二. 用例分解的规则1) 用大型用例描述参与者实现的主要目标 ...

  9. java程序的内存分配(二)

    前言 您是否是动态分配的 C/C++ 对象忠实且幸运的用户?您是否在模块间的往返通信中频繁地使用了"自动化"?您的程序是否因堆分配而运行起来很慢?不仅仅您遇到这样的问题.几乎所有项 ...

  10. java队列

    "队列"这个单词是英国人说的"排".在英国"排队"的意思就是站到一排当中去.计算机科学中,队列是一种数据结构,有点类似栈,只是在队列中第一个 ...