OAuth Echo
- User — 特定の認可済み X アプリケーションを通じて X を利用しているユーザー
- Consumer — サードパーティのメディアプロバイダー(例: 写真共有サイト)とやり取りしようとしている X アプリケーション
- Delegator — サードパーティのメディアプロバイダー
- Service Provider — いわゆる X 本体
x-auth-service-provider
— 実質的に、アイデンティティ委任を送る先(レルム)です。X の場合、これを https://api.x.com/1.1/account/verify_credentials.json に設定します。iOS5 ベースの X 連携では、この URL に追加の application_id パラメータが付与され、x-verify-credentials-authorization で使用される oauth_signature の計算にも用いられます。x-verify-credentials-authorization
— Consumer は、HTTP ヘッダーで OAuth を用いて https://api.x.com/1.1/account/verify_credentials.json を呼び出せるよう、必要なすべての OAuth パラメータを作成する必要があります(例: OAuth oauth_consumer_key=”…”, oauth_token=”…”, oauth_signature_method=”…”, oauth_signature=”…”, oauth_timestamp=”…”, oauth_nonce=”…”, oauth_version=”…” のような形式)。
oauth_timestamp
が有効な時間内に完了する必要があることに注意してください。
また、これら 2 つのパラメータはヘッダーではなく、POST の本文で x_auth_service_provider と x_verify_credentials_authorization として送ることもできます。この場合、OAuth シグネチャベース文字列にパラメータをエスケープして含めることを忘れないでください(任意のリクエストでパラメータをエンコードするのと同様)。可能な限り処理を分離するため、HTTP ヘッダーを使用するのが最善です。
この時点での Delegator の目的は、メディアを保存する前に User が本人であることを検証することです。Delegator が upload メソッド経由で上記の data をすべて受け取ったら、画像を一時的に保存し、Consumer が x-verify-credentials-authorization ヘッダーで提供したのと同じ OAuth 認証ヘッダーを用いて、x-auth-service-provider ヘッダーで指定された endpoint(この場合は https://api.x.com/1.1/account/verify_credentials.json)への呼び出しを組み立てる必要があります。
OAuth Echo のベストプラクティス
x-auth-service-provider
で提供される URL を使ってルックアップを実行し、ハードコードした値は使用しないでください。たとえば Apple iOS では、すべての OAuth リクエストに追加の application_id パラメータが付与され、その存在は OAuth Echo の各段階で維持されるべきです。
OAuth 認可の処理では、x-verify-credentials-authorization のヘッダー値を取得し、サービスプロバイダーへの呼び出し時にその値を Authorization ヘッダーとして設定してください。念のため、x-auth-service-provider
の値が期待どおりであることも確認してください。
- サービスプロバイダーが HTTP 200 を返した場合は問題ありません。Delegator は画像を永続的に保存し、URL を生成して返します。
- サービスプロバイダーが HTTP 200 を返さなかった場合は、画像を破棄し、Consumer にエラーを返します。