OAuth Echo

OAuth Echoは、APIをやりとりする際に第三者にOAuth認証を安全に委任するために使用されます。

このやりとりには、次の4つの当事者が関与します。

  • ユーザー。特定の認証されたTwitterアプリケーションを通じてTwitterを使用
  • コンシューマー。サードパーティのメディアプロバイダー(写真共有サイトなど)とのやりとりを試みるTwitterアプリケーション
  • デリゲーター。サードパーティのメディアプロバイダー
  • サービスプロバイダー。すなわちTwitter自身
     

基本的には、アプリケーションとユーザーに代わってTwitter APIに送信するためのデリゲーターのリクエストを用意します。そうでない場合は、署名付きOAuthリクエストをHTTPヘッダーに追加して、中間操作を完了した後にそのリクエストをTwitterに送信するようデリゲーターに依頼します。

ここでは、ユーザーが写真をアップロードする例を見ていきます。コンシューマーはPOSTを使用してデリゲーター上でアップロードを呼び出します。POSTには画像が含まれますが、HTTPヘッダーにはさらに次の2つの項目が含まれます。

  • x-auth-service-provider - 実質的に、これはID委任が送信されるレルムになります。Twitterの場合は、これをhttps://api.twitter.com/1.1/account/verify_credentials.jsonに設定します。iOS5ベースのTwitter統合では、application_idパラメーターがこのURLに追加され、x-verify-credentials-authorizationで使用されるoauth_signatureの計算にも使用されます。
  • x-verify-credentials-authorization - HTTPヘッダーのOAuthを使用してhttps://api.twitter.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つのパラメーターをヘッダーで送信する代わりに、x_auth_service_provider x_verify_credentials_authorizationとしてPOSTで送信することもできます。この場合、パラメーターをエスケープしてOAuth署名ベース文字列に含めます(これは任意のリクエストのエンコードパラメーターに似ています)。HTTPヘッダーを使用して、操作をできるだけ分離しておくことをお勧めします。

この時点でのデリゲーターの目標は、メディアを保存する前に、ユーザーが本人であることを確認することです。デリゲーターがアップロードメソッドを介して上述のすべてのデータを受信すると、画像が一時的に保存し、x-auth-service-providerヘッダーで指定されたエンドポイントへの呼び出しを構築する必要があります。この場合は、https://api.twitter.com/1.1/account/verify_credentials.jsonとなり、x-verify-credentials-authorizationヘッダーでコンシューマーによって提供される、同じOAuth認証ヘッダーを使用します。
 

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を返せば問題ありません。デリゲーターは画像を永続的に保存し、URLを生成して返す必要があります。
  • サービスプロバイダーがHTTP 200を返さない場合は、画像をダンプしてから、コンシューマーにエラーを返します。