こんばんは、ritouです。
タイトルの通り、GoogleもOAuth 2.0対応しています。
- Making auth easier: OAuth 2.0 for Google APIs - The official Google Code blog
- http://code.google.com/intl/ja/apis/accounts/docs/OAuth2.html
Blogは"Monday, March 14, 2011"ってことで、日本はそれどころじゃなかった感がありますが、"Google OAuth 2.0"でググっても関連エントリが少なくてちょっとさみしかったので、ちょっと見てみましょう。
対応したフローは3つ!
- The client-side flow : JavaScriptとかで動く、いわゆるUser-Agent Profile
- The server-side flow : WebServerがDirect Commを行う、いわゆるWeb Server Profile
- The native application flow : デスクトップ、モバイルアプリ向けですって。楽しみですね!
ということで、さっそく各フローの処理を見てみましょう。
って、このブログ見てくれる方はもうOAuth 2.0 Draft 10あたりの説明なんて飽きましたよね?
最初の2つはさくっといきましょう。
OAuth 2.0 for client-side web applications
いわゆる、End User Authz Endpointはこちらになります。
特に変わったパラメータは見当たりませんね。
このようなURLにユーザーを送ります。
Scopeは必須で、URIの形式になっています。
https://accounts.google.com/o/oauth2/auth?
client_id=21302922996.apps.googleusercontent.com&
redirect_uri=https://www.example.com/back&
scope=https://www.google.com/m8/feeds/&
response_type=token
画面が出て、Allow accessが完了すると、こんな感じで戻ってきます。
https://www.example.com/back#access_token=1/QbIbRMWW&expires_in=4301
エラーの場合はフラグメント識別子ではないのですね。
window.location.hashを使ってハッシュ部分の値を取得し、Cookieに突っ込んだりサーバーにPOSTしたりすればいいとあります。
サーバーに送るならこのProfile使わなくてもいい気がしますが。
access tokenの有効期限が切れた後、もう一度上記のGoogleのURLにユーザーを送ると、同意済ユーザーの場合はすぐにリダイレクトで戻ってくるらしいです。
OAuth 2.0 for server-side web applications
こちらも準拠しているのでとくに変わったパラメータはありません。
https://accounts.google.com/o/oauth2/auth?
client_id=824390819211.apps.googleusercontent.com&
redirect_uri=https://www.example.com/back&
scope=https://www.google.com/m8/feeds/&
response_type=code
Allow access の後、Authorization Codeが戻ってきます。
https://www.example.com/back?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp6
あとはいつもの通りです。
Token Endpointは以下のようになります。
リクエストの例はこちら。
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencodedcode=4/P7q7W91a-oMsCeLvIaQm6bTrgtp6&
client_id=21302922996.apps.googleusercontent.com&
client_secret=XTHhXh1SlUNgvyWGwDk1EjXB&
redirect_uri=https://www.example.com/back&
grant_type=authorization_code
レスポンスの例はこちら。
{
"access_token":"1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in":3920,
"refresh_token":"1/6BMfW9j53gdGImsixUH6kU5RsR4zwI9lUVX-tqf8JXQ"
}
refresh tokenにも対応していますね。mixiなどと同じです。
OAuth 2.0 for native applications
基本的にはWeb Serverの場合と同じですが、redirect_uriの指定内容が以下のようになります。
urn(Uniform Resource Name)について気になる者は各自調べておくこと。
それ以外は特におかしなものもなく、ユーザーはこのようなURLに送られます。
https://accounts.google.com/o/oauth2/auth?
client_id=21302922996.apps.googleusercontent.com&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
scope=https://www.google.com/m8/feeds/&
response_type=code
そして、お決まりのAllow accessが終わると、Authorization Codeが画面に表示されます。
※デモがまだできていないのでキャプチャがありません。
この画面、Titleがこんな感じになっています。
Success code=4/ThisValueIsDummyMyNameIsRitou
頭の良い開発者の方はWindowのタイトルが変わるのを見張ってて、タイトルがこのパターンになったらAuthorization Codeを取得してWindowを閉じて処理を続けましょうと。
簡単ですね!って思った人は、やり方を私に教えてください。
それ以外はごくごく標準的なOAuth 2.0のフローなので、省略します。