スマートフォンのブラウザからTwitterのOAuth認証をする際にはoauth/authorizeを使ったほうがよさそう
TwitterのOAuth認証では、認証のたびに「許可しますか?」と尋ねる画面を表示する方式(認証の中で oauth/authorize を呼ぶ)と、一度「許可」すればその後はその画面をスキップする方式(認証の中で oauth/authenticate を呼ぶ)の2通りがあります。
具体的な実装方法については以下のエントリーが詳しいです。
» PHPで「Sign in with Twitter」を実装する方法 – 頭ん中
公式のドキュメントはこちら。
» Sign in with Twitter | Twitter Developers
さて、MeityでもOAuthを利用していますが、Meityではどちらを採用しているかというと、一度「許可」すればその後はそのステップをスキップする方式(oauth/authenticate)を採っています。ログインするたびに承認画面を表示するというのはちょっと煩わしいかなと思うので。
しかしこれだと、スマートフォンのブラウザでアカウントを切り替えてMeityを使いたい場合に不都合が生じることがありました。
具体的には、
- Twitterをスマートフォンのブラウザで使う際には mobile.twitter.com のドメインにリダイレクトされる。
- mobile.twitter.com のセッションCookieは twitter.com から独立しているため、 mobile.twitter.com からログアウトしても twitter.com からはログアウトされない。
- TwitterのOAuthの承認画面は api.twitter.com のドメインであり、セッションCookieは twitter.com のCookieが利用される。
- そのためOAuthで承認画面をスキップする方式だと、スマートフォンのブラウザからはアカウントの切り替えができない。
というものです。
以前はスマートフォンのブラウザからも twitter.com ドメインの「スタンダード版」にアクセスすることができ、そこでログアウトすればMeityのアカウント切り替えも可能だったのですが、現在はそれができなくなりました。困った。
最初は、この問題を回避するにはブラウザのCookieを削除してもらうしかないか・・・と思っていたのですが、よくよく考えてみると冒頭に述べた「承認画面をスキップする」方式を「スキップしない方式」に切り替えればいいということが分かり、スマートフォンのブラウザからのアクセスに限って、その都度承認画面を表示する(oauth/authorize を使う)ように変更しました。
ユーザーエージェントを見て切り替えているので、スマートフォンのブラウザと判定されない場合は従来通り一度許可されていれば承認画面はスキップされます。
このようにスマートフォンのブラウザからの利用を前提としているTwitter連携サービスで、Twitterのアカウントごとにログインするサービスの場合は、この点を考慮して実装しておいたほうがよさそうです。
コメントを残す