JWT
JSON Web Token
JWTそれ自体には暗号化や署名・検証は組み込まれておらず、JWEやJWSに移譲している JWTが定めるのは:
「署名に使われたアルゴリズムはなにか」
「暗号化されているか、その鍵スイートはなにか」
「上記メタデータ (ヘッダと呼ぶ) やペイロードの符号化とどんなレイアウトか」
{base64_encode(header)}.{base64_encode(payload)}.{base64_encode(sign(header + payload))} という形式の文字列になる
URL-safeなBase64符号化を行うのでHTTPヘッダやCookie, URLのクエリパラメータなどで扱いやすい可搬性が売りというわけ
algにJWEによる暗号化がなされる形式を指定しないとペイロードは平文なので注意 脆弱性チャンス algをnoneに改竄されたり許容すると署名の検証がなされず、ペイロードが改竄されるリスクがあるので受け入れ alg は必ず指定しよう
最近のライブラリだと noneは特別なパラメータを渡さない限り許可しなかったりするが、仕様上、許可されていることは知っておくべき
実装
Perl
Node
JWTのみでJWEに対応していないので、暗号化が必要な時は使えない