質問: Google Web Authについての疑問です。Webサービス上でOAuthを使いユーザー認証を行いユーザー情報を取得する仕組みがありますが、Googleサービスから返されるトークンの意味がきちんと理解できていません。 !Google Sign-In for server-side appsのフロー図 上記は、Google Sign-In for server-side appsのフロー図を抜粋したものです。 OAuthの認証は自分でもコードを書いたことがあり、基本的な仕組みは理解しているつもりです。そこからアプリケーション側へ返されるトークン2種類とコードの意味や取り扱いがよくわかりません。 具体的にわからないのは以下の3点です。 1. access_token、id_token、one-time codeはどういうもので、それぞれはどう違うのか? 2. 上記の3つの値はどの程度のセキュリティのもとで扱われるべきなのか?例えば、アプリケーション側のサーバーがSSL(https)を使用していない場合(つまり、図中のClient→Serverの通信が暗号化されていない場合)でもこの値をやりとりすることは問題とならないのか? 3. ログインした後もServerを通じて継続的にAPIを呼びたい場合、上記の3つの値を保存するなどして対応するものなのか?それとも、Client側からServerにリクエストをするたびにどれかの値を渡してあげるものなのか? 項目数が多くなってしまったのですが、一部だけでもご教授いただければ幸いです。よろしくお願い致します。
回答: 『1.access_token、id_token、one-time codeはどういうもので、それぞれはどう違うのか?』についてわかる範囲(+調べた範囲)で回答させて頂きます。 * access_token OAuth2.0認証後にGoogleのAPIを叩くときに利用します。 Google APIを叩くときにヘッダーにaccess_tokenを入れておかないとunauthorized errorが発生します。 * id_token JWT(Json Web Token)と呼ばれるデータ形式で、ユーザのユニークな識別子が入っています。 これは各種サービス間でのID連携するときに利用します。 例えば、GREEにログインするときにYahoo!アカウントを使ってログインした場合に、ユーザの基本情報(名前やメールアドレス)が自動で入力されていることがあると思います。 そういった連携を組み込みたい場合に使ったりします。 * one-time code アクセストークンを取得するための一時的なコードです。 Googleが示している図を見てみると、ClientがGoogle API Serverからaccess_tokenおよびid_tokenを取得しています。 サービスの仕様的にClientからだけではなく、バックエンドサーバからもaccess_tokenもしくはid_tokenを利用したい場合に、『Clientからバックエンドサーバに送ったone-time code』を利用して、Google API Serverから改めてaccess_token, id_tokenを取得します。 少しでも参考になれば幸いです。 参考ページ Google アカウントの認証を OpenID から OpenID Connect に移行する方法 OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜 OAuth 2.0 の Response Type 全パターン