■ 目的
- 何度となく調べているtwitterのOAuth仕様だが、callback URLのあたりがまだ曖昧 ( twitter,FriendFeedのOAuth実装について - r-weblife )
■ 今回調べること
- BrowserAppのoauth_callbackによるふるまい
- ClientAppのoauth_callbackによるふるまい
■ BrowserAppのoauth_callbackによるふるまい
ConsumerAppの情報は以下のとおり
- Type : Browser
- callback URL : http://r-weblife.sakura.ne.jp/test/twitter/afterAuthorization.php
(1) callback URL指定なし
RequestToken取得要求時、Authorizationエンドポイントへのリダイレクト時の両方とも「oauth_callback」を含まない。
結果:登録時に指定した http://r-weblife.sakura.ne.jp/test/twitter/afterAuthorization.php に戻された。
(2) OAuth Core 1.0仕様
Authorizationエンドポイントへのリダイレクト時に「oauth_callback」を含む。
結果:指定したパラメータは無視され、登録時に指定したhttp://r-weblife.sakura.ne.jp/test/twitter/afterAuthorization.php に戻された。
(3) OAuth Core 1.0 Revision A仕様
RequestToken取得要求時のリクエストパラメータに「oauth_callback」を含む。
http://twitter.com/oauth/request_token
?oauth_version=1.0
&oauth_nonce=8a33dd78c2999a5b953b77b282c10265
&oauth_timestamp=1249749607
&oauth_consumer_key=8bhVcbaGFY2chH9RNuNOg
&oauth_callback=http%3A%2F%2Fr-weblife.sakura.ne.jp%2Ftest%2Ftwitter%2FafterAuthorization_badurl.php ★
&oauth_signature_method=HMAC-SHA1
&oauth_signature=6tZPqZVhos4HMTbmtW2Tj36rqIk%3D"
結果:RequestToken取得時のレスポンスにoauth_callback_confirmed=trueを含み、
認可後http://r-weblife.sakura.ne.jp/test/twitter/afterAuthorization_badurl.phpに戻された。
しかも、戻り先にはRevision Aの仕様であるoauth_verifierパラメータがついている
ということで、Browser Appの場合は、
「1.0a対応 かつ 1.0のリクエストに関してはConsumer登録時に指定したURLに戻す」
という仕様になっているようです。
この方法であれば、仮にRevision Aに意識して対応していなくても、登録しておいたcallback URLに戻すので、BrowserAppに関しては問題ない気がします。
■ ClientAppのoauth_callbackurlによるふるまい
ConsumerAppの情報は以下のとおり
- Type : Client
- callback URL : 指定なし
(1) callback URL指定なし
RequestToken取得要求時、Authorizationエンドポイントへのリダイレクト時の両方とも「oauth_callback」を含まない。
結果:認可後、oauth_verifierが表示された。
RequestToken取得時のレスポンスにoauth_callback_confirmed=trueを含んでいた。★
(2) OAuth Core 1.0仕様
Authorizationエンドポイントへのリダイレクト時に「oauth_callback」を含む。
結果:認可後、oauth_verifierが表示された。
(3) OAuth Core 1.0 Revision A仕様
RequestToken取得要求時のリクエストパラメータに「oauth_callback」を含む。
BrowserAppのときとと同じにした。
http://twitter.com/oauth/request_token
?oauth_version=1.0
&oauth_nonce=8a33dd78c2999a5b953b77b282c10265
&oauth_timestamp=1249749607
&oauth_consumer_key=8bhVcbaGFY2chH9RNuNOg
&oauth_callback=http%3A%2F%2Fr-weblife.sakura.ne.jp%2Ftest%2Ftwitter%2FafterAuthorization_badurl.php ★
&oauth_signature_method=HMAC-SHA1
&oauth_signature=6tZPqZVhos4HMTbmtW2Tj36rqIk%3D"
結果:RequestToken取得失敗。
レスポンスは以下のようになった。XMLだけど。
<?xml version="1.0" encoding="UTF-8"?> <hash> <request>/oauth/request_token?oauth_version=1.0&oauth_nonce=e348be3207863b5c85a4e54bf34c52e9&oauth_timestamp=1249750487&oauth_consumer_key=tNnwFTAMT2NKIRKVKu8Zjg&oauth_callback=http%3A%2F%2Fr-weblife.sakura.ne.jp%2Ftest%2Ftwitter%2FafterAuthorization_badurl.php&oauth_signature_method=HMAC-SHA1&oauth_signature=jnLG2WzBsiEY%2BTW0CvVq5CL83eM%3D</request> <error>Desktop applications only support the oauth_callback value 'oob'</error> </hash>
こっちは厳密に「1.0a対応」って感じだなぁ。
■ まとめ
Browser App = 「1.0a or 1.0 + 固定callback」
Client App = 「1.0a」
ということは、1.0aに対応していればすべてOKってことですね。
素晴らしい。
■ 今回調べなかった細かいところ
予想通りの結果になるだろうと思いテストしなかったものは、いつか調べます。
- BrowserAppで1.0a仕様にしてドメインがことなるURLをoauth_callbackで指定したとき
- ClientAppでoauth_callbackにoobを指定した場合
おつでーす。