IDトークンについて

IDトークンについて

IDトークンはOpenID Connectの仕様に則りJWT(JSON Web Token)形式にて返却されます。
セゾンコネクトではクレームをJWS(JSON Web Signature)のペイロードにて表現します。

TEA004でのレスポンス例

response body

{ "access_token": "31D13e4bwgwL51Wb1rr0sWbA1SvG2M7lRs-CMCz7qj0", "expires_in": 3600, "refresh_token": "BEu2VYyS3JYIXiua4kR9m3ugwgSm0-ndv5rVayzQGRE", "token_type": "mac", "scope": [ "openid", "sex", "birthday", "login", "sex_name" ][ "openid", "sex", "birthday", "login", "sex_name" ], "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaXQuc2Fpc29uY2FyZC5jby5qcC9hdXRoMiIsInN1YiI6IktUUVcyZ3A3dTZoSlJGeHlkc3dQWjBVTGZjWVowengxekkzMkJzMEhNQzRtSm5sS3dtRE9CU3hBWjF1U0d3WWFpUG8iLCJhdWQiOiJaSVQwMyIsImV4cCI6IjE0NDU5Mzc2MDkiLCJpYXQiOiIxNDQ1OTM0MDA5In0.RRPe0laId_XXf5nTQ3LQqbc7zVnAVfpEfvJFGsYOqqY" }

レスポンスされるIDトークンについて

IDトークンはピリオド区切りによる3つのセグメントから構成されます。

ピリオドで分割したIDトークンの例

セグメント名称

エンコード済み JWSヘッダ

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

エンコード済み
JWSペイロード

eyJpc3MiOiJodHRwczovL2FwaXQuc2Fpc29uY2FyZC5jby5qcC9hdXRoMiIsInN1YiI6IktUUVcyZ3A
3dTZoSlJGeHlkc3dQWjBVTGZjWVowengxekkzMkJzMEhNQzRtSm5sS3dtRE9CU3hBWjF1U0d3W
WFpUG8iLCJhdWQiOiJaSVQwMyIsImV4cCI6IjE0NDU5Mzc2MDkiLCJpYXQiOiIxNDQ1OTM0MDA5In0

JWS署名

RRPe0laId_XXf5nTQ3LQqbc7zVnAVfpEfvJFGsYOqqY

JWSヘッダについて

base64urlセーフエンコードされたJSON形式となります。

エンコード済みJWSヘッダをデコードした例

セグメント名称

JWSヘッダ

{"typ":"JWT","alg":"HS256"}

以下のパラメータを含むJSON形式となります。

KEY

VALUE

備考

typ

JWT

固定値となります。
エンコード済みオブジェクトがJWTであることを表します。

alg

HS256

固定値となります。
JWTにはHMAC SHA-256アルゴリズムを使ってMACが付与されていることを表します。

JWSペイロードについて

base64urlセーフエンコードされたJSON形式となります。

エンコード済みJWSペイロードをデコードした例

セグメント名称

JWSペイロード

{"iss":"https://apit.saisoncard.co.jp/auth2","sub":"KTQW2gp7u6hJRFxydswPZ0ULfcYZ0zx1zI32Bs0
HMC4mJnlKwmDOBSxAZ1uSGwYaiPo","aud":"ZIT03","exp":"1445937609","iat":"1445934009"}

以下のパラメータを含むJSON形式となります。

KEY

VALUE

備考

iss

https://apit.saisoncard.co.jp/auth2

可変値となります。
セゾンコネクトが発行したIDトークンであることを表します。

sub

KTQW2gp7u6hJRFxydswPZ0ULfcYZ0zx1zI32Bs0HMC4mJnlKwmDOBSxAZ1uSGwYaiPo

可変値となります。
エンドユーザを一意にする識別子を表します。

aud

ZIT03

可変値となります。
IDトークンの受け手であるクライアントIDを表します。

exp

1445937609

可変値となります。
UNIXタイムスタンプ(エポック秒)でのIDトークンの有効期間を表します。

iat

1445934009

可変値となります。
UNIXタイムスタンプ(エポック秒)でのIDトークンの発行時刻を表します。

JWS署名について

JWSヘッダのalgに定義されるあるゴアリズムにて生成されます。
(上記例ではHS256が設定されているため、HMAC SHA-256アルゴリズムにて生成されています。)

以下の手順に従い署名部は生成されます。

項番

処理内容

1

JWSヘッダとJWSペイロードをピリオドにて連結する。

2

項番1の文字列を、クライアントが保持する鍵を用いてHMAC SHA-256アルゴリズムでハッシュする。

3

項番2の文字列を、base64 url セーフエンコードする。

IDトークンの検証について

項番

処理内容

1

JWSペイロードに含まれる、"iss"の値が "https://api.saisoncard.co.jp/auth" であることを確認する。

2

JWSペイロードに含まれる、"aud"が自身のクライアントIDであることを確認する。

3

JWS署名が存在していることを確認する。

4

JWSヘッダに含まれる"alg"の値が、"HS256"であることを確認する。

5

JWS署名を生成し、レスポンスされたIDトークンの署名と一致していることを確認する。

6

JWSペイロードに含まれる"exp"の値が現在時刻より、前であることを確認する。