JWT
RFC 7519 JSON Web Token (JWT) https://tex2e.github.io/rfc-translater/html/rfc7519.html
JOSEのひとつ
https://www.iana.org/assignments/jwt/jwt.xhtml
テスト https://jwt.io/
OpenID Connect で使用するTokenの形, OAuth でも利用は可能
ユーザ情報的なものをJSONに詰め込んだ形式、ヘッダっぽいもの付加、署名、暗号化が可能
JWTのJSONをJWS Compactで署名して、HTTPヘッダなどで利用しやすくする (JWS)
署名することで真偽判定が容易
JWEで暗号化もできる
JWTクレームセット
特定の名のJSONオブジェクト
JWS(署名)またはJWE(暗号化)でくるむ
table:4.1.JWTクレームセットの中身
クレーム名 クレームの説明
iss: issuer JWT発行者
sub: Subject ユーザ識別子
aud: Audience 受信者
exp: Expiration Time 有効期限
nbf: Not Before 以前ではない(これ以前に受け入れてはならない)
iat: Isueed At 発行日
jti JWT ID 一意の識別子
4.2. Public Claim Name
登録または衝突防止された名前
レジストリ
https://www.iana.org/assignments/jwt/jwt.xhtml
table:クレーム
クレーム名 説明
name フルネーム
given_name 名またはファーストネーム
family_name 姓またはラストネーム
middle_name ミドルネーム
nickname ニックネーム/ハンドル名?
preferred_username 呼ばれたい名称
profile プロフィールURL
picture プロフィール画像URL
website WebページまたはBlog URL
email
email_verified 確認済みe-mailアドレスはtrue; その他はfalse
gender 性別
birthdate 生年月日
zoneinfo Time zone
locale Locale
4.3. Private Claim Name
衝突する可能性のあるその他の名前
table: 5. JOSEヘッダー
typ Type "JWT" JWTを判別するためのパラメータ JWTとわかっている場合は不要
cty Content Type "JWT" ネストされた署名または暗号化されている場合の中身の型 例 A.2
iss 暗号内からの複製 JWT発行者
sub 暗号内からの複製 ユーザ識別子
aud 暗号内からの複製 受信者
alg noneを指定することでJWS署名なしペイロードのみのJWS
JWT = JWS(JWTクレームセット) または JWE(JWTクレームセット)
ネストも可能
JWT = JWS(JWT(本文)) または JWT(JWS(本文)) など
CBOR版のCBOR Web Token CWTもあるっぽい
SD-JWT とかできた? https://datatracker.ietf.org/doc/draft-fett-oauth-selective-disclosure-jwt/
JWTでは特定の形式のJSONとJWS Compact署名の組み合わせ、JWSではpayloadの形式は決まっていない、compactのほかにJSON形式もある
RFC 7515 JWS 署名
RFC 7516 JWE 暗号化
RFC 7517 JWK 鍵
RFC 7518 JWA アルゴリズム
RFC 7519 JWT 情報形式
RFC 7523 JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants
RFC 7797 JSON Web Signature (JWS) Unencoded Payload Option (JWTには使えない)
Jakarta EE MicroProfile で対応