使用三方 OAuth 流程获取用户访问令牌

要代表其他用户执行操作,需要获取该用户的访问令牌。访问令牌指定了代表其发出请求的 Twitter 账号,因此用户需要先向你授予访问权限,然后你才可获取这些令牌。 这些令牌不会过期,但用户随时都可撤销它们。

在 Twitter 上,你可通过三方 OAuth 流程获取用户访问令牌,这样可将用户重定向到 Twitter,让他们向你的应用程序授权,从而使您的应用程序获得访问令牌和访问令牌机密。该流程与实现“使用 Twitter 登录”中描述的流程几乎相同,只有下面两点区别:

在开始之前,需要检查应用程序的权限,还需要知道使用者密钥和回调 URL。如果没有回调 URL 或者可公开访问的 URL,请考虑使用基于 PIN 的授权,无法访问或嵌入 Web 浏览器的应用程序可使用这种方法在授权后重定向用户。 

以下流程图说明了三方登录互动可能存在的状态:

流程概述

概括地说,三方 OAuth 流程将:

  1. 为使用者应用程序创建一个请求来获取请求令牌。
  2. 让用户进行验证并向使用者应用程序发送请求令牌。
  3. 将请求令牌转换为可用的用户访问令牌。

 

术语说明

在以下指南中,你可能会看到不同的术语表示同一内容。

客户端凭据:

  • 应用密钥 === API 密钥 === 使用者 API 密钥 === 使用者密钥 === 客户密钥 === oauth_consumer_key
  • 应用密钥机密 === API 机密密钥 === 使用者机密 === 使用者密钥 === 客户密钥 === oauth_consumer_secret
  • 回调 URL === oauth_callback
     

临时凭据:

  • 请求令牌 === oauth_token
  • 请求令牌机密 === oauth_token_secret
  • oauth_verifier
     

令牌凭据:

  • 访问令牌 === 令牌 === 生成的 oauth_token
  • 访问令牌机密 === 令牌机密 === 生成的 oauth_token_secret

 

演示步骤

步骤 1: POST oauth/request_token

为使用者应用程序创建一个请求来获取请求令牌。

此请求中只有一个特殊参数,那就是 oauth_callback,它必须是你希望用户在完成步骤 2 时被重定向到的 URL 的 URL 编码版本。其余参数由 OAuth 签名过程添加。

请注意 - 与 POST oauth/request_token 端点一起使用的任何回调 URL 都必须在开发者门户的应用详细信息页面中的开发者应用设置中进行配置。
 

请求包括:

oauth_callback="https%3A%2F%2FyourCallbackUrl.com"

oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w" 

应用应检查响应的 HTTP 状态。只要值不是 200,就表示存在故障。响应的正文将包含 oauth_tokenoauth_token_secretoauth_callback_confirmed 参数。应用应验证 oauth_callback_confirmed 是否为 true,并存储其他两个值供后续步骤使用。
 

响应包括

oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0

oauth_token_secret=veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI

oauth_callback_confirmed=true


步骤 2:GET oauth/authorize

让用户进行验证并向使用者应用程序发送请求令牌。
 

要将用户重定向到的 URL 示例:

https://api.twitter.com/oauth/authorize?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0

成功身份验证后,callback_url 将收到一个包含 oauth_tokenoauth_verifier 参数的请求。应用程序应验证令牌是否与步骤 1 中收到的请求令牌匹配。
 

来自客户端重定向的请求:

https://yourCallbackUrl.com?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0&oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY


步骤 3:POST oauth/access_token

将请求令牌转换为可用的访问令牌。

要使请求令牌转换为可使用的访问令牌,应用程序必须向 POST oauth/access_token 端点发出请求,并附上在步骤 2 中获得的 oauth_verifier 值。请求令牌也在标头的 oauth_token 部分中传递,但签名过程中已经添加了该令牌。
 

请求包括:

POST /oauth/access_token

oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w

oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0

oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY

成功的响应包含 oauth_tokenoauth_token_secret 参数。应存储令牌和令牌机密,并将其用于今后针对 Twitter API 的经过身份验证的请求。要确定用户的身份,请使用 GET account/verify_credentials
 

响应包括:

oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

oauth_token_secret=PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo

 

将这些凭据用于需要 OAuth 1.0a(应用程序-用户)的请求

现在,你已获得用户访问令牌。接下来可使用它们来访问某些 API(例如 POST statuses/update),以代表用户创建推文。
 

请求包括:

POST statuses/update.json

oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w

oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

 

用例示例

标准流程是在网站上进行的,且使用三方授权 OAuth 流程。下述屏幕截图是示例的部分内容,你可通过 https://github.com/twitterdev/twauth-web 查看它的来源。

有时在应用程序中,你需要重定向到 Twitter 来为应用程序授权。image0当你使用请求令牌重定向到 Twitter 时,系统将提示用户为你的应用程序授权。image1为应用程序授权后,用户将被重定向到你生成请求令牌时提供的回调 URL。你将用它来获取此用户的永久访问令牌,并将此令牌存储在本地。image2