OAuth2 授权

Jun 15, 2019 17:48 · 1064 words · 3 minute read OAuth2

OAuth2 是一种授权框架,使第三方应用程序能够访问像微信和支付宝这些人手必备的账号。它的工作原理是将用户身份验证委托给某个平台,并授权我们的应用程序访问平台上的账号

OAuth 角色

OAuth 定义了四种角色:

  • 资源所有者(Resource Owner)
  • 客户端(Client)
  • 资源服务器(Resource Server)
  • 授权服务器(Authorization Server)

资源所有者:用户

资源所有者就是授权应用程序访问他们的账号的用户。应用程序对用户账号的访问仅限于被授权的操作。

资源/授权服务器:API

资源服务器托管了用户账号,授权服务器验证用户的身份,给予应用程序访问令牌(access token)。

客户端:应用程序

客户端是要访问用户账号的应用程序。在这之前必须由用户授权并调用 API 验证授权。

协议流程

交互流程:

  1. 应用程序 请求授权
  2. 用户 批准请求,应用程序 获取授权
  3. 应用程序授权服务器 API 请求访问令牌,这个访问令牌代表它的身份和授权
  4. 授权有效,授权服务器 签发访问令牌。至此授权完成。
  5. 应用程序资源服务器 请求资源,出示访问令牌。
  6. 如果令牌有效,资源服务器 提供 应用程序 想要的资源。

应用程序登记

在应用程序使用 OAuth 之前,必须在平台登记它。可能是调用 API 也可能是手动在平台的网站上填写,你要提供以下信息:

  • 应用程序名称(Application Name)
  • 应用程序网站(Application Website)
  • 重定向 URI 或者 回调 URL(Redirect URI/Callback URL)

回调 URL 是平台授权(或拒绝)你的应用程序后调用并告知授权结果,因此应用程序要处理授权代码或访问令牌。

客户端 ID 和密钥(Client ID and Secret)

当你的应用程序登记后,平台会签发“用户证书”,包含客户端 ID 和客户端密钥。这里客户端 ID 是标识应用程序的公开的字符串,而客户端密钥在应用程序访问用户账号时用来验证应用程序身份,必须在应用程序和平台之间保持私有。

授权

在上面的流程图中,前四部包含了获得授权和访问令牌(access token),授权类型取决于应用程序用于请求授权的方法,以及 API 支持的授权类型。OAuth2 定义了四种:

  • 授权码(Authorization Code)也是最常用的一种
  • 隐式许可(Implicit)
  • 密码凭证(Resource Owner Password Credentials)
  • 客户端凭证(Client Credentials)

通过这些不同类型的授权方式都可以拿到访问令牌。

访问令牌使用

当我们拿到访问令牌,就可以在调用 API 时带上令牌来访问用户的账号,直到令牌过期或被吊销。

在 HTTP Header 中带上访问令牌:curl -X POST -H "Authorization: Bearer ACCESS_TOKEN""https://api.thirdparty.com/v2/$OBJECT"

如果令牌有效,API 将根据其 API 规范处理请求。