本文参考下面三篇文章,后面两篇需翻墙
如需要直接了解协议内容
- [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协议基础流程
(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模式选择方法
OAuth2.0实践中的问题
-
OAuth是一个授权协议,并不是认证协议,但是授权的过程中会包含认证。
认证(authentication): who one is。
授权(authorization): who grant what permissions to whom
-
针对的看