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"
],
"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形式となります。

KEYVALUE備考
typJWT固定値となります。
エンコード済みオブジェクトがJWTであることを表します。
algHS256固定値となります。
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形式となります。

KEYVALUE備考
isshttps://apit.saisoncard.co.jp/auth2可変値となります。
セゾンコネクトが発行したIDトークンであることを表します。
subKTQW2gp7u6hJRFxydswPZ0ULfcYZ0zx1zI32Bs0HMC4mJnlKwmDOBSxAZ1uSGwYaiPo可変値となります。
エンドユーザを一意にする識別子を表します。
audZIT03可変値となります。
IDトークンの受け手であるクライアントIDを表します。
exp1445937609可変値となります。
UNIXタイムスタンプ(エポック秒)でのIDトークンの有効期間を表します。
iat1445934009可変値となります。
UNIXタイムスタンプ(エポック秒)でのIDトークンの発行時刻を表します。

JWS署名について

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

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

項番処理内容
1JWSヘッダとJWSペイロードをピリオドにて連結する。
2項番1の文字列を、クライアントが保持する鍵を用いてHMAC SHA-256アルゴリズムでハッシュする。
3項番2の文字列を、base64 url セーフエンコードする。

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

項番処理内容
1JWSペイロードに含まれる、"iss"の値が "https://api.saisoncard.co.jp/auth" であることを確認する。
2JWSペイロードに含まれる、"aud"が自身のクライアントIDであることを確認する。
3JWS署名が存在していることを確認する。
4JWSヘッダに含まれる"alg"の値が、"HS256"であることを確認する。
5JWS署名を生成し、レスポンスされたIDトークンの署名と一致していることを確認する。
6JWSペイロードに含まれる"exp"の値が現在時刻より、前であることを確認する。