活动地址:CSDN21天学习挑战赛
Oauth2.0协议文档: https://www.rfc-editor.org/rfc/rfc6749.html
概述
-
是什么
OAuth 即 Open standard for Authorization(开放式授权标准),允许用户授权第三方访问自身存储在其他服务端上的信息,而无需向第三方提供相应的账户密码.
OAuth作为一个公开的网络授权协议标准.它为客户端提供了一种资源拥有者访问受限资源得方法. 客户端在访问受限资源之前, 需要先得到资源拥有者的授权,通过授权换取一个访问令牌, 随后客户端向受限资源服务器出示令牌来获取所需资源.
-
主要解决什么问题?
举个例子: A第一次在京东买东西, 需要注册为京东用户才能使用, 但是A不想在注册, 这是京东的登录有微信第三方登录标记, A直接使用微信进行了登录,并成功购买了东西.
这里涉及到了 三个角色 A, 京东 , 微信, A选择微信登录京东,也就意味着A授权京东去微信上拉取自己的个人信息, 并且A也同意微信提供自己的信息出去.
这其中的授权与资源暴露都遵守了OAuth协议.使得资源在资源所有人允许的情况下达到了共享联通得效果.
-
优点
- 安全: Oauth2.0客户端不在交互用户密码, 服务端集中管理
- 标准应用广泛,通用高
- 资源控制以及授权管理独立
- 等
基本概念
专业术语
- 受保护资源:能够使用 OAuth 请求获取的访问限制性资源。(例如:图片)
- 资源服务器:能够接受和响应受保护资源请求的服务器。(例如:图片共享服务)
- 客户端:获取授权和发送受保护资源请求的应用。(例如:打印服务)
- 资源拥有者:能够对受保护资源进行访问许可控制的实体。(例如:web 用户)
- 终端用户:起到资源拥有者角色的用户。
- 令牌:分发给客户端的代表访问授权的字符串。通常这个字符串对客户端来说是不 透明的。令牌代表资源拥有者许可的访问作用域和持续时间,并由资源服务器和授 权服务器强制保证。这个令牌可以代表一个标识符,用于检索授权信息,或以一种 可验证的方式自包含授权信息(即一个包含数据和签名的令牌字符串)。令牌可能 只代表纯粹的访问能力。而为了让客户端使用令牌,也可能需要一些多余的特定验 证证书。
- 访问令牌:被客户端用来代表资源拥有者发送验证请求的令牌。
- 刷新令牌:被客户端用来获取新的访问令牌的令牌,而不用资源拥有者的参与。
- 授权码:一个短期令牌,代表终端用户的授权。授权码用于获取一个访问令牌和一 个刷新令牌。
- 访问许可:用于描述中间形式的私有证书(如终端用户的密码或授权码)的一个通 用词汇,代表资源拥有者的授权。客户端使用访问许可来获取访问令牌。通过将各 种形式的访问许可都交换成访问令牌,资源服务器只需要支持一种验证机制。
- 授权服务器:能够成功验证资源拥有者和获取授权,并在此之后分发令牌的服务器。 授权服务器可以和资源服务器是同一个服务器,也可以是不同的实体。单独一个授 权服务器可以为多个资源服务器分发令牌。
角色
OAuth2.0主要包含了一下几个角色
- Resource Owner : 资源所有者,可以理解为用户自身
- Authiruzation Server : 授权服务器, 用于认证资源所有者,并提供授权审批的功能, 颁发令牌,用于获取资源. 授权服务器和资源服务器可以是同一服务器,也可以不同. 一个授权服务器可以为多个资源服务器颁发令牌.
- Resource server : 资源服务器,能够接受和响应受保护资源请求的服务器。
- Client : 客户端 获取授权和发送受保护资源请求的应用。
- user-agent : 用户代理
认证流程
(A) 客户端向资源拥有者发送访问受限资源的认证授权请求
(B) 资源拥有者允许授权并返回访问许可
© 客户端携带着自己的证书 ,请求认证服务器, 出示访问许可 来换取一个访问令牌
(D) 认证服务器校验证书以及访问许可的有效性, 成功则颁发一个访问令牌
(E) 客户端拿到访问令牌,向资源服务器请求保护资源.
(F) 资源服务器验证令牌通过, 返回客户端所需资源