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

3-legged OAuth フローを使用して Access Tokens を取得する

他のユーザーに代わって操作を行うには、そのユーザーの access tokens を取得する必要があります。Access tokens は、リクエストがどの X アカウントを対象としているかを示します。そのため、これらを取得するには、まずユーザーからアクセス権を付与してもらう必要があります。これらのトークンに有効期限はありませんが、ユーザーがいつでも取り消せます。 X では、3-legged OAuth フローを通じてユーザーの access tokens を取得できます。このフローでは、ユーザーを X にリダイレクトし、あなたのアプリケーションを承認してもらうことで、アプリケーションがaccess tokenと access token secret を取得できます。このフローは、implementing Log in with X で説明されているフローとほぼ同一ですが、次の2点が異なります。
  • GET oauth/authorize endpoint を、GET oauth/authenticate の代わりに使用します。
  • 以前にアクセスが付与されていた場合でも、ユーザーは必ずあなたのアプリケーションへのアクセス許可を求められます。  
開始する前に、application’s の権限を確認し、consumer keys と callback URL を把握しておいてください。callback URL や公開可能な UI がない場合は、承認後にユーザーをリダイレクトできるようウェブブラウザーへアクセスまたは埋め込みができないアプリケーション向けの PIN-based authorization の使用を検討してください。  3-legged サインインのやり取りの可能な状態は、次のフローチャートで示されています。

プロセスの概要

大まかには、3-Legged OAuth のプロセスは次のとおりです。
  1. コンシューマーアプリケーションがリクエストトークンを取得するためのリクエストを作成します。
  2. ユーザーが認証し、コンシューマーアプリケーションにリクエストトークンを送信します。
  3. リクエストトークンを、使用可能なユーザーの access token に変換します。
用語の整理 以下のガイドでは、同じ対象を指して異なる用語が使われる場合があります。 クライアント認証情報:
  • 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 === resulting oauth_token
  • Access token secret === Token Secret === resulting oauth_token_secret

手順のウォークスルー

ステップ 1: POST oauth/request_token コンシューマーアプリケーションがリクエストトークンを取得するためのリクエストを作成します。 このリクエストで唯一の固有パラメータは oauth_callback で、ステップ 2 完了時にユーザーをリダイレクトしたい先の URL を URL エンコード した値を指定する必要があります。残りのパラメータは OAuth 署名プロセスによって追加されます。 注意: POST oauth/request_token endpoint で使用するコールバック URL は、developer portal の 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 であることを検証し、他の 2 つの値は次の手順のために保存してください。   レスポンスに含まれるもの oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0 oauth_token_secret=veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI oauth_callback_confirmed=true ステップ 2: GET oauth/authorize ユーザーに認証してもらい、コンシューマーアプリケーションにリクエストトークンを送信します。   ユーザーのリダイレクト先の例: 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 リクエストトークンを使用可能な access token に変換します。 リクエストトークンを使用可能な access token に変換するには、アプリケーションはステップ 2 で取得した oauth_verifier の値を含めて POST oauth/access_token endpoint にリクエストを送信する必要があります。リクエストトークンはヘッダーの 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(アプリケーション-ユーザー)必須リクエストの実行 これでユーザーのAccess Tokensを取得できたので、POST statuses/update などの特定のAPIを使用して、ユーザーに代わってTweetを作成できます。   リクエスト内容: 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にリダイレクトされます。これを用いて、このユーザーの永続的な Access Token を取得し、ローカルに保存します。
I