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形式となります。
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"の値が現在時刻より、前であることを確認する。 |