OAuth2.0摘要

1、简介

不使用oauth2.0协议,资源全部者直接给须要使用资源的第三方应用共享凭据时,有这些问题:安全

  • 须要直接共享给第三方应用凭据
  • 须要服务器支持密码身份验证
  • 凭据的访问权限过大,失去对访问时间和范围的控制
  • 不能灵活撤销发出的凭据
  • 任何第三方都要共享凭据

oauth引入了受权层,分离了客户端和资源全部者的角色服务器

客户端在请求资源时,被颁发的是另外一套凭据代理

一、角色

oauth的四种角色:code

  • 资源全部者
  • 资源服务器
  • 客户端
  • 受权服务器

受权服务器和资源服务器能够是同一台,受权服务器能够颁发被多个资源服务器接受的访问令牌token

二、协议流程

     +--------+                               +---------------+
     |        |--(A)- Authorization Request ->|   Resource    |
     |        |                               |     Owner     |
     |        |<-(B)-- Authorization Grant ---|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(C)-- Authorization Grant -->| Authorization |
     | Client |                               |     Server    |
     |        |<-(D)----- Access Token -------|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(E)----- Access Token ------>|    Resource   |
     |        |                               |     Server    |
     |        |<-(F)--- Protected Resource ---|               |
     +--------+                               +---------------+

客户端用于从资源全部者得到受权许可(步骤(A)和(B)所示)的更好方法是使用受权服务器做为中介,而不是直接从资源全部者获取图片

三、受权许可

(一)受权码

客户端引导资源全部者至受权服务器,许可后受权服务器引导资源全部者带着code受权码回到客户端,客户端再带着code访问受权服务器获取token资源

(二)隐式许可

简化的受权码模式,资源全部者在受权服务器验证经过之后,直接带着token令牌返回客户端。开发

减小请求往返的数量,增长了安全风险。在传输的过程当中暴露了令牌,没有对客户端作验证字符串

(三)资源全部者密码凭据

当资源全部者和客户端高度信任时,客户端直接带着资源全部者的密码凭据访问受权服务器,换回tokenoauth2.0

用来一次性获取令牌,客户端能够不用保存资源全部者的密码凭据

(四)客户端凭据

当客户端本身表明资源全部者或者实现和受权服务器约定好时,客户端带着本身的凭据访问受权服务器,换回token

四、访问令牌

令牌表明了访问权限的由资源全部者许可并由资源服务器和受权服务器实施的具体范围和期限

五、刷新令牌

受权服务器能够在颁发访问令牌时多颁发一个刷新令牌

  • 用于客户端在访问令牌即将过时时向受权服务器换取新访问令牌
  • 用于客户端向受权服务器换取权限相等或更窄范围的访问令牌
  +--------+                                           +---------------+
  |        |--(A)------- Authorization Grant --------->|               |
  |        |                                           |               |
  |        |<-(B)----------- Access Token -------------|               |
  |        |               & Refresh Token             |               |
  |        |                                           |               |
  |        |                            +----------+   |               |
  |        |--(C)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(D)- Protected Resource --| Resource |   | Authorization |
  | Client |                            |  Server  |   |     Server    |
  |        |--(E)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(F)- Invalid Token Error -|          |   |               |
  |        |                            +----------+   |               |
  |        |                                           |               |
  |        |--(G)----------- Refresh Token ----------->|               |
  |        |                                           |               |
  |        |<-(H)----------- Access Token -------------|               |
  +--------+           & Optional Refresh Token        +---------------+

 

2、客户端注册

客户端须要在受权服务器上注册,不用直接交互,能够依靠其余方式来创建信任关系

当注册客户端时,客户端开发者应该:

  • 指定客户端类型
  • 提供客户端重定向URI
  • 包含受权服务器要求的任何其余信息(如,应用名称、网址、描述、Logo图片、接受法律条款等)

一、客户端类型

根据安全状况分:

  • 机密客户端
  • 公开客户端

根据客户端配置分:

  • Web应用程序
  • 基于用户代理的应用
  • 本机应用程序

二、客户端标志

一个表明客户端提供的注册信息的惟一字符串

三、客户端身份验证

使用client_id和client_secret做为客户端凭据

使用Basic Authorization基本认证在请求正文中传输,例如:

Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3

 

3、协议端点

受权过程采用了两种受权服务器端点(HTTP资源):

  • 受权端点——客户端用其经过用户代理重定向从资源全部者获取受权。
  • 令牌端点——客户端用其将受权许可交换为访问令牌,一般伴有客户端身份验证。

  以及一种客户端端点:

  •  重定向端点——受权服务器用其经过资源全部者用户代理向客户端返回含有受权凭据的响应。

并非每种受权许可类型都采用两种端点。

一、受权端点

受权端点被受权码许可类型和隐式许可类型流程使用

客户端使用response_type参数通知受权服务器指望的许可类型,"code"是受权码许可,"token"是隐式许可

完成资源全部者的交互后,受权服务器将用户代理重定向至重定向端点"redirect_uri"

受权服务器必需要求公开客户端和采用隐式许可的机密客户端注册重定向端点,必须是绝对URI,能够注册多个

二、令牌端点

客户端使用受权许可或刷新令牌从令牌端点获取令牌,只有隐式许可用不到

当发起令牌请求时必须使用"POST"方法

在向令牌端点发起请求时,机密客户端或其余被颁发客户端凭据的客户端与受权服务器进行身份验证,可使用“client_id”请求参数标识本身

三、访问令牌范围

客户端可使用“scope”参数来指定访问请求的范围

 

4、得到受权

相关文章
相关标签/搜索