Posted at

Google Identity ToolKitの紹介

More than 3 years have passed since last update.

この記事はリクルートライフスタイル Advent Calendar 2015 - Qiita の16日目です。

筆者は現在、AirREGIの海外展開プロジェクトに携わっています。その中で、いわゆるAirシリーズのIdentity Providerとなるサービスを開発しているのですが、車輪の再発明感が半端ないと思い、世の中の解決策を調べたところGoogle Identity Tool Kitなるものを見つけて試してみたので、今回はその紹介です。(これを採用したという話ではありません)


TL;DR


  • GITKitを使ってみた

  • アカウント管理なんていらんかったやー(^o^)/

  • 面倒なところは任せてユーザに価値を届けられるところに集中しよう


Google Identity ToolKitとは

Google Identity Toolkit(以下GITkit)のページには以下のように紹介されています。


Identity Toolkit gives you a robust, secure authentication system in a box that helps you do sign-in the right way, no matter what account your users want to use


とあります。なんかよさそう。GITkitはAndroid, iOS, Webの三つのプラットフォームで利用することができるのですが、今回はWebを試してみようと思います。さっそく、Webへ行っています。

すると、まず全体概要として以下のアーキテクチャの図が出てきました。

GITKit architecture Diagram

なるほど、わからない。この雲はグーグルさんということだろうか。どこでどんな情報が管理されるのか、どういう仕組みになっているのか、実際に動かしてみることにしましょう。


Getting started with GITKit

GITKitを実際に試してみるのに、コードを書く必要はありません。Quickstart AppがPython,PHP,Java,Go,Node.js,そしてRubyで用意されています。Google Developers Consoleで必要な設定を行って、サンプルコードの設定を変更すれば利用可能になります。

Step by stepのtutorialはgoogleのサイトにお任せするとして、最低限必要な設定をまとめると以下のようなものになります。


  • Google Developers Consoleでプロジェクトを作成し、GITKitのAPIを有効にする。

  • OAuth2クライアント登録をする。(他のIDPを利用する場合はそちらでもOAuth2クライアントとして自分のアプリを登録をする)


    • これによって、エンドユーザが選択できる認証手段(Google、 Facebook、 etc)を追加することができます。



  • Browser API Keyを発行する。JavascriptでGoogleのAPIを叩けるようにします。


  • IDPKit APIに以下のURLを登録する。(パスはサンプルアプリでの設定です)


    • widget URL: /widget


      • sign-inボタンを設置するページであり、OAuth2のcallback URLでもあります。



    • Sign-in Success URL: /


      • Sign-inに成功した後にユーザを連れてきて欲しいURLを登録します。必要であれば、このURLに遷移してきたときに、session cookieを作成したりなどします。



    • Sign-out URL: /


      • (User Card widgetを利用する場合) ユーザがsign-outをした時に, 遷移させるURLです。



    • Send email URL: /


      • パスワード忘れや、アカウント忘れなどのときにメールを送ることってありますよね。そうしたケースに、 GoogleさんがこのURLに送り先と内容を送りつけてくるようです。Googleから送りつけるとemail source verificationでspam判定されてしまうそうな。。。





  • (Optional) Facebookなどの他サービスのclient_id、client_secretをGoogleに登録します。

    - 他のIDPで登録したアプリのid, secretを登録する必要が有ります。secretとはなんだったのか。あの雲はgoogleさんだった模様。GITKitを利用するサービスに変わって、アクセストークンの発行とかも肩変わりしちゃうよということだったようです。



認証のフロー

実際に動かしてみて認証フローを調べてみました。動きを見る限りだと以下のようなフローが基本になっているようです。(OpenIDのaccount chooserが入るパターンもありますが、基本は多分こんな感じ)

注: 動かした結果の解釈なので, 異なっている可能性もあります. 特に8-11は動かしてみた結果の推察です.

基本はGoogleが提供しているJavascriptとwidgetで済むようになっていて、そのJSが然るべくGITKitのAPIを叩きながら認証のフローを完了させJWTをクッキーに埋め込むところまでやってくれて、その後は御自由にどうぞ、という作りになっているようです。

JWTの中にはLocal UserID(自サービス内でユニーク)、有効期限が入っているので、その期限に合わせたサービスの提供でもよいですし、あるいはその有効期限とは別の有効期限を独自で設定したりなど、そこからの実装は自由に選択できそうです。


まとめ


  • IDPKitを利用すれば、認証周りの機能やアカウントの管理をGoogle先生に任せられる(依存できる)

  • 自サービスでアカウント持つ必要なんてなかったんやー(^o^)/

  • 面倒な部分は任せてしまって、ユーザに価値を届けられるところに集中しよう