【OAuth】OAuth2.0四种授权模式

什么是OAuth?

开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务器提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供的某些特定信息,而非所有内容。

OAuth2.0是OAuth协议的下一个版本,但不向下兼容OAuth1.0。OAuth2.0关注客户端开发者的简易性,同时为Web应用、桌面应用、手机和智能设备提供专门的认证流程。

资源拥有者凭证许可(Resource Owner Password Credentials Grant)

资源拥有者的凭证,就是用户的凭据,就是用户名和密码。

【OAuth】OAuth2.0四种授权模式_第1张图片

  1. 小明(资源拥有者)访问小兔软件,录入用户名和密码,索要用户名和密码,就是资源拥有者凭据许可类型的特点。
  2. 携带用户名和密码请求访问令牌access_token值。
  3. 授权服务在验证用户名和密码之后,生成access_token的值并返回给第三方软件。
  4. 后面用户访问受保护资源的时候就附带着access_token值去访问。

客户端凭证许可(Client Credentials Grant)

在客户端凭证许可授权流程中,就不再需要资源拥有者这个角色了。当然,你也可以形象地理解为“资源拥有者被塞进了第三方软件中”或者“第三方软件就是资源拥有者”。这种场景下的授权,便是客户端凭证许可,第三方软件可以直接使用注册时的app_idapp_secret来换回访问令牌token的值。

【OAuth】OAuth2.0四种授权模式_第2张图片

  1. 第三方软件通过后端服务项授权服务发送请求,告诉授权服务要使用第三方软件凭据的方式去请求访问。
  2. 在验证app_id 和 app_secret的合法性之后,生成access_token的值并返回。
  3. 用户访问受保护资源的时候就附带着access_token值去访问

隐式许可(Implicit Grant)

如果使用的软件应用没有后端服务,就是在浏览器执行的,比如纯粹的JavaScript应用,应该如何使用OAuth 2.0 呢?

这种情况的授权流程就可以使用隐式许可流程,可以理解为第三方软件小兔直接嵌入浏览器中了。

因此,隐式许可授权流程的安全性会降低很多。再授权流程中,没有服务端的小兔软件相当于是嵌入到了浏览器中,访问浏览器的过程相当于接触了小兔软件的全部。

【OAuth】OAuth2.0四种授权模式_第3张图片

  1. 用户通过浏览器访问第三方软件。此时,第三方软件实际上是嵌入浏览器中执行的应用程序。
  2. 请求访问令牌access_token值。
  3. 生成access_token的值,通过前端通信返回给第三方软件。
  4. 用户访问受保护资源的时候就附带着access_token值去访问

授权码授权模式(Authorization code Grant)

【OAuth】OAuth2.0四种授权模式_第4张图片

  1. 用户访问页面
  2. 访问页面重定向到认证服务器(也可以叫做认证中心)
  3. 认证服务器向用户展示授权页面,等待用户授权
  4. 用户授权,认证服务器生成一个code和带上client_id发送给应用服务器
  5. 应用服务器拿到code,client_id去后台查询对应的client_secret
  6. 将code、client_id、client_secret传给认证服务器换取access_token和refresh_token
  7. 将access_token和refresh_token传给应用服务器
  8. 验证token,访问真正的资源页面。

你可能感兴趣的:(工具,oauth2.0,OAuth,用户授权)