googleapi

Google OAuth2で提供されるID tokenの詳細(翻訳)

なかなか正式な情報を見つけられなかったので、メモ。

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
Description
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攻撃に対する防御のための代替的なメカニズムとして利用することができるが、Step1Step3に従っているのであれば、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>で囲ってみたら一応なんとかなったんですが、他に方法ないんでしょうか…?