【宿題】twitterのcallback URLのあたりについてはっきりさせたい!

■ 目的

■ 今回調べること

  • BrowserAppのoauth_callbackによるふるまい
  • ClientAppのoauth_callbackによるふるまい

■ BrowserAppのoauth_callbackによるふるまい

ConsumerAppの情報は以下のとおり

(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://twitter.com/oauth/authorize?oauth_token=(RequestToken)&oauth_callback=http%3A%2F%2Fr-weblife.sakura.ne.jp%2Ftest%2Ftwitter%2FafterAuthorization_badurl.php

結果:指定したパラメータは無視され、登録時に指定した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」を含む。

http://twitter.com/oauth/authorize?oauth_token=(RequestToken)&oauth_callback=http%3A%2F%2Fr-weblife.sakura.ne.jp%2Ftest%2Ftwitter%2FafterAuthorization_badurl.php

結果:認可後、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&amp;oauth_nonce=e348be3207863b5c85a4e54bf34c52e9&amp;oauth_timestamp=1249750487&amp;oauth_consumer_key=tNnwFTAMT2NKIRKVKu8Zjg&amp;oauth_callback=http%3A%2F%2Fr-weblife.sakura.ne.jp%2Ftest%2Ftwitter%2FafterAuthorization_badurl.php&amp;oauth_signature_method=HMAC-SHA1&amp;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を指定した場合

おつでーす。