TwitterのOAuthでCallbackさせるときの注意点

TwitterOAuth認証をしようと思ったら

  • PINコードの手入力
  • 指定したCallback URLへリダイレクト

の2通りになると思うのだけど、このうちCallback URLへリダイレクトする方法にしようとしてはまっていた話。

Twitter側でアプリケーションを登録する際にApplication Typeを選択できる。ここで、Browserを選択するとCallback URLを指定できる。

ところが、OAuthの仕様上、oauth_callbackとかいうヘッダをつけて実際にリクエストするときに指定できるので、アプリケーションの登録時には別に空白でよいかと思っていた。

そうすると、何度試してもリクエストークンを取得する最初の段階で 401 OAuth.Unauthorized が発生するのだった。

どうにもわからないのでレスポンスの中身を見てみると、

Desktop applications only support the oauth_callback value 'oob'

oobというのは out-of-band のことで、デスクトップアプリケーションだとPINコードを入力する方法しかダメだよ!と言っている。

「そんな馬鹿な。ちゃんとBrowserを選んだじゃないか。」と思って確認しに行くとなぜか Client 指定ですよ。どうやらアプリケーション登録時に Callback URL を指定しなければ自動的に Client のほうへ変更されてしまうらしい。

Callback URL自体は適当に指定していても、リクエスト時のパラメータを使ってくれるようなので、とりあえず埋めておけばよさそう。

このせいでえらい時間くってしまったわ。