跳转到主要内容

使用三方(3-legged)OAuth 流程获取访问令牌

要代表其他用户执行操作,你需要获取他们的访问令牌。访问令牌指定请求所代表的 X 账户,因此在你获取这些令牌之前,用户需要先授予你访问权限。这些令牌不会过期,但用户可随时撤销。 X 允许你通过三方 OAuth 流程获取用户访问令牌。该流程会将用户重定向到 X 并让其授权你的应用,从而使你的应用获取访问令牌和访问令牌密钥。此流程与实现“使用 X 登录”中描述的流程几乎相同,但有两点不同: 在开始之前,你需要检查你的应用权限,并了解消费者密钥(consumer keys)和回调 URL。如果你没有回调 URL 或无法公开访问的 UI,考虑使用基于 PIN 的授权,该方式适用于无法访问或嵌入网页浏览器以便在授权后重定向用户的应用。  三方登录交互的可能状态如下图所示:

流程概览

总体而言,3-legged OAuth 流程将:
  1. 为消费者应用创建获取请求令牌的请求。
  2. 让用户完成身份验证,并将请求令牌发送给消费者应用。
  3. 将请求令牌转换为可用的用户访问令牌。
术语说明 在以下指南中,你可能会看到不同术语指代同一事物。 客户端凭证:
  • App Key === API Key === Consumer API Key === Consumer Key === Customer Key === oauth_consumer_key
  • App Key Secret === API Secret Key === Consumer Secret === Consumer Key === Customer Key === oauth_consumer_secret
  • Callback URL === oauth_callback  
临时凭证:
  • Request Token === oauth_token
  • Request Token Secret === oauth_token_secret
  • oauth_verifier  
令牌凭证:
  • Access token === Token === 最终的 oauth_token
  • Access token secret === Token Secret === 最终的 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.x.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 参数。应存储该令牌和令牌密钥,并在未来对 X API 发起的已认证请求中使用。要确定用户身份,请使用 GET account/verify_credentials。   响应包含: oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4 oauth_token_secret=PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo 将这些凭据用于需要 OAuth 1.0a(应用-用户)的请求 现在你已经获取了用户访问令牌;你可以使用它们访问某些 API,例如 POST statuses/update,代表用户创建 Tweet,或访问原始链接 POST statuses/update   请求包含: POST statuses/update.json oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

示例用例

标准流程基于网页,并采用三方授权的 OAuth 流程。此处展示的截图来自一个示例,你可以在 https://github.com/xdevplatform/twauth-web 查看其源代码。 在应用的某个流程节点,你需要将用户重定向至 X 以授权你的应用。
当你携带请求令牌重定向到 X 时,系统会提示用户授权你的应用。
用户完成授权后,将被重定向到你在生成请求令牌时提供的回调 URL。你将据此为该用户获取永久访问令牌并在本地存储。