xAuthは OAuthでもあります。あなたはTwitterへ署名したリクエストを送信する方法をマスターする必要があります。
xAuth のプロセスでは、読み込み専用もしくか書き込み専用のアクセストークンの生成のみを行います。xAuthではダイレクトメッセージを操作することはできません。 あなたのアプリケーションでユーザーのダイレクトメールへのアクセスが必要な場合、OAuth フローを全て実施する必要があります。
xAuth を使うと、デスクトップアプリやモバイルアプリでユーザー名とパスワードをOAuth アクセストークンと交換することができます。 アクセストークンを取得したら、 xAuthを使用している開発者はユーザーのログインとパスワードを破棄しなければなりません。
xAuth アクセスは許可されたアプリケーションのみに制限されています。あなたのデスクトップ/モバイルアプリケーションがxAuthしか利用できない場合は、 https://support.twitter.com/forms/platformへ詳しい要望を送信してください。あなたのアプリケーション名、コンシューマキー、アプリケーションID(可能であれば)、あなたのアプリケーションではxAuth を使うのが最も適していること説明した概要も記載してください。
xAuth ではPOST HTTPメソッドを使用し、SSL アクセストークンエンドポイントに対してヘッダベースOAuth 認証を使用する必要があります。
xAuth ではまた Twitterの ログイン認証 機能をサポートしています。
xAuthを使用するには、まず このフォームにあなたのアプリケーションについての詳細情報と、xAuth があなたのアプリケーションでのベストチョイスである理由を記載して送信してください。標準のOAuth フローが使用できない場合に限り xAuth の使用が承認されます。
xAuth allows desktop and mobile applications to skip the request_token and authorize steps and jump right to the access_token step. 詳細については POST oauth / access_token を参照してください。
ブラウザ機能のないアプリでアクセストークンをリクエストするには。 Twitter のアクセストークン URL https://api.twitter.com/oauth/access_token
に対して、アプリケーションのコンシューマキーを付けた HTTPS リクエストを送信します。従来の oauth_*
署名パラメータに加えて、以下のpost パラメータを設定する必要があります:
x_auth_username
クライアントがトークンを取得する際に使用する、ユーザーのログイン情報
x_auth_password
クライアントがトークンを取得する際に使用する、ユーザーのパスワード情報
x_auth_mode
この値は “client_auth”にしなければなりません(referring to the process described here)
この例で使用されている値は様々な理由により、Twitter APIへ実際に実行するとエラーとなります。: these keys are no longer valid, the password for the user is different, and the timestamp is now stale. However, utilizing these test values in isolation should yield the same signature when building your implementation.
以下のパラメータを使用してxAuth アクセストークンリクエストを実行する場合:
oauth_consumer_key
- JvyS7DO2qd6NNTsXJ4E7zA
oauth_consumer_secret
- 9z6157pUbOBqtbm0A0q4r29Y2EYzIHlUwbF4Cl9c
oauth_nonce
- 6AN2dKRzxyGhmIXUKSmp1JcB4pckM8rD3frKMTmVAo
oauth_signature_method
- HMAC-SHA1
oauth_timestamp
- 1284565601
oauth_version
- 1.0
x_auth_mode
- client_auth
x_auth_password
- twitter-xauth
x_auth_username
- oauth_test_exec
あなたのHTTP POST のbody部分は以下のようになります (POST のbody部はURLエンコードする必要があるので注意してください):
x_auth_username=oauth_test_exec&x_auth_password=twitter-xauth&x_auth_mode=client_auth
様々な要素を適切に URL エンコードすると、 OAuth 署名ベース文字は以下のようになります:
POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Faccess_token&oauth_consumer_key%3DJvyS7DO2qd6NNTsXJ4E7zA%26oauth_nonce%3D6AN2dKRzxyGhmIXUKSmp1JcB4pckM8rD3frKMTmVAo%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1284565601%26oauth_version%3D1.0%26x_auth_mode%3Dclient_auth%26x_auth_password%3Dtwitter-xauth%26x_auth_username%3Doauth_test_exec
Please note how the already URL-escaped POST body gets encoded again in this process.
このリクエストでは oauth_tokenを使用しないので、署名を作成するための署名秘密情報は以下のようになります:
9z6157pUbOBqtbm0A0q4r29Y2EYzIHlUwbF4Cl9c&
秘密情報を署名した後、 OAuth HTTP 承認ヘッダは以下のようになります:
OAuth oauth_nonce="6AN2dKRzxyGhmIXUKSmp1JcB4pckM8rD3frKMTmVAo", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1284565601", oauth_consumer_key="JvyS7DO2qd6NNTsXJ4E7zA", oauth_signature="1L1oXQmawZAkQ47FHLwcOV%2Bkjwc%3D", oauth_version="1.0"
そして認証に成功すると、以下のような応答が返ってきます:
oauth_token=191074378-1GWuHmFyyKQUKWV6sR6EEzSCdLGnhqyZFBqLagHp&oauth_token_secret=NpCkpRRC5hGEtikMLnQ2eEcEZ0SIVF5Hb2ZgIwmYgdA&user_id=191074378&screen_name=oauth_test_exec&x_auth_expires=0
これ以降は、このアクセストークン(とその秘密情報)を使って認証が必要な全てのリクエストを署名します。 アクセストークン取得以降どうするかについては このページ を参照してください。
ユーザーが ログイン認証に登録している場合、サーバはカスタムbody部に HTTP 401 エラーの応答を返します。
あなたが send_error_codes
パラメータを使用している場合、body部の応答で以下エラーメッセージを取得します。:
User must verify login
Otherwise, the response body will contain a plaintext response:
User must verify login
このエラーが発生した場合、 twitter.com で 一時パスワードを生成して それを使ってアプリケーションの署名を完了するよう、ユーザーにアドバイスをして下さい。