一、OAuth协议介绍
OAuth是一种标准授权协议,它允许用户在不需要向第三方网站或应用提供密码的情况下向第三方网站或应用授予对存储于其他网站或应用上的信息的委托访问权限。OAuth通过访问令牌来实现这一功能。
1.发展历史
OAuth协议始于2006年Twitter公司OpenID项目,该公司的一位合作伙伴希望通过OpenID来实现委派认证,在经过研究后他们发现还没有一项关于API委派访问的开放标准,于是他们在2006年成立了OAuth讨论组,并且在当年的12月就发布了OAuth1.0协议。2010年4月,IETF将OAuth1.0纳入标准协议,编号为rfc5849,2012年OAuth2.0发布。
2.OAuth角色
OAuth协议中定义了4个角色:
- 资源所有者
拥有向受保护资源授权能力的实体,我们可以理解为用户。
- 资源服务器
存储受保护资源的服务器,可以接收带access_token的请求并返回受保护的资源。
- 客户端
代表资源所有者请求受保护资源的应用即第三方的应用。
- 授权服务器
在资源所有者通过认证后向客户端签发access_token的服务器。
3.抽象流程
下面这张图描述了OAuth协议中四个角色的交互过程。
A.客户端向资源所有者请求授权。
B.客户端接收到授权凭证,这里的授权凭证是一个代表资源所有者授权的凭证。
C.客户端与授权服务器交互并提交授权凭证。
D.授权服务器对客户端进行认证并验证授权凭证,如果有效,则颁发访问令牌。E.客户端使用访问令牌向资源服务器请求受保护资源。
F.资源服务器验证访问令牌,如果有效,向客户端返回受保护的资源。
4.相关概念
授权模式
授权模式指的是客户端向授权服务器获取访问令牌(Access Token)的方式,RFC6749中定义了四种授权模式及一种拓展机制。
授权码模式
授权码是客户端获取访问令牌的一个临时凭据,授权码模式也是四种授权模式中最安全的一种。在授权码模式中,用户授权后,认证服务器向客户端生成授权码,客户端再利用授权码向认证服务器请求访问令牌。
隐式授权模式
隐式授权是一种简化的授权码模式,在隐式授权模式中,认证服务器没有向客户端签发授权码这一步骤,直接向客户端颁发访问令牌。
密码授权模式
密码模式主要应用于高度可信的客户端中,用户需要向客户端提供自己的用户名和密码,客户端再利用用户名和密码向认证服务器请求访问令牌。
客户端凭据
客户端凭据的主要应用场景是其访问的资源为相对固定的受保护资源,客户端仅代表自身去向资源服务器请求资源。
访问令牌
访问令牌是用于访问受保护资源的凭据,访问令牌一般都会包含用户身份、访问范围、有效时间等信息。
刷新令牌
刷新令牌是用于获取访问令牌的凭据,主要是在访问令牌过期后用来向认证服务器请求新的访问令牌。
5.OAuth客户端
客户端也是OAuth协议中非常重要的一个概念