前言
做后台开发,难免需要与第三方系统打交道,可能是调用第三方的服务,又或是需要用户在第三方系统
的相关信息等。前者多以webservice方式提供,后者则采用OAuth协议提供,也是下面要讲的。
OAuth(Open Authorzation)介绍
官方网站对oAuth有如下介绍:
An open protocol to allow secure API authorization in a simple and standard method from
web, mobile and desktop applications.大概的意思是说OAUTH是一种开放的协议,为桌面、手机
或web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。该协议的最大好处就是它
与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),
即第三方无需使用用户的用户名与密码就可以申请获得该用户授权的资源。
OAuth协议相关术语介绍
Third-party application:第三方应用
HTTP service:服务提供商
User Agent:用户代理(下文中又称浏览器)
Authorization server:认证服务器(服务提供商专门用来处理认证的服务器)
Resource server:资源服务器
OAuth协议的目标:1.第三方应用需经用户授权后,方可使用用户在服务提供商的资源服务器上的资源
2.资源由用户决定
3.第三方应用应不触及到用户的帐号信息(安全的)
OAuth流程介绍
1.用户访问第三方应用后,要求用户在授权。
2.用户同意向第三方授权,并指明授权的资源。
3.第三方使用上一步获得的授权,向认证服务器申请令牌。
4.第三方使用令牌,向资源服务器申请获取用户资源。
5.资源服务器确认令牌后,开放用户资源给第三方。
从上面流程中,我们可以看出满足了OAuth协议的目标。上述流程中最关键的步骤发生在第2步,即用户
授权,OAuth协议规定了四种授权模式:
authorization code model:授权码模式
Implicit model:简化模式
resource owner password credentials model:密码模式
client credentials model:客户端模式
授权模式
下面我们就介绍这四种授权模式:
1).授权码模式流程图:
流程介绍:
1.用户访问第三方,后者将前者重定向到认证服务器(申请认证)。
2.用户选择是否给予客户端授权以及资源权限。
3.若用户给予授权,认证服务器将用户导向第三方事先指定的"URI",并附上一个授权码。
4.第三方拿到授权码,附上早先的"URI",向认证服务器申请令牌。
5.认证服务器核对了授权码和URI,通过后,返回给第三方访问令牌和更新令牌。
下面介绍流程中,所涉及到的参数:
第一步申请认证的URI包含参数:
response_type:授权类型,此处的值固定为"code" ,必选项
client_id:表示第三方的ID,必选项
redirect_uri:表示重定向URI,可选项
scope:表示申请的权限范围,可选项
state:表示第三方的当前状态,任意值,认证服务器会原样地返回,可选项
第三步认证服务器回应第三方的URI包含参数:
code:授权码。有效期应很短,通常设为10分钟,且第三方只能使用该码一次,会被认
证服务器拒绝(该码与第三方ID和重定向URI,存在对应关系)。必选项
state:如果第三方的请求中包含该参数,认证服务器的回应也必须包含这个参数。
第四步申请令牌(以http方式请求)包含参数:
grant_type:使用的授权模式,该值固定为"authorization_code",必选项
code:获得的授权码,必选项。
redirect_uri:重定向URI,且必须与A步骤中的该参数值保持一致,必选项
client_id:第三方ID,必选项。
第五步认证服务器返回的参数:
access_token:访问令牌,必选项。
token_type:令牌类型(bearer/mac类型),该值大小写不敏感,必选项
expires_in:过期时间(秒)。如果省略该参数,必须其他方式设置过期时间。
refresh_token:更新令牌,令牌过期后用来获取下一次的访问令牌,可选项。
scope:权限范围,如果与第三方申请的范围一致,此项可省略。
下面通过案例来理解授权码模式的OAuth协议
访问某网站首页,页面有qq登录和微博登录,我们选择qq登录
浏览器会重定向到qq的认证服务页面,我们将location值拿出来看看https://graph.qq
.com/oauth/show?which=Login&display=pc&response_type=code&client_id=101249010
&state=30c504bb633f29857aadffed4c5d669a&scope=get_user_info%2Cget_info%2Ca
dd_t%2Cdel_t%2Cadd_pic_t%2Cget_repost_list%2Cget_other_info%2Cget_fanslist
%2Cget_idollist%2Cadd_idol%2Cdel_idol&redirect_uri=http%3A%2F%2Fwww.newbiefl
y.com%2F%3Fconnect%3Dqq
我们可以看到包含response_type,client_id,state,scopt,redirec_url 5个参数,对应授
权码模式的第一步--申请认证,这时用户指定资源权限后我们点击授权按钮。
这时就登录进来了,可以看到是qq认证服务器重定向了浏览器,提取location的值如下:
http://www.newbiefly.com/?connect=qq&code=C3EF94F8DDCA92FB23FE726B0BF4CC
8D&state=30c504bb633f29857aadffed4c5d669a,可以看出认证服务器回应该申请网站code
以及state,对应对应授权码模式的第三步。
第四,五步是后台通过代码模拟http请求调用的,用户是不可见的。
以上是基于授权码模式的OAuth协议流程。
2).简化模式流程图
流程介绍:
1.用户访问第三方,后者将前者重定向到认证服务器(申请认证)。
2.用户选择是否给予客户端授权以及资源权限。
3.若用户给予授权,认证服务器将用户导向第三方事先指定的"URI",并以URI的hash部分包
含访问令牌等信息。
4.浏览器向资源服务器发出请求。
5.资源服务器返回一个网友,其中js脚步可以获取Hash值的令牌。
6.提取令牌后,浏览器访问第三方(包含令牌信息)。
下面介绍流程中,所涉及到的参数:
第一步申请认证的URI包含参数:
response_type:授权类型,此处的值固定为"code" ,必选项
client_id:表示第三方的ID,必选项
redirect_uri:表示重定向URI,可选项
scope:表示申请的权限范围,可选项
state:表示第三方的当前状态,任意值,认证服务器会原样地返回,可选项
注意:response_type的值为code。
第三步认证服务器回应第三方的URI包含参数:
access_token:访问令牌,必选项。
token_type:令牌类型,该值大小写不敏感,必选项。
expires_in:过期时间(秒)。如果省略该参数,必须其他方式设置过期时间。
scope:权限范围,如果与第三方申请的范围一致,此项可省略。
state:如果第三方的请求中包含该参数,认证服务器的回应也必须包含这个参数。
注意:此时浏览器得到http头的location参数值为:URI#access_token=..&token_type=
这种形式;URI的值为资源服务器上的。
第五步资源服务器返回的页面会执行js代码用于获取Hash值的access_token,
token_type等参数,再将数据包含在访问第三方URI的请求中。
以上是基于简化模式的OAuth2.0协议的流程。
3).密码模式流程图
用户向第三方提供自己的用户名和密码,客户端使用这些信息,向"服务商提供商"索要授权(客户
端不得储存密码),该模式基本不使用(也违背OAuth协议的初衷,只有在其他授权模式无法执行
的情况下,才考虑)。
上图中B为第三方发出http请求包含的参数:
grant_type:授权类型,此处的值固定为"password",必选项。
username:用户名,必选项。
password:用户的密码,必选项。
scope:表示权限范围,可选项。
上图C为响应第三方的http请求包含的参数:查看授权码模式流程图的第五步。
以上是基于密码模式的OAuth2.0模式的流程。
客户端模式流程图
该模式是以第三方的名义向认证服务器进行认证授权。
上图中A为第三方发出http请求包含的参数:
granttype:授权类型,此处的值固定为"clientcredentials",必选项。
scope:权限范围,可选项。
上图B为响应第三方的http请求包含的参数:查看授权码模式流程图的第五步。
以上是基于客户端模式的OAuth2.0模式的流程。
参考:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
相关推荐
OAuth 2.0 协议中文译本共分为九大部分,分别介绍了 OAuth 2.0 协议的背景知识、术语中英对照表、OAuth 2.0 协议的中文译本、OAuth 2.0 协议的工作流程、OAuth 2.0 协议的安全机制、OAuth 2.0 协议的优点、OAuth 2.0...
**OAuth2.0协议概述** OAuth2.0是一种授权框架,允许第三方应用在用户许可的情况下,访问特定资源。它主要用于安全地实现用户数据的共享,比如社交媒体登录、云存储服务等。OAuth2.0的核心是将用户的授权过程与实际...
### OAuth2.0协议原理与实现 #### 一、OAuth2.0协议概述 OAuth2.0协议是一种广泛应用于第三方登录及授权的标准协议。相比于OAuth1.0版本,OAuth2.0进行了多方面的优化和改进,例如简化了授权流程、取消了Token的...
OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用...
首先,OAuth2.0协议主要包括四个角色:资源所有者(Resource Owner)、客户端(Client)、资源服务器(Resource Server)和授权服务器(Authorization Server)。在服务端授权码模式下,客户端通过引导用户访问授权...
2. **定义自定义实体类**: OAuth2.0协议并没有规定具体的实体类,你需要根据项目需求创建UserDetails、AccessToken、RefreshToken等对象。 3. **实现授权逻辑**: 包括用户认证、权限检查和令牌生成与管理。这可能...
2. **OAuth2.0协议**: OAuth2.0的核心是授权流程,包括四个主要角色:资源所有者(用户)、客户端(第三方应用)、资源服务器(用户数据所在的服务器)和授权服务器(处理授权请求的服务器)。流程通常包括授权码...
OAuth2.0的核心概念包括四个主要角色:资源所有者(Resource Owner)、客户端(Client)、授权服务器(Authorization Server)和资源服务器(Resource Server)。资源所有者是拥有数据的用户,客户端是需要访问这些...
在这个OAuth2.0实现中,它将定义项目依赖,如Spring Security OAuth2库,用于处理OAuth2.0协议的各个步骤。可能的依赖包括`spring-security-oauth2`, `spring-web`, `spring-security-core`, `spring-security-...
服务端是OAuth协议的核心,负责验证用户身份并颁发访问令牌(Access Token)。在`oauthserver`项目中,我们通常会配置以下几个核心组件: - **Authorization Endpoint**:用户在此处授权应用访问其资源。 - **Token...
总的来说,OAuth2.0协议为应用之间共享资源提供了安全、高效、可扩展的机制,广泛应用于需要用户授权来访问特定资源的互联网服务中。通过理解和掌握OAuth2.0协议,开发者能够更好地构建需要用户授权的第三方应用,...
OAuth2.0 简单介绍文档 OAuth(开放授权)是一种授权协议,允许第三方应用在用户同意的情况下,安全地访问存储在另一服务提供商上的用户资源,而无需共享用户的用户名和密码。OAuth1.0 和 OAuth2.0 是两个主要的...
它基于OAuth2.0协议,该协议允许第三方应用在用户授权下访问受保护的资源,而无需共享用户的登录凭据。这个"spring oauth2.0 例子"是一个在MyEclipse集成开发环境中创建的示例项目,用于演示如何在Spring框架中实现...
OAuth 2.0 是一种广泛使用的开放标准,用于授权第三方应用程序访问用户在特定服务上的数据,而无需共享用户的登录凭证。这个协议的核心在于提供了一种安全的机制,使得用户可以控制哪些应用能访问他们的资源,比如...
OAuth2.0是一种广泛使用的开放授权协议,它允许第三方应用在用户许可的情况下访问其存储在另一服务提供商上的私有资源。这个协议的核心是为了解决API的安全访问问题,避免用户直接将用户名和密码提供给第三方应用。...
OAuth2.0 是一个授权框架,广泛应用于各种Web应用程序和服务,为第三方应用安全地访问用户数据提供了标准。在SharePoint中集成OAuth2.0,可以实现更安全、灵活的身份验证和授权机制。 OAuth2.0 的核心概念包括四个...
通过深入研究 Apache Amber 的源码,开发者不仅可以理解 OAuth 2.0 协议的工作原理,还能学习到如何在实际项目中实现和定制 OAuth 2.0 服务端。这将有助于提升应用的安全性和用户体验,因为用户可以在不泄露用户名和...
JFinal是一个轻量级的MVC框架,它简化了上述流程的实现,提供了对OAuth2.0协议的支持。项目可能包含了各个平台的配置文件、OAuth2.0客户端代码以及处理回调和用户会话的控制器。 4. **注意事项**: - 安全性:妥善...