本文参考下面三篇文章,后面两篇需翻墙

如需要直接了解协议内容

  • [RFC6749](https://tools.ietf.org/html/rfc6749#section-4.2)

OAuth2.0基本概念

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。

OAuth2.0应用场景

企业开放平台,对外输出自己的基础服务。

目前很常见的当你使用小程序或公众号时,他们会直接使用你微信的名称和头像,微信名称和头像等信息是你保存在微信服务器上的信息,只有经过你同意,微信才会将这部分信息交给第三方的小程序或公众号使用,这个场景下就需要授权。

OAuth2.0协议参与者

  • RO (resource owner): 资源所有者,对资源具有授权能力的人。如如应用场景中的用户自己。
  • RS (resource server): 资源服务器,它存储资源,并处理对资源的访问请求。如应用场景中的微信服务,用户的信息保存在微信的服务器上。
  • Client: 第三方应用,它获得RO的授权后便可以去访问RO的资源。如各种小程序和公众号。
  • AS (authorization server): 授权服务器,它认证RO的身份,为RO提供授权审批流程,并最终颁发授权令牌(Access Token)。

OAuth2.0协议基础流程

OAuth Abstract Protocol Flow

(A)用户打开客户端以后,客户端要求用户给予授权。

(B)用户同意给予客户端授权。

(C)客户端使用上一步获得的授权,向认证服务器申请令牌。

(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。

(E)客户端使用令牌,向资源服务器申请获取资源。

(F)资源服务器确认令牌无误,同意向客户端开放资源。

OAuth2.0模式

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

每种模式的交互图可参考:Diagrams And Movies Of All The OAuth 2.0 Flows

OAuth2.0模式选择方法

OAuth模式选择方法

OAuth2.0实践中的问题

  1. OAuth是一个授权协议,并不是认证协议,但是授权的过程中会包含认证。

    认证(authentication): who one is。

    授权(authorization): who grant what permissions to whom

  2. 针对的看