Oauth2解读

OAuth 2.0相对于OAuth来说是一个革命性的协议。它主要致力于简化客户端开发的认证流程。目前使用OAuth2的范围不仅仅只有web应用,还包括了桌面应用,移动设备和智能家庭设备。OAuth2.0的协议基于OAuth WRAP提议和IETF的OAuth WG。

协议框架:

  简介:

  OAuth2.0框架使得第三方应用可以获得有限的接入另外一个HTTP 服务的权限,或者是资源拥有者和HTTP服务之间建立的关联,又或者是允许第三方的应用接入自身的权限。

  传统的OAuth模型是基于服务器-客户端模式。客户端利用资源拥有者的证书来向服务器请求特定资源。此时资源拥有者和第三方应用共享同一证书。当然,这种模型又很多缺陷:

  a.第三方应用需要存储资源拥有者的证书以便后续使用,但是这个证书一般是明文密码。

  b.服务器需要支持密码认证,

  c.第三方应用权限过大,可以访问用户所有资源。

  d.资源所有者在不取消所有第三方证书的情况下,不能取消某个第三方的证书,除非它改变该第三方应用的密码。

  e.为了不使用资源所有者的证书,客户端得到了另外一种替代的方案--一个字符串access-token,这个字符串代表了客户端所拥有的权限,生存周期和一些其他属性。access-token是由认证服务器发给第三方客户端的凭证,当然是经过资源拥有者所允许的。

  角色:

  在OAuth2.0中,主角有四个:

  资源拥有者(resource owner): 一般就是我们的用户自己。享有资源的所有权限。

  资源服务器(resource server): 资源存储的地方。

  客户端(client): 一般是我们的第三方应用,需要向资源服务器请求资源。

  认证服务器(authorization server): 这个一般是跟资源服务器一起,主要提供用户的接入认证,颁发证书。

  流程图:(摘自rfc6749)

+--------+                               +---------------+
     |        |--(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 ---|               |
     +--------+                               +---------------+

  一。客户端注册流程

    客户端类型:

      可信的(confidential ):客户端可以获取到服务端的信任(即可以获取受限的资源)。

      公开的(public):客户端仅能获取到资源拥有者在服务器端的存在状态。

      其实说白了public公开的客户端,只用来说明用户在某个服务器上注册过。(例如,某些网站可以通过weibo来注册)。confidential客户端就可以获取到用户在服务器上的资源了。

      认证服务器可以支持客户端同时拥有可信和公开的身份,或者只支持一种方式(此时需要客户端分成两个不同的客户端来发出请求)。

    客户端标识符:

      认证服务器会颁发给客户端一个客户端标识符--一个唯一的包含客户端信息的字符串,

    客户端密码:

      客户端提交到认证服务器的client_id和client_secret应该被放置在请求消息体里面。

    授权端点:authorization endpoint

      这个端点的作用是与用户交互,并且获得服务器的承认。认证服务器必须首先验证用户的身份(如用户名密码登陆,cookie session等)。

      认证服务器必须支持“GET“和”POST“方法。

  

原文地址:https://www.cnblogs.com/bracken/p/2866868.html