OAuth2.0简介

什么是OAuth

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

举个例子: 用户借助QQ认证去登录网站A,如果认证通过了,就不需要用户手动在网站A注册账户了。

那么怎么样才算认证通过?网站A成功从QQ获取用户信息则认为认证成功了。那么如何从QQ那里获取用户的身份信息呢?用户信息的拥有者是用户本人,QQ需要经过用户同意才可以为网站A生成令牌,而网站A拿到此令牌才可从QQ获取用户信息。

OAuth的思路

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

“第三方应用程序"登录授权层以后,“服务提供商"根据令牌的权限范围和有效期,向"第三方应用程序"开放用户储存的资料。

运行流程

  • Third-party application: 第三方应用程序,也可称为"客户端”,即例子中的"网站A”。它本身不储存资源,需要通过资源所有者的授权去请求资源服务器的资源。
  • HTTP service: HTTP服务提供商,即例子中的QQ。
  • Resource Owner: 资源所有者,也就是用户。
  • User Agent: 用户代理,一般是指浏览器。
  • Authorization server: 认证服务器,即服务提供商用来处理认证的服务器,用于服务提供商对资源拥有者的身份进行认证、对资源访问进行授权、认证成功后给客户端发放令牌(Access Token, 客户端访问资源服务器的凭据)。
  • Resource server: 资源服务器,即服务提供商存放用户资源的服务器。

认证服务器与资源服务器,它们可以是同一台服务器,也可以是不同的服务器。

运行流程
运行流程

  1. 用户打开第三方应用程序以后,第三方应用程序要求用户给予授权。
  2. 用户同意给予第三方应用程序授权。
  3. 第三方应用程序使用上一步获得的授权,向认证服务器申请令牌。
  4. 认证服务器第三方应用程序进行认证以后,确认无误,同意发放令牌。
  5. 第三方应用程序使用令牌,向资源服务器申请获取资源。
  6. 资源服务器确认令牌无误,同意向第三方应用程序开放资源。
  7. 第三方应用程序拿到资源后,即可得知认证通过。

参考: