なかなか正式な情報を見つけられなかったので、メモ。
ID tokenはJWTで以下のサンプルのようなjsonで提供される。
{"iss":"accounts.google.com",
"at_hash":"HK6E_P6Dh8Y93mRNtsDB1Q",
"email_verified":"true",
"sub":"10769150350006150715113082367",
"azp":"1234987819200.apps.googleusercontent.com",
"email":"jsmith@example.com",
"aud":"1234987819200.apps.googleusercontent.com",
"iat":1353601026,
"exp":1353604926,
"nonce": "0394852-3190485-2490358",
"hd":"example.com" }
それぞれのクレームは以下のような意味がある。
Claim
Provided
---|---|---
iss|always|レスポンスの発行者の発行者識別子。GoogleのID tokenでは常にhttps://accounts.google.com
またはaccounts.google.com
。
at_hash||access tokenのハッシュ。access tokenとID tokenが結び付けられているかどうかを検証できる。サーバーフローの中でID tokenがaccess tokenと共に発行されている場合は、常に含まれている。CSRF攻撃に対する防御のための代替的なメカニズムとして利用することができるが、Step1とStep3に従っているのであれば、access tokenの検証は必要ない。
email_verified||ユーザーのメールアドレスが検証済みであればtrue、そうでなければfalse。
sub|always|ユーザーの識別子であり、全てのGoogleアカウントの間で唯一かつ再利用されない。Googleアカウントは異なる時点で複数のメールアドレスを持つことができるが、sub
は変化することがない。アプリケーションの中でのユーザーの固有識別子としては、sub
を使う。
azp||承認済みプレゼンターのclient_id。このクレームは、ID tokenを要求する当事者がID tokenのオーディエンスと同じでない場合にのみ必要となる。これは、WebアプリケーションとAndroidアプリのclient_idが異なるが、同じプロジェクトを共有するハイブリッドアプリのような場合に該当する可能性がある。
email||ユーザーのメールアドレス。これは唯一のものではない可能性があり、ユーザーの主キーとしては適さない。Scopeに"email"
を含んでいる場合にのみ提供される。
profile||ユーザーのプロフィールページのURL。次の場合に提供される。
・ リクエストしたscopeが"profile"
を含んでいる
・ ID tokenがトークンリフレッシュから返されているprofile
クレームが存在する場合、あなたのアプリのユーザーレコードを更新するためにこれを利用できる。このクレームが存在することは保証されていないことに注意。
picture||ユーザーのプロフィール画像のURL。次の場合に提供される。
・ リクエストしたscopeが"profile"
を含んでいる
・ ID tokenがトークンリフレッシュから返されているpicture
クレームが存在する場合、あなたのアプリのユーザーレコードを更新するためにこれを利用できる。このクレームが存在することは保証されていないことに注意。
name||表示可能な形式の、ユーザーのフルネーム。次の場合に提供される。
・ リクエストしたscopeが"profile"
を含んでいる
・ ID tokenがトークンリフレッシュから返されているname
クレームが存在する場合、あなたのアプリのユーザーレコードを更新するためにこれを利用できる。このクレームが存在することは保証されていないことに注意。
aud|always|このID Tokenが対象としているオーディエンスの識別子。あなたのアプリケーションのOAuth 2.0 クライアントIDの一つでなければならない。
iat|always|ID Tokenが発行された時刻。Unix time(整数秒)で表現されている。
exp|always|ID Tokenの有効期限が切れる時刻。Unix time(整数秒)で表現されている。
nonce||認証リクエストの中であなたのアプリから提供されたナンスの値。この値が一度だけ表示されるようにすることで、リプレイ攻撃に対する保護を強化する必要がある。
hd||ユーザーのホストされているG Suiteドメイン。ユーザーがホストされているドメインに属している場合にのみ提供される。
"OpenID Connect" by Google is licensed under CC BY 3.0
ところで、1、2列目が細くなりすぎるのでヘッダを<pre>
で囲ってみたら一応なんとかなったんですが、他に方法ないんでしょうか…?