跳到主要内容

OAuth_2.0

1. 1. OAuth 是什么?

OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。

2. 2. 运行流程

  1. 用户打开客户端以后,客户端要求用户给予授权。
  2. 用户同意给予客户端授权。
  3. 客户端使用上一步获得的授权,向认证服务器申请令牌。
  4. 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
  5. 客户端使用令牌,向资源服务器申请获取资源。
  6. 资源服务器确认令牌无误,同意向客户端开放资源。

3. 3. 客户端的授权模式

客户端必须得到用户的授权,才能获得令牌。OAuth 2.0 定义了四种授权方式。

  • 授权码模式
  • 简化模式
  • 密码模式
  • 客户端模式

3.1 授权码模式

  1. 用户访问客户端,后者将前者导向认证服务器。
  2. 用户确认客户端信息并确认授权后,认证服务器将用户导向客户端事先指定的"重定向 URI",同时附上一个授权码。
  3. 客户端收到授权码,向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
  4. 认证服务器核对了授权码和重定向 URI,确认无误后,向客户端发送访问令牌。

3.2 简化模式

  1. 客户端将用户导向认证服务器。
  2. 用户确认客户端信息并确认授权后,认证服务器将用户导向客户端指定的"重定向 URI",并在 URI 的 Hash 部分包含了访问令牌。
  3. 因此客户端在前端可以直接拿到访问令牌。
提示
  1. 令牌的位置是 URL 锚点,而不是查询字符串,这是因为存在"中间人攻击"的风险,而浏览器跳转时,锚点不会发到服务器,就减少了泄漏令牌的风险。
  2. 这种方式把令牌直接传给前端,是很不安全的。因此,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间有效,浏览器关掉,令牌就失效了。