GoogleがOAuth WRAPに対応(解説編)

OAuth-WRAP Support - Internet Identity Research
Googleさんが訳す前に、簡単にまとめておきましょう。

■ 何してくれたの?

Googleは将来的にOAuth 2.0に対応するらしいです。
今回は、そのマイルストーンとして、OAuth 2.0の仕様と重なる部分が多いOAuth WRAPに対応したようです。
OAuth WRAPの仕様に従ってGoogleAPI利用アプリを実装することで、開発者はとんでもなく難しかったOAuth 1.0系に比べてだいぶ簡単なWRAP/2.0の実装を試すことが可能です。

■ どうやって実装すれば良いの?

□ エンドポイントURL

Googleが提供するのは以下のエンドポイントです。

Access Tokenの取得方法

OAuth WRAPでは、Access Tokenを取得するまでの流れをProfileと呼びます。
(OAuth 2.0ではflowになります)

Googleが対応しているProfileと対象のアプリは以下のとおりです。
(翻訳ではないので順番変えます)

  • Web App Profile : HTTPのサーバ間通信ができるWebアプリ
  • Rich App Profile : ブラウザを立ち上げることができるクライアントアプリ
  • JS Profile : FacebookのJavaScript-Based Authenticationや、twitterの@anywhereのようなUser-Agent上で動くアプリ
  • Bridge Profile : OAuth 1.0/1.0aのConsumerがOAuth WRAPのAccess Tokenを取得できるようにするためのProfile。今回動作確認で使うOAuthPlayGroundでもこれを利用しているのですね。

仕様はこのあたりですね。

JS Profile/Bridge ProfileはOAuth WRAPの仕様の範囲外となります。
OAuth 2.0との互換ということで、先に実装してくれているようです。

□ JS Profile

ClientはGoogleにこんなリクエストを送ります。

https://www.google.com/accounts/WrapUserAuthorization
?wrap_client_id=r-weblife.sakura.ne.jp
&wrap_callback=http%3A%2F%2Fr-weblife.sakura.ne.jp%2Fcallback.php
&wrap_scope=https%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F
&wrap_client_only=true

※wrap_client_stateは今回つけてません。

ログイン画面が出ます。(chromeだとなぜか英語)

次に同意画面です。

それが終わると、こんなレスポンスが返ってきます。

http://r-weblife.sakura.ne.jp/callback.php
#wrap_access_token=(Access Token文字列)
&wrap_access_token_expires_in=3600

あとはこのフラグメント部分を処理すると。

GoogleのJSライブラリ/OAuth Widgets

FacebookのJSライブラリと同様に、JS Profileをサポートするライブラリが提供されます。
AuthZ後にCookieにAccessTokenを入れちゃうところ
GoogleはFriendConnectを提供しているので、この辺のJS実装は信用できそうですね。

OAuth Widgetsは、上のライブラリに加え、APIアクセスの部分もやってくれて良い具合に表示させるwidgetのことでしょう。
いろんなところでJSのWidgetが出てきて、そいつらの裏はOAuthで同じ仕様になっている世界はDeveloperとして魅力的ですね。

□ Bridge Profile

GoogleのOAuth PlaygroundというOAuthの流れを確認できるツールで、
テスト用のAccess Token(Dev Token)を取得できます。
ここではOAuth1.0/1.0a系のAccessTokenからWRAP用AccessTokenを取得しているっぽいです。

が、また今度じっくり調べます。

□ Protected Resourceへのアクセス

APIアクセスのときに、wrap_access_tokenというパラメータをつける必要があります。
OAuth 1.0系のごちゃごちゃした署名は不要なのですよ。

パラメータのつけ方ですが、以下の3パターンがあります。

  • Using HTTP Header
  • Using URL Query Parameter
  • Using Post Parameter

Googleは全てに対応するらしい。

□ Token Refresh

取得したAccess Tokenの有効期限は1時間です。
Refresh Token URLを用いたRefreshが必要になります。

仕様はこのあたりですね。draft-hardt-oauth-01 - OAuth Web Resource Authorization Profiles

Google App Engine and Microsoft Azure

省略

□ 感想

ちょっと試そうと思いましたが、Web App Profileがうまくいきませんでした。。。
パラメータがつかずにcallbackに戻されてしまった。どうしてだろう。。。
ということで、動作確認はまた後でやります。

twitterFacebookの2.0対応を見たとき、OAuth WRAPはみんなにあまり注目されることもなく忘れられるのかと思ったら、Googleが対応してくれました。
TokenのRefreshもできるみたいですし、良い感じです。
ぜひ、皆様もWRAPの仕様に触れてみてはいかがでしょうか?

■ 参考リンク

OAuth WRAPに関してはこちらも読んでみてください。