OAuth2 授权
Jun 15, 2019 17:48 · 1064 words · 3 minute read
OAuth2 是一种授权框架,使第三方应用程序能够访问像微信和支付宝这些人手必备的账号。它的工作原理是将用户身份验证委托给某个平台,并授权我们的应用程序访问平台上的账号。
OAuth 角色
OAuth 定义了四种角色:
- 资源所有者(Resource Owner)
- 客户端(Client)
- 资源服务器(Resource Server)
- 授权服务器(Authorization Server)
资源所有者:用户
资源所有者就是授权应用程序访问他们的账号的用户。应用程序对用户账号的访问仅限于被授权的操作。
资源/授权服务器:API
资源服务器托管了用户账号,授权服务器验证用户的身份,给予应用程序访问令牌(access token)。
客户端:应用程序
客户端是要访问用户账号的应用程序。在这之前必须由用户授权并调用 API 验证授权。
协议流程
交互流程:
- 应用程序 请求授权
- 用户 批准请求,应用程序 获取授权
- 应用程序 向 授权服务器 API 请求访问令牌,这个访问令牌代表它的身份和授权
- 授权有效,授权服务器 签发访问令牌。至此授权完成。
- 应用程序 向 资源服务器 请求资源,出示访问令牌。
- 如果令牌有效,资源服务器 提供 应用程序 想要的资源。
应用程序登记
在应用程序使用 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 规范处理请求。