OAuth for Mobile - Yahoo! JAPAN, Googleの実装 -

Yahoo! JAPANのOAuthがmobile対応していることをご存知でしょうか?
Tech Blogに担当者のエントリが出ています。

モバイル版OAuthの便利な活用方法 - Yahoo! JAPAN Tech Blog

OAuthはブラウザでユーザーがConsumer Appに対して認可をすることで、Web/Clientを問わず様々なアプリケーションがユーザー認証を必要とするAPIを利用できます。
Y!Jが行ったモバイル対応というのは、今までPCのブラウザからアクセスされる画面でのみ認可を行うことが可能だったものだったものが、携帯電話のブラウザの画面でもできるようになったことを示しています。

■ モバイル用パラメータ

実装の内容については難しくないので、ブログのエントリとともに読んでみてください。
http://developer.yahoo.co.jp/other/oauth/flow.html

ちなみに、Googleではどうなっているか確認してみました。
http://code.google.com/intl/ja/apis/accounts/docs/OAuth_ref.html#GetAuth
OAuthAuthorizeTokenというところを見てください。

Y!JとGoogleはともに、ブラウザでSPに送られる際に、以下のパラメータを付加します。

  • Y!J : xoauth_yahoo_mobile=1
  • Google : btmpl=mobile

PCのブラウザでY!Jのパラメータをつけてアクセスしても、http://mobile.yahoo.co.jp/にリダイレクトされます。
おそらく、パラメータ以外でもPCかmobileか判定してページを出しわけしているのでしょう。
Googleの場合は、半角カタカナを用いたページが表示されます。
これがおそらくモバイル用テンプレートなのではないかと。

両者とも、ユーザーの同意を求めるリクエストのみにパラメータを追加するだけでモバイル対応が可能なので、開発者には親切だと思います。

が、やっぱりこの部分は共通の拡張仕様が欲しい気がします。
せめて日本のOAuth SPはパラメータ名を合わせるような感じにしておけば、開発する側がもっと楽ですよね。

■ OAuth for Client App

Tech Blogではモバイル版OAuthを用いてブラウザを持たないデバイスからのOAuthフローとして、TVウィジェットの例が説明されています。

二つ目はテレビの画面上にコード(Request Token)を表示して、ケータイで下記のURLにアクセスすると表示される"コード入力画面"からユーザーにTokenを入力させることも可能ですが、画面のステップ数が増えユーザビリティーの面で劣るためオススメしません。

モバイル版OAuthの便利な活用方法 - Yahoo! JAPAN Tech Blog

ユーザーが注意事項への同意を完了すると、下図のようにケータイの画面に6けたの英数字のコードが表示されます。
このコードはOAuthのフローの『3. Access Tokenの取得』で使うoauth_verifierの値です。
ウィジェット側でそれを受け取るためにコード入力画面を用意し、ユーザーに入力させるように誘導する必要があります。

モバイル版OAuthの便利な活用方法 - Yahoo! JAPAN Tech Blog

このRequestTokenの手動入力あたりについては、以前エントリを書きましたので参考にしてみてください。
【仕様紹介】Yahoo!のOAuthでUser Authorization URLにつけるRequest Tokenパラメータはオプションです - r-weblife

今回はPC用の画面で説明しますが、こんな感じでRequestTokenの手動入力画面が出てきます。
http://f.hatena.ne.jp/images/fotolife/r/ritou/20090712/20090712031135.png

で、同意が終わると、今度はoauth_verifierをY!Jが表示し、ユーザーが手動でクライアントアプリ(例ではTVウィジェット)に入力します。

この辺、モバイルでも同じ画面を実装してますよってことだと思います。
画面を見てわかるとおり、Yahoo!のRequestTokenとoauth_verifierは手動のフローと意識して短めになっているようですね。
セキュリティ問題が修正された1.0aからoauth_verifierが必要になったのでユーザーにとっては少ししんどい仕様ですが、しょうがない。
oauth_verifierの値を赤外線で送受信できたりしたら楽かも。日本の携帯会社の皆さんに期待です。

ちなみに、GoogleはRequestTokenの手動入力画面がなかったはず。
今日はこんなところで。