目录
  • OAuth是什么呢?
  • 版本
  • 应用场景
  • 三个重要步骤
  • AccessToken 与 RefreshToken
  • 获取用户授权的request token
OAuth是什么呢?

OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方不需要用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth是Open Authorization的简写。

在OAuth 2.0的认证和授权的过程中主要包括以下角色定义:

  • Resource owner: 资源所有者(通常指用户或者提供资源服务的平台)
  • Resource server:资源服务器(托管受保护资源的服务器)
  • Client:客户端(浏览器、APP)
  • Authorization server:授权服务器(颁发访问令牌、验证令牌、刷新令牌)
版本

OAuth 1.0 发布于2007年末

OAuth 2.0 发布于2010年初,现在都是用OAuth 2.0协议作为支撑

应用场景

例如:

  • QQ用户授权慕课网使用其他QQ账号相关信息
  • 获取授权后,在符合权限规则的情况下访问各种api
三个重要步骤
  1. 请求OAuth登录页

RequesToken URL – 未授权的令牌请求服务地址

慕课网请求QQ登录页面时使用的带有 特定参数的URL

  1. 用户使用QQ号登录并授权
    即输入正确的账号和密码就可以啦,但如果输入的QQ号和密码不匹配 ,直接就会被QQ的OAuth服务器拒绝,然后让我们重新输入
  2. 返回登录结果
    User Authorization URL – 用户授权的令牌请求服务地址
    即可以这样理解:用户QQ登录授权之后需要请求点的一个带有特定参数的URL
https://xx.qq.com/oauth/…?…
&client_id=100490322&……
&client_secret=xxxxxx&……
&code=xxxxx……

响应数据里面还会包含一个重要的参数 :

AccessToken --这个是用户通过第三方应用访问OAuth接口的令牌 (可以看做用户发送第三方网站的令牌)


AccessToken 与 RefreshToken
  • access token 是应用方访问资源服务器的接口时,需要提供的一个令牌。拥有这个令牌就代表着得到用户的授权。然而,这个授权应该是临时的,有一定有效期。这是因为,access token 在使用的过程中可能会泄露。给 access token 限定一个较短的有效期可以降低因 access token 泄露而带来的风险
  • 引入了有效期之后,应用方使用起来就不那么方便了。每当 access token 过期,应用方就必须重新向用户索要授权。这样用户可能每隔几天,甚至每天都需要进行授权操作。这是一件非常影响用户体验的事情
  • 于是OAuth2.0 引入了 refresh token 机制。refresh token 的作用是用来刷新 access token。鉴权服务器提供一个刷新接口
如: http://xxx.xxx.com/refresh?refreshtoken=&client_id=

传入 refresh token 和 client_id,鉴权服务器验证通过后,返回一个新的 access token

为了安全,OAuth2.0 引入了两个措施:
  1. refresh token 一定是保存在应用方的服务器上的,而绝不能存放在狭义的客户端(例如移动 app、PC端软件) 上。调用 refresh 接口的时候,一定是从服务器到服务器的访问
  2. OAuth2.0 引入了 client_secret 机制。即每一个 client_id 都对应一个 client_secret。这个 client_secret 会在应用方申请 client_id 时,随 client_id 一起分配给客户端。应用方必须把 client_secret 妥善保管在服务器上,决不能泄露。刷新 access token 时,需要验证这个 client_secret。
https://xxx.xxx.com/refresh?refreshtoken=&client_id=&client_secret=

[^refresh token是在用户完成授权时,随 access token 一起重定向到回调 url,传递给应用方。]:

获取用户授权的request token

请求参数:

OAUTH_token:可选。在前述步骤中获得的请求令牌。服务提供方可以声明此参数为必须,也可以允许不包含在授权URL中并提示用户手工输入。

OAUTH_callback:可选。消费方可以指定一个URL,当 获取用户授权 (获取用户授权)成功后,服务提供方将重定向用户到这个URL。

附加参数:由服务提供方定义的任意参数。