跳转到主要内容

使用三方 OAuth 授权流程获取 Access Tokens

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

流程概览

在高层级上,三方(3-Legged)OAuth 流程将:
  1. 为使用方应用创建获取请求令牌(request token)的请求。
  2. 让用户完成身份验证,并将请求令牌发送给使用方应用。
  3. 将请求令牌转换为可用的用户 access token。
术语说明 在下文指南中,您可能会看到不同术语指代同一事物。 客户端凭据:
  • App Key === API Key === Consumer API Key === Consumer Key === Customer Key === oauth_consumer_key
  • App Key Secret === API Secret Key(API 密钥私钥) === 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 endpoint 中使用的任何回调 URL,都必须先在开发者门户的 App 详情页中,开发者 App 的设置里进行配置。   请求包含: 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 将请求令牌转换为可用的 access token。 要将请求令牌转换为可用的 access token,你的应用必须向 POST oauth/access_token endpoint 发起请求,其中包含步骤 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。   请求 includes: POST statuses/update.json oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

示例用例

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