トークンには、ID トークンと標準ベアラー トークンの 2 種類があります。
無記名トークン:
これは、OAuth ダンスを通じて取得される標準のトークンです。
ID トークン:
典型的な ID トークンは次のように
eyJhbGciOiJSUzI1NiIsImtpZCI6IjIxZWFlMTVkODE.eyJpc3MiOiJhY2NvdW50cy5n.oXLawgz_ed
なり (かなり長いセグメントを除く)、署名付き JWT です。
ID トークンは'id_token'
、Tic-Tac-Toeサンプルで行われているように、レスポンス タイプに追加することで JavaScript で取得できます。
このように、 OAuth リクエストから返されるトークンにも ID トークンが含まれます。
var token = gapi.auth.getToken();
// Use id_token instead of bearer token
token.access_token = token.id_token;
ログに表示される内容:
この線
W 2013-03-14 08:52:14.748 id_token verification failed: Wrong number of segments in token: ya29.AHES6ZSpbeiTPTOJhCTtRdypgldcrRBQBKH8oQ8Y_FpxG5-Lr3OW6dE
ya29.AHE...
これは、監視されたトークンが ID トークンではなく、ログの次の行であることを意味する単なる警告です。
I 2013-03-14 08:52:14.748 Checking for oauth token.
トークンが Bearer Token であるかどうかを確認するために移動していることを意味します。
これはトークンが無効であることを意味するのではなく、Bearer Token をチェックしていたということです。
この線
W 2013-03-14 08:52:14.885 Found 1 RPC request(s) without matching response (presumably due to timeouts or other errors)
おそらく失敗したトークンを検証するための RPC があったことを意味します。Bearer Token を検証するための主な要素は、
oauth.get_current_user(EMAIL_SCOPE)
とリクエスト
https://www.googleapis.com/oauth2/v2/tokeninfo?access_token=ya29.AHE...
トークンのクライアント ID とオーディエンスを確認します。
ID トークンの詳細:
最初のセグメントは、base64url でエンコードされた、使用されている暗号化の説明です。例えば。
>>> import base64, json
>>> segments = id_token.split('.')
>>> first_segment = segments[0] + '=' * ((4 - len(segments[0])) % 4)
>>> json.loads(base64.urlsafe_b64decode(first_segment))
{u'alg': u'RS256', u'kid': u'21eae15d817c1b4a8f6ff4501930512d07cbe684'}
2 番目のセグメントは、トークンのコンテンツの base64url エンコードされた説明です。
>>> second_segment = segments[1] + '=' * ((4 - len(segments[0])) % 4)
>>> base64.urlsafe_b64decode(second_segment)
{u'at_hash': u'xxxyyyzzz', # Fake Data
u'aud': u'someclient_id.apps.googleusercontent.com',
u'azp': u'someclient_id.apps.googleusercontent.com',
u'cid': u'someclient_id.apps.googleusercontent.com',
u'email': u'joe@mail.com',
u'email_verified': u'true',
u'exp': 1363289943,
u'hd': u'google.com',
u'iat': 1363286043,
u'id': u'123456789', # Fake Data
u'iss': u'accounts.google.com',
u'sub': u'123456789', # Fake Data
u'token_hash': u'xxxyyyzzz', # Fake Data
u'verified_email': u'true'}
3 番目のセグメントは、Google の秘密鍵で署名された最初の 2 つのセグメントの組み合わせです。