新機能:JWTハンドブックを無料で入手し、Jwtを深く学びましょう!
JSON Webトークンとは何ですか?
JSON Web Token(JWT)は、jsonオブジェクトとして当事者間で安全に情報を送信するためのコンパクトで自己完結型の方法を定義するオープン標準(RFC7519)です。 この情報はデジタル署名されているため、検証および信頼できます。 Jwtは、秘密(HMACアルゴリズムを使用)またはRSAまたはECDSAを使用した公開/秘密キーのペアを使用して署名できます。,
Jwtは暗号化されて当事者間の秘密を提供することもできますが、署名されたトークンに焦点を当てます。 署名のトークンでの完全性を確認する、請求項に含まれるので、暗号化トークンを非表示請からその他の規範を遵守いたします。 公開鍵と秘密鍵のペアを使用してトークンが署名されると、署名は秘密鍵を保持している当事者のみが署名したものであることを証明します。
JSON Webトークンをいつ使用する必要がありますか?
JSON Webトークンが役に立つシナリオは次のとおりです。
-
承認:これはJWTを使用するための最も一般的なシナリオです。, ユーザーがログインすると、後続の各要求にJWTが含まれ、ユーザーはそのトークンで許可されているルート、サービス、およびリソースにアクセスできます。 シングルサインオンは、オーバーヘッドが小さく、異なるドメイン間で簡単に使用できるため、現在JWTを広く使用する機能です。
-
情報交換:JSON Webトークンは、当事者間で安全に情報を送信する良い方法です。 Jwtは署名することができるため、たとえば公開鍵と秘密鍵のペアを使用して、送信者が誰であるかを確認できます。, さらに、署名はヘッダーとペイロードを使用して計算されるため、コンテンツが改ざんされていないことを確認することもできます。
JSON Webトークン構造とは何ですか?
コンパクトな形式では、JSON Webトークンはドットで区切られた三つの部分(.
)で構成されています。
- ヘッダー
- ペイロード
- 署名
したがって、JWTは通常、次のようになります。
xxxxx.yyyyy.zzzzz
さまざまな部分を分解しましょう。,
Header
ヘッダーは通常、JWTであるトークンのタイプと、HMAC SHA256やRSAなどの使用されている署名アルゴリズムで構成されます。
例:
{ "alg": "HS256", "typ": "JWT"}
次に、このJSONはJwtの最初の部分を形成するためにエンコードされたBase64Urlです。
ペイロード
トークンの第二の部分は、クレームを含むペイロードです。 請求項について述べるエンティティ(通常、ユーザーの追加データ。請求には、登録請求、公開請求、および私的請求の三つのタイプがあります。,
-
登録クレーム:これらは必須ではなく、有用でinteroper用可能なクレームのセットを提供するために推奨される事前定義されたクレームのセットです。 それらのうちのいくつかは次のとおりである:iss(発行者)、exp(有効期限)、sub(主題)、aud(聴衆)、および他。
JWTがコンパクトであることを意味するため、クレーム名は三文字のみであることに注意してください。
-
パブリッククレーム:これらはJwtを使用して自由に定義することができます。, しかし、衝突を避けるためには、IANA JSON Web Token Registryで定義するか、衝突耐性の名前空間を含むURIとして定義する必要があります。
-
プライベートクレーム:これらは、それらの使用に同意する当事者間で情報を共有するために作成されたカスタムクレームであり、登録されたクレーム
ペイロードの例は次のようになります。
{ "sub": "1234567890", "name": "John Doe", "admin": true}
ペイロードはBase64Urlエンコードされ、JSON Webトークンの第二部分を形成します。,
署名されたトークンの場合、この情報は改ざんから保護されていますが、誰でも読み取り可能です。 JWTのペイロード要素またはヘッダー要素には、暗号化されていない限り、秘密情報を入れないでください。
Signature
署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、シークレット、ヘッダーで指定されたアルゴリズムを,
たとえば、HMAC SHA256アルゴリズムを使用する場合、署名は次の方法で作成されます。
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
署名は、メッセージが途中で変更されていないことを確認するために使用され、秘密鍵で署名されたトークンの場合は、JWTの送信者が誰であるかを確認することもできます。
すべてをまとめる
出力は、HTMLおよびHTTP環境で簡単に渡すことができるドットで区切られたBase64URL文字列ですが、SAMLなどのXMLベースの標準と比較すると、よりコンパクトです。,
以下は、前のヘッダーとペイロードがエンコードされ、シークレットで署名されているJWTを示しています。
JWTでプレイしてこれらの概念を実践したい場合は、次のように使用できますjwt.io Jwtをデコード、検証、および生成するデバッガ。
JSON Webトークンはどのように機能しますか?
認証では、ユーザーが資格情報を使用して正常にログインすると、JSON Webトークンが返されます。 以降のトークンを認定資格は、充分な注意を払う必要があるのを防ぐセキュリティの問題に取り組む。, 一般的に、トークンを必要以上に長く保つべきではありません。
セキュリティの欠如のために、機密セッションデータをブラウザストレージに保存しないでください。
ユーザーが保護されたルートまたはリソースにアクセスする場合は、ユーザーエージェントはJWTを送信する必要があります。 ヘッダーの内容は次のようになります。
Authorization: Bearer <token>
これは、場合によっては、ステートレス承認メカニズムにすることができます。, サーバーの保護されたルートは、Authorization
ヘッダーで有効なJWTをチェックし、存在する場合、ユーザーは保護されたリソースへのアクセスを許可されます。 JWTに必要なデータが含まれている場合、特定の操作のためにデータベースにクエリする必要性が減る可能性がありますが、必ずしもそうではないかもしれ
トークンがAuthorization
ヘッダーで送信された場合、クッキーを使用しないため、クロスオリジンリソース共有(CORS)は問題になりません。,
次の図は、JWTが取得され、Apiまたはリソースにアクセスするために使用される方法を示しています。
- アプリケーションまたはクライアント このように異なる認可が流れます。 たとえば、一般的なOpenID Connect準拠のwebアプリケーションは、認証コードフローを使用して
/oauth/authorize
エンドポイントを通過します。 - 承認が付与されると、承認サーバーはアプリケーションにアクセストークンを返します。,
- アプリケーションは、アクセストークンを使用して保護されたリソース(APIなど)にアクセスします。
署名されたトークンでは、トークン内に含まれるすべての情報は、変更できなくても、ユーザーまたは他の当事者に公開されることに注意してください。 これは、トークン内に秘密情報を入れないことを意味します。
なぜJSON Webトークンを使用する必要がありますか?
Simple Web Tokens(SWT)およびSecurity Assertion Markup Language Tokens(SAML)と比較した場合のJSON Web Tokens(JWT)の利点について説明しましょう。,JSONはXMLよりも冗長ではないため、エンコードされるとサイズも小さくなり、JWTはSAMLよりもコンパクトになります。 これにより、JWTはHTMLおよびHTTP環境で渡されるのに適した選択になります。セキュリティ面では、SWTはHMACアルゴリズムを使用して共有秘密によってのみ対称的に署名できます。 ただし、JWTトークンとSAMLトークンは、署名用にX.509証明書の形式で公開キーと秘密キーのペアを使用できます。 XMLの署名とXMLデジタル署名を導入することなく無名のセキュリティホールが非常に難しい場合に比べてメンテナンス性の良い調印JSON.,
JSONパーサーは、オブジェクトに直接マップされるため、ほとんどのプログラミング言語で一般的です。 逆に、XMLには自然な文書からオブジェクトへのマッピングはありません。 これにより、SAMLアサーションよりもJWTの操作が簡単になります。
使用に関しては、JWTはインターネット規模で使用されています。 このハイライトのクライアント側の処理をJSON Webのトークンをマルチプラットフォームで、動きやすい。,
エンコードされたJWTとエンコードされたSAMLの長さの比較
JSON Webトークンの詳細を読み、独自のアプリケーションで認証を実行するためにそれらを使い始めたい場合は、Auth0のJSON Webトークンランディングページを参照してください。
Leave a Reply