サイトのトップへ戻る

Twitter 開発者 ドキュメント日本語訳

Twitterへのログインを実装する



概要

ブラウザモバイルウェブ での Twitterへのログイン 実装は、 OAuthに基づいています。このページではログインフローで使うアクセストークンを取得するために必要なリクエストを例示して説明します。

“Sign in with Twitter” フローを使用するには、あなたの アプリケーション設定へ行き、 “Allow this application to be used to Sign in with Twitter?” オプションが有効になっていることを確認してください。

このページは、あなたがOAuth 1.0aプロトコルを使ってリクエストを署名する方法を知っているものとして記載されています。 リクエストを署名する方法を知りたい場合は、リクエストを承認する のページを読んでください。

このページのリクエスト署名を確認したい場合は、以下のコンシューマ秘密情報を使用してください:

L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

この値は無効になっており、本物のリクエストとしては動作しません。



ステップ 1: リクエストトークンを取得する

ログインフローを開始するには、アプリケーションは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_confirmedtrueになっているかを確認し、次のステップのために他二つの値を保存する必要があります。

応答例 (応答の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


ステップ 2: ユーザーをリダイレクトする

次のステップでは、ユーザーをTwitter へ送って、ブラウザでのログインフローで説明したように適切なフローを完了できるようにします。 ユーザーにGET oauth / authenticateを実行させ、ステップ 1で取得したリクエストトークンをoauth_tokenパラメータとして渡します。

これをウェブサイトに実装する最もシームレスな方法は、元の “sign in” リクエストへの応答として HTTP 302リダイレクトを発行することです。 モバイルアプリとデスクトップアプリは、新たしいブラウザウィンドウを開くか、内蔵ウェブビューで直接URLを開く必要があります

リダイレクトする URL 例:

https://api.twitter.com/oauth/authenticate?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0

ログインエンドポイントはユーザーの状態に応じて以下三つのうちいずれかの動作をします。:

  1. ログインと承認を行っている: ユーザーが twitter.com にログインしており、既に呼び出し元アプリケーションを承認している場合、ユーザーは即座に認証されて有効なOAuth リクエストトークンが付いたコールバックURLに送り戻されます。ユーザーはtwitter.comへリダイレクトされたことに気づかないでしょう。
  2. ログインしているが承認はしていない:ユーザーが twitter.com にログインしており、呼び出し元アプリケーションを承認していない場合、 呼び出し元アプリケーションにアクセス権を付与する要求が表示されます。要求が受け入れられると、ユーザーは有効なOAuth リクエストトークンが付いたコールバックURLにリダイレクトされます。
  3. ログインしていない:ユーザーが twitter.com にログインしていない場合、資格情報の入力とアプリケーションに対する自分の情報へのアクセス権付与を、同じ画面上で促されます。ログインすると、ユーザーは有効なOAuth リクエストトークンが付いたコールバックURLに送り戻されます。

ログイン操作でのステータス遷移は、以下のようなフローチャートになります:

認証が成功すると、あなたの callback_urloauth_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


ステップ 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