2legged OAuthは出来て、今度は3legged OAuth。
サービスプロバイダとして3legged OAuthは必須。
「OAuth Core 1.0」はセキュリティに問題があるらしく、その問題点を解決した「OAuth Core 1.0a」(OAuth Core 1.0 Revision A)を使う。
他人様の日本語訳とか解説とかを見てもいまいち解らなかったから、原文と日本語訳を照らし合わせつつ仕様をまとめてみた。
リクエストトークンを取得する
コンシューマとサービスプロバイダのサーバ間でリクエストトークンを取得する。
サービスプロバイダのRequest Token URLとやりとりする。
取得パラメータはレスポンスボディに入ってる。(生POSTデータっぽい感じ)
6.1. Obtaining an Unauthorized Request Token
http://oauth.net/core/1.0a#auth_step1
リクエスト
・メソッド
POST(推奨)
GET
・URL
Request Token URL
・パラメータ
oauth_consumer_key
oauth_signature_method
oauth_signature
oauth_timestamp
oauth_nonce
oauth_version
oauth_callback
レスポンス
・パラメータ
oauth_token
=> Request Token
oauth_token_secret
oauth_callback_confirmed
=> 常にtrue
コンシューマのやる事。
- OAuthパラメータをくっつけてサービスプロバイダのRequest Token URLにリクエストを送る。
- 返ってきたoauth_tokenとoauth_token_secretを大事にとっておく。
サービスプロバイダのやる事。
- OAuth認証。
- oauth_tokenとoauth_token_secretとoauth_callback_confirmedを返す。
- 送られてきたoauth_consumer_keyとoauth_callbackと返したoauth_tokenとoauth_token_secretを覚えておく。
ユーザのやる事。
- なし。
ユーザの許可を得る
ユーザをサービスプロバイダのUser Authentication URLにパラメータをつけてリダイレクト。
ユーザは、コンシューマがサービスプロバイダの保有している情報を使う許可をする。
ユーザをコンシューマのoauth_callbackにリダイレクト。
6.2. Obtaining User Authorization
http://oauth.net/core/1.0a#auth_step2
ユーザをサービスプロバイダにリダイレクト
・メソッド
GET
・URL
User Authentication URL
・パラメータ
oauth_token
=> さっき受け取ったoauth_token
ユーザが許可する
ユーザがサービスプロバイダ側でログインしていない場合はログイン。
許可しますか?はい!
ユーザをコンシューマにリダイレクト
・メソッド
GET
・URL
oauth_callback
・パラメータ
oauth_token
=> ユーザの許可/拒否結果の入ったRequest Token
oauth_verifier
=> 確認コード
コンシューマのやる事。
- oauth_tokenをくっつけてサービスプロバイダのUser Authentication URLにユーザをリダイレクトさせる。
- 返ってきたoauth_tokenとoauth_verifierを大事にとっておく。
サービスプロバイダのやる事。
- OAuth認証。
- oauth_tokenとoauth_token_secretとoauth_callback_confirmedを返す。
- oauth_consumer_keyと返したoauth_tokenとoauth_verifierを覚えておく。
ユーザのやる事。
- サービスプロバイダに飛んで、コンシューマを許可する。
アクセストークンを取得する
コンシューマとサービスプロバイダのサーバ間でリクエストトークンとアクセストークンを交換する。
サービスプロバイダのAccess Token URLとやりとりする。
取得パラメータはレスポンスボディに入ってる。(生POSTデータっぽい感じ)
6.3. Obtaining an Access Token
http://oauth.net/core/1.0a#auth_step3
リクエスト
・メソッド
POST(推奨)
GET
・URL
Access Token URL
・パラメータ
oauth_consumer_key
oauth_token
=> さっき受け取ったoauth_token
oauth_signing_method
oauth_signature
oauth_timestamp
oauth_nonse
oauth_version
oauth_verifier
=> さっき受け取ったoauth_verifier
レスポンス
・パラメータ
oauth_token
=> Access Token
oauth_token_secret
コンシューマのやる事。
サービスプロバイダのやる事。
- OAuth認証。
- まだ1度も交換した事のないRequestTokenかチェック。
- RequestTokenとoauth_consumer_keyがマッチするかチェック。
- oauth_verifierが正しいかチェック。
- oauth_tokenとoauth_token_secretを返す。
- oauth_consumer_keyと返したoauth_tokenとoauth_token_secretを覚えておく。
ユーザのやる事。
- なし。
保護されたリソースへアクセスする
oauth_tokenとoauth_token_secretを使って保護されたリソースにアクセスする。
7. Accessing Protected Resources
http://oauth.net/core/1.0a#anchor12