Oauth学习笔记

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用。

使用目的

OAuth主要用于向第三方平台进行授权的相关工作,避免第三方平台为了识别用户权限而存储用户的账户、密码等隐私信息。

OAuth的思路

OAuth在”客户端”与”服务提供商”之间,设置了一个授权层(authorization layer)。”客户端”不能直接登录”服务提供商”,只能登录授权层,以此将用户与客户端区分开来。”客户端”登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,指定授权层令牌的权限范围和有效期。

“客户端”登录授权层以后,”服务提供商”根据令牌的权限范围和有效期,向”客户端”开放用户储存的资料。

使用流程

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

客户端的授权模式

授权码模式(authorization code)

  1. 用户访问客户端,后者将前者导向认证服务器;
  2. 用户选择是否给予客户端授权;
  3. 假设用户给予授权,认证服务器将用户导向客户端事先指定的”重定向URI”(redirection URI),同时附上一个授权码;
  4. 客户端收到授权码,附上早先的”重定向URI”,向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见;
  5. 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

简化模式(implicit)

  1. 客户端将用户导向认证服务器;
  2. 用户决定是否给于客户端授权;
  3. 假设用户给予授权,认证服务器将用户导向客户端指定的”重定向URI”,并在URI的Hash部分包含了访问令牌;
  4. 浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值;
  5. 资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌;
  6. 浏览器执行上一步获得的脚本,提取出令牌;
  7. 浏览器将令牌发给客户端。

密码模式(resource owner password credentials)

  1. 用户向客户端提供用户名和密码;
  2. 客户端将用户名和密码发给认证服务器,向后者请求令牌;
  3. 认证服务器确认无误后,向客户端提供访问令牌。

客户端模式(client credentials)

  1. 客户端向认证服务器进行身份认证,并要求一个访问令牌;
  2. 认证服务器确认无误后,向客户端提供访问令牌。

参考

《理解OAuth 2.0》——阮一峰