メインコンテンツへスキップ

3-legged OAuth フローを使用してアクセス・トークンを取得する

他のユーザーに代わって操作を行うには、そのユーザーのアクセス・トークンを取得する必要があります。アクセス・トークンは、どの X アカウントに代わってリクエストが行われるかを示すため、あなたがそれらを取得するには、まずユーザーからアクセス許可を得る必要があります。これらのトークンに有効期限はありませんが、ユーザーがいつでも取り消すことができます。 X では、3-legged OAuth フローを通じてユーザーのアクセス・トークンを取得できます。このフローでは、ユーザーを X にリダイレクトし、あなたのアプリを承認してもらうことで、アプリケーションが「アクセス・トークン」とアクセス・トークン・シークレットを取得できます。このフローは、Log in with X の実装で説明しているフローとほぼ同一ですが、次の2点が異なります。
  • GET oauth/authorize エンドポイントを、GET oauth/authenticate の代わりに使用します。
  • ユーザーは、以前にアクセスが許可されている場合でも、あなたのアプリケーションへのアクセス承認を常に求められます。  
開始する前に、アプリケーションの権限を確認し、コンシューマーキーとコールバック URL を把握しておく必要があります。コールバック URL や公開可能な UI がない場合は、PIN ベース認可の使用を検討してください。これは、認可後にユーザーをリダイレクトするためのウェブブラウザにアクセスできない、または組み込めないアプリ向けに設計されています。  3-legged サインインのやり取りにおける可能な状態は、次のフローチャートに示されています。

プロセスの概要

概要レベルでは、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 であることを確認し、他の2つの値は次の手順のために保存してください。   レスポンスに含まれるもの 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_urloauth_tokenoauth_verifier パラメータを含むリクエストを受け取ります。アプリケーションは、このトークンがステップ1で受け取ったリクエストトークンと一致することを確認する必要があります。   クライアントのリダイレクトからのリクエスト: https://yourCallbackUrl.com?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0&oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY ステップ 3: POST oauth/access_token リクエストトークンを使用可能なアクセストークンに変換します。 リクエストトークンを使用可能なアクセストークンにするには、ステップ2で取得した oauth_verifier の値を含めて POST oauth/access_token エンドポイントにリクエストを送信する必要があります。リクエストトークンはヘッダーの 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(アプリケーション-ユーザー)で必要なリクエストに使用する これでユーザーアクセス・トークンを取得したので、ユーザーに代わってTweetを作成するために POST statuses/update などの特定のAPIにアクセスできます。   リクエストの内容: POST statuses/update.json oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

サンプルのユースケース

標準的なフローは Web ベースで、3-legged の OAuth 認可フローを使用します。ここで示すスクリーンショットは、https://github.com/xdevplatform/twauth-web でソースを確認できるサンプルの一部です。 アプリケーションの適切なタイミングで、アプリの認可を得るために X へリダイレクトします。
リクエストトークンを付けて X にリダイレクトすると、ユーザーにあなたのアプリの認可が求められます。
ユーザーがアプリを認可すると、リクエストトークンを生成した際に指定したコールバック URL にリダイレクトされます。ここで、このユーザーの永続的なアクセストークンを取得し、ローカルに保存します。