3レッグ認証OAuthフローを使用したユーザーアクセストークンの取得

別のユーザーに代わってアクションを実行するには、そのユーザーのアクセストークンを取得する必要があります。アクセストークンは、リクエストを代行するTwitterアカウントを指定します。このため、アクセストークンを取得するには最初にアクセス権を付与する必要があります。 こうしたトークンには有効期限はありませんが、ユーザーによりいつでも取り消すことができます。

Twitterでは、3レッグ認証OAuthフローを介してユーザーのアクセストークンを取得できます。これにより、アプリケーションは、ユーザーをTwitterにリダイレクトして、アプリケーションを認証させることで、アクセストークンとアクセストークンシークレットを取得できます。このフローは、次の2つの例外を除いて、「Twitterでログインを実装」で説明したフローとほぼ同じです。

  • GET oauth/authenticateの代わりに、GET oauth/authorizeエンドポイントが使用されます。
  • すでにアクセスが許可されている場合でも、ユーザーはアプリケーションへのアクセスを認証するように常に求められます。
     

始める前に、アプリケーションの権限をチェックし、コンシューマーキーとコールバックURLを確認しておく必要があります。コールバックURLまたはパブリックアクセス可能なUIがない場合は、PINベースの認証の使用を検討してください。これは、認証後にユーザーをリダイレクトするために、ウェブブラウザーにアクセスできない、またはウェブブラウザーを埋め込むことができないアプリケーションを対象としています。 

3レッグ認証サインインのインタラクションで可能性があるステータスが、以下のフローチャートに図示されています。

プロセスの概要

大まかに言うと、3レッグ認証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 === 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エンドポイントで使用するコールバック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のパラメーターが含まれています。トークンとトークンシークレットは、今後認証されるTwitter APIへのリクエストに使用するために保存してください。ユーザーのIDを判断するには、GET account/verify_credentialsを使用します。
 

応答に含まれるもの:

oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

oauth_token_secret=PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo

 

OAuth 1.0a(アプリケーションユーザー)を必要とするリクエストでのこれらの認証情報の使用

これでユーザーアクセストークンを取得できました。これらを使用すれば、POST statuses/updateなどの特定のAPIにアクセスし、ユーザーに代わってツイートを作成できます。
 

リクエストに含まれるもの:

POST statuses/update.json

oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w

oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

 

サンプルユースケース

標準フローはウェブベースで、3レッグ認証OAuthフローを使用します。次に示すスクリーンショットはサンプルの一部で、そのソースはhttps://github.com/twitterdev/twauth-webで確認できます。

アプリケーションのどこかの時点で、Twitterにリダイレクトしてアプリケーションを認証する必要があります。image0リクエストトークンを使用してTwitterにリダイレクトすると、ユーザーにアプリケーションの認証を促すメッセージが表示されます。image1アプリケーションを認証すると、リクエストトークンを生成したときに提供したコールバックURLにユーザーがリダイレクトされます。これを使用して、このユーザーで永久的なアクセストークンを取得し、ローカルで保存します。image2