简介
OAuth2 是一套授权机制,它使一个第三方应用程序(App)可以仅获取 http 服务的部分(受限)的访问权限。
传统的客户端-服务器授权模型非常简单,即客户端使用资源拥有者的证书去服务器访问对应的资源。为了让第三方App也可以访问到资源,资源的拥有者必须将证书共享给第三方应用程序,这就造成了以下一些问题:
- 第三方App需要去存储资源拥有者的证书——典型的比如账号及密码信息
- 服务端需要支持密码登录即校验——安全性低
- 第三方App的权限往往过大
- 资源拥有者不能只取消某个第三方App的资源访问权限
- 第三方App存储证书会有安全风险
OAuth 2 通过引入授权层,分离客户端和资源拥有者,来解决这些问题。
在 OAuth 中,客户端通过访问授权服务器来获取资源,而不是直接访问资源拥有者的服务。客户端使用授权服务器提供的 access token 来访问受保护的资源。
access token 中包含了授权范围、生命周期、以及其他的访问权限属性。
注:OAuth 2 被设计成仅和 HTTP 服务一起使用,任何在其他协议中使用都超过了其职责范围。
基础概念
- resource owner - 资源拥有者
- 一般来说是终端用户
- resource server - 资源服务器
- 保存资源拥有者资源的地方
- client - 第三方客户端
- 希望访问资源拥有者受保护资源的客户端
- authorization server - 授权服务器
- 验证 client 然后发布 access token
授权服务器 和 资源服务器可以是不同的服务;也可以是相同的服务。
**
- access token
- 用于访问资源拥有者被访问资源的证书
- 一般包含过期时间和授予的权限范围
- refresh token
带 Refresh Token 的协议流
HTTP 重定向
该规范广泛使用了 http redirect,即客户端不需要知道所有服务器的地址,在授权服务器返回时,直接重定向到另一个地址。