Skip to content

Latest commit

 

History

History
65 lines (42 loc) · 3.37 KB

OAuth2.md

File metadata and controls

65 lines (42 loc) · 3.37 KB

OAuth中的角色

资源拥有者

有权将访问权限授权给客户端的主体。

授权服务器

受保护资源用以向客户端颁发专用的安全凭据--OAuth访问令牌的组件。

受保护资源

是资源拥有者有权限访问的组件。

客户端

代表资源拥有者访问受保护资源的软件,使用OAuth来获取访问权限。

凭据共享与凭据盗用

复制用户的平局并用它登录另一个服务,没有区分资源拥有者和扮演资源拥有者的客户端,因为二者都以同样的方式使用相同的用户名和密码。

TOFU

首次使用时信任(Trust on First Use)。用户在首次运行时进行安全决策,而且并不为安全决策预设任何先决条件或者配置,仅提示用户做出决策。 OAuth实现并不强制要求采用TOFU方法管理安全决策,但是这两种技术经常结合使用。

OAuth 2的优缺点

  • 由众多可移动的组件构成的协议,但是在很多方面它都比其他方案更简单、安全。
  • 尽可能将复杂性从客户端转移到服务端。
  • 提供一种比密码略复杂的机制,使用得当时,安全性比密码高很多。
  • 授权服务器和受保护资源要承担更多复杂性和安全性方面的责任。
  • 提供可拓展性和模块化的同时,灵活性容易导致兼容性问题。

OAuth 2不能做什么

  • OAuth没有定义HTTP协议之外的情形。OAuth需要TLS这样的传输机制来保护这些信息。
  • OAuth不是身份认证协议。尽管用户确实存在,但OAuth事务本身并不透露关于用户的信息。
  • OAuth没有定义用户对用户的授权机制。User Managed Access协议由此而生,规定了如何使用OAuth构建一个支持用户对用户授权的协议。
  • OAuth没有定义授权处理机制。
  • OAuth没有定义令牌格式。OAuth协议令牌的内容对客户端是完全不透明的,授权服务器和接收令牌的受保护资源理解令牌需要借助JWT格式和令牌内省协议。
  • OAuth 2.0没有定义加密方法。
  • OAuth 2.0不是单体协议。

Grant Types(授权类型)

  • 授权码(Authorization Code):客户应用程序用授权码向授权服务器交换访问令牌。
  • 资源拥有者密码凭证(Resource Owner Password Credentials):客户应用程序使用用户的用户名和密码向授权服务器请求访问令牌。
  • Implicit:一种简化的授权流程,无须额外的授权码交换步骤即可立即获得访问令牌。
  • Client Credentials:客户代表自己向授权服务器申请访问令牌。
  • Refresh Token:刷新令牌。

JWT

JWT由三部分组成:

  • 第一部分描述了JWT使用的签名方法;
  • 第二部分包含真正的数据负载(用户身份、授权范围、过期时间戳等)。
  • 第三部分是数字签名

资源服务器使用授权服务器的公钥(Public Key)解密数字签名(JWT的第三部分)中加密过的哈希值,得到一个哈希值1。同时,资源服务器使用相同的哈希算法来计算JWT负载数据的哈希值2.如果哈希值1和哈希值2相同。如果哈希值1和哈希值2相同,这说明数据没有被篡改过。这个计算过程也证明了该JWT令牌是由授权服务器颁发的,因为授权服务器发布的公钥可以解密JWT令牌的数字签名

数据负载---(私钥)加密--->哈希值 数字签名---(公钥)解密--->哈希值