JSON Web トークン (JWT) は 2 つの当事者(クライアントとサーバ)間で情報を安全に転送するために使用されるオープン規格 (RFC 7519) です。
JWT は、ユーザーを検証または承認するために Web 上またはクライアントとサーバー間で使用される JSON オブジェクトのセットです。プライベート キーを使用してクライアント側で署名され、IDP によって提供されるパブリック キーを使用して検証が行われます。クライアントがトークンを提示すると、サーバは署名済みトークンを示します。この情報はデジタル署名されているため、検証と信頼を行うことができます。JWT 検証は、認可サーバによって発行された JWT に基づいて保護されたリソースへのアクセスを提供するために使用される認証方法です。
NSX Advanced Load Balancer では、NSX Advanced Load Balancer を介した安全な通信のためのアクセス ポリシーの 1 つとして JWT 検証がサポートされており、JWT 検証は認可サーバによって発行された JWT に基づいています。
JWT 検証の主なコンポーネント
JWT 検証プロセスで使用される主なコンポーネントは次のとおりです。
JSON Web キー セット (JWKS)
JSON Web トークン (JWT)
JWT 検証で頻繁に使用される用語
用語 |
説明 |
kid |
JWT の署名に使用される静的キーの識別子。 |
algo |
キーの署名に使用されるアルゴリズム。 |
iss |
JWT を発行した認可サーバ。 |
aud |
JWT の対象となる受信者(NSX Advanced Load Balancer 仮想サービス)。 |
sub |
JWT の対象となるプリンシパルを識別します。 |
exp |
トークンの有効期限(秒単位)。 |
nbf |
処理のためにトークンの受け入れが許可されるまでの時間を識別します。 |
iat |
トークンの発行時刻(秒単位)。 |
jti |
トークンの一意の識別子。 |
JSON Web キー セット (JWKS)
JSON Web キー セット (JWKS) は、認可サーバによって発行されたパブリック キーのセットです。これらのキーは、JSON Web Token (JWT) を検証するために使用されます。JWKS は、JWK のセットを表す JSON オブジェクトです。各 JWK は、キー識別子 (kid) によって一意に識別されます。発行者は、JWT ヘッダーに kid を追加して、トークンの署名に使用するキーを指定します。認可サーバは JWT に署名し、JWKS(JSON Web キー セット)でパブリック署名キーを公開します。
JSON Web トークン
コンパクト フォームでは、JSON Web トークン (JWT) は、ドット (.) で区切られた次のコンポーネントで構成されます。:
Header
:ヘッダーは次の要素で構成されています。トークンのタイプ(JWT)。
-
署名アルゴリズム(HMAC、SHA256、または RSA)。次に、JWT ヘッダーの例を示します。
Payload
:JWT ペイロードは、送信元たはクライアントに関する情報で構成されています。JWT ペイロードには要求セットが含まれています。要求は、(ユーザーの)エンティティおよび追加データに関するステートメントです。要求には、登録済み、パブリック、プライベートの 3 つのタイプがあります。登録済み要求:これらは、IANA の「JSON Web Token Claims」レジストリに登録されている要求です。詳細については、「IANA 登録済み要求 (https://www.iana.org/assignments/jwt/jwt.xhtml#claims)」を参照してください。
iss:JWT を発行したプリンシパルを識別します
aud:JWT の対象となる受信者を識別します
sub:JWT の対象となるプリンシパルを識別します。
exp:UTC の 1970 年 1 月 1 日からの経過秒数(UNIX 時間)で表したトークンの有効期限。
nbf:指定した時刻(UTC の 1970 年 1 月 1 日からの経過秒数のタイムスタンプ)より前に処理のためにトークンを受け入れることはできません。(UNIX 時間)
iat:UTC の 1970 年 1 月 1 日からの経過秒数(UNIX 時間)で表したトークンの発行時刻。
jti:トークンの一意の識別子
JWT のサンプル ペイロードを次に示します。
Signature
:シグネチャは、ユーザーからの改ざんされていないメッセージまたは要求を確認するために使用されます。
サンプルの JSON トークンを以下に示します(上記のコンポーネントが並んでいますが、ドット (.) で区切られています)。