用語集

JSON Web Token とは?

JSON Web Token(JWT)は、RFC 7519で定義されたコンパクトでURLセーフなトークン形式で、2つの当事者間のクレームをデジタル署名されたJSONオブジェクトとして表現し、ステートレス認証と情報交換を可能にします。

別名: JSON Web Token, JWTs

JWTはドットで区切られた3つのbase64urlエンコード部分で構成されています。ヘッダー(署名アルゴリズムを指定)、ペイロード(ユーザーID、ロール、有効期限などのクレームを含むキーと値のペア)、および署名(シークレットまたは秘密鍵を使ってヘッダーとペイロードに対して計算)です。署名により、検証キーを持つ当事者はトークンが改ざんされていないことを確認できます。

JWTはAPI認証でベアラートークンとして広く使用されています。ユーザーがログインした後、サーバーはユーザーのアイデンティティと権限を含むJWTを発行します。クライアントはその後のリクエストにこのJWTを含め(通常はAuthorizationヘッダーに)、サーバーはデータベースやセッションストアを照会することなく署名を検証します。このステートレスな特性により、JWTはサービス間でセッション状態を共有することが非現実的な分散システムやマイクロサービスアーキテクチャに適しています。

JWTは重要なセキュリティ上の考慮事項を伴います。ペイロードはbase64エンコードされているだけで(暗号化されていない)、JWTを傍受した誰でも内容を読むことができます。JWE(JSON Web Encryption)を使用する場合を除き、JWTペイロードにシークレットを含めないでください。トークンは一度発行されると簡単に失効できないため、短い有効期限が必要です。攻撃者がヘッダーを「none」に変更したり非対称から対称検証に切り替えたりするアルゴリズム混乱攻撃は、JWTライブラリで繰り返し発生している脆弱性です。

Vaulted における JSON Web Token の使われ方

Vaultedはユーザーアカウントがないため、認証やセッション管理にJWTを使用しません。ただし、JWTや他のベアラートークンは安全な転送が必要な頻繁に共有されるクレデンシャルです。例えば、インシデント中に長期間有効なAPIトークンやサービス間JWTシークレットを同僚と共有する場合などです。Vaultedはこれらのトークンに対して暗号化された自己消滅型の配信を提供し、通信チャネルに残り続けないようにします。