ブラウザ とモバイルウェブ での Twitterへのログイン 実装は、 OAuthに基づいています。このページではログインフローで使うアクセストークンを取得するために必要なリクエストを例示して説明します。
“Sign in with Twitter” フローを使用するには、あなたの アプリケーション設定へ行き、 “Allow this application to be used to Sign in with Twitter?” オプションが有効になっていることを確認してください。
このページは、あなたがOAuth 1.0aプロトコルを使ってリクエストを署名する方法を知っているものとして記載されています。 リクエストを署名する方法を知りたい場合は、リクエストを承認する のページを読んでください。
このページのリクエスト署名を確認したい場合は、以下のコンシューマ秘密情報を使用してください:
L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
この値は無効になっており、本物のリクエストとしては動作しません。
ログインフローを開始するには、アプリケーションはPOST oauth / request_tokenに署名されたメッセージを送信してリクエストトークンを取得しなければなりません。
このリクエストでユニークのパラメータは oauth_callback
です。この値には、ユーザーがステップ2を完了した時にリダイレクトするURLをURLエンコードして設定しなければなりません。残りのパラメータはOAuth 署名プロセスで追加されます。
リクエスト例 (Authorization ヘッダは改行しています):
POST /oauth/request_token HTTP/1.1 User-Agent: themattharris' HTTP Client Host: api.twitter.com Accept: */* Authorization: OAuth oauth_callback="http%3A%2F%2Flocalhost%2Fsign-in-with-twitter%2F", oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w", oauth_nonce="ea9ec8429b68d6b77cd5600adbbb0456", oauth_signature="F1Li3tvehgcraF8DMJ7OyxO4w9Y%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318467427", oauth_version="1.0"
アプリケーションでは、サーバからの応答の HTTP ステータスを調べる必要があります。 200
以外の値は失敗したこと示します。
応答のbody部には、oauth_token
, oauth_token_secret
, oauth_callback_confirmed
といったパラメータが含まれています。
アプリケーションではoauth_callback_confirmed
がtrue
になっているかを確認し、次のステップのために他二つの値を保存する必要があります。
応答例 (応答のbody部は改行しています):
HTTP/1.1 200 OK Date: Thu, 13 Oct 2011 00:57:06 GMT Status: 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 146 Pragma: no-cache Expires: Tue, 31 Mar 1981 05:00:00 GMT Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0 Vary: Accept-Encoding Server: tfe oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0& oauth_token_secret=veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI& oauth_callback_confirmed=true
次のステップでは、ユーザーをTwitter へ送って、ブラウザでのログインフローで説明したように適切なフローを完了できるようにします。
ユーザーにGET oauth / authenticateを実行させ、ステップ 1で取得したリクエストトークンをoauth_token
パラメータとして渡します。
これをウェブサイトに実装する最もシームレスな方法は、元の “sign in” リクエストへの応答として HTTP 302リダイレクトを発行することです。 モバイルアプリとデスクトップアプリは、新たしいブラウザウィンドウを開くか、内蔵ウェブビューで直接URLを開く必要があります
リダイレクトする URL 例:
https://api.twitter.com/oauth/authenticate?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0
ログインエンドポイントはユーザーの状態に応じて以下三つのうちいずれかの動作をします。:
ログイン操作でのステータス遷移は、以下のようなフローチャートになります:
認証が成功すると、あなたの callback_url
は oauth_token
パラメータ とoauth_verifier
パラメータを含むリクエストを取得します。
あなたのアプリケーションでは、そのトークンがステップ1で取得したリクエストトークンと合致しているか確認する必要があります。
クライアントのリダイレクトからのリクエスト (クエリ文字列パラメータは改行しています):
GET /sign-in-with-twitter/? oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0& oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.5 (KHTML, like Gecko) Chrome/16.0.891.1 Safari/535.5 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Referer: http://localhost/sign-in-with-twitter/ Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
リクエストトークンを使用可能なアクセストークンに変換するために、あなたのアプリケーションではPOST oauth / access_tokenエンドポイントに対して、ステップ 2で取得したoauth_verifier
の値を含めてリクエストを発行しなければなりません。
The request token is also passed in the oauth_token
portion of the header, but this will have been added by the signing process.
リクエスト例 (Authorization ヘッダは改行しています):
POST /oauth/access_token HTTP/1.1 User-Agent: themattharris' HTTP Client Host: api.twitter.com Accept: */* Authorization: OAuth oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w", oauth_nonce="a9900fe68e2573b27a37f10fbad6a755", oauth_signature="39cipBtIOHEEnybAR4sATQTpl2I%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318467427", oauth_token="NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0", oauth_version="1.0" Content-Length: 57 Content-Type: application/x-www-form-urlencoded oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY
成功時の応答には oauth_token
パラメータと oauth_token_secret
パラメータが含まれています。
このトークンとトークン秘密情報は、保存して以降のTwitter APIへの認証済みリクエストで使用する必要があります。
ユーザーを識別するには、GET account / verify_credentialsを使用してください。
応答例 (応答の body 部は改行しています):
HTTP/1.1 200 OK Date: Thu, 13 Oct 2011 00:57:08 GMT Status: 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 157 Pragma: no-cache Expires: Tue, 31 Mar 1981 05:00:00 GMT Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0 Vary: Accept-Encoding Server: tfe oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4& oauth_token_secret=PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo