LogicMonitor + Catchpoint: 自律型ITの新時代へ

さらに詳しく

JSON Web Token とは何ですか?

JSON WebToken(JWT)は、XNUMX者間でクレームを転送するURLセーフな方法です。 JWTはクレームをJavaScriptオブジェクト表記でエンコードし、オプションで署名または完全暗号化のためのスペースを提供します。
所要時間
2021 年 9 月 16 日

JSON Web Token (JWT) は、2 つの当事者間でクレームを JSON オブジェクトとして転送する URL セーフな方法です。JSON オブジェクトは、人間が読み取り可能で機械が解析可能な形式でデータを表すために使用されるデータ構造で、JavaScript Object Notation (JSON) と呼ばれます。. JWT は、OAuth 2.0 などのフレームワークや OpenID Connect などの標準によって普及するにつれて、安全なデータ交換のためのより信頼できるソリューションになります。

JWT には、ヘッダー、ペイロード、署名の 3 つのコンポーネントが含まれます。メッセージ認証コード (MAC) を含む暗号化または署名されたトークンは JSON Web 署名 (JWS) と呼ばれ、暗号化されたトークンは JWE または JSON Web 暗号化と呼ばれます。

口頭でのコミュニケーションのために、多くの開発者はJWTを「jot」または「jawt」と発音しています。 そのテーマを引き継いで、JWSの発音を「jaws」、JWEの発音を「jawa」として提案します。

その JWT ヘッダーJSONとペイロードJSONを「。」で連結することによって形成されます。 オプションで署名を追加します。 文字列全体が base64URLエンコード.

この記事では、JWT トークンの基礎について説明し、JSON Web Token の使用例を示し、ベスト プラクティスに関する質問に回答します。

主要な取り組み

JSON Web Token (JWT) は、多くの場合暗号化または署名を使用して、2 つの当事者間でクレームを送信するために使用される URL セーフなデータ構造です。
JWT は、クライアントの状態がサーバー上で維持されない RESTful API などの環境でのステートレス認証に最適です。
JWT のヘッダーがトークンの検証を制御する場合、セキュリティ上の脆弱性が発生する可能性があります。ベスト プラクティスとしては、スコープの制限、安全なストレージの使用、有効期限の設定などがあります。
JWT は、署名されている場合でもヘッダーとペイロードの両方が表示されるため、機密データを保存しないでください。

目次:

JSONWebトークンの例

JWTの例

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJMTSIsImlhdCI6MTYxOTQ3MDY4MiwiZXhwIjoxNjE5NDcxODg2LCJhdWQiOiJsb2dpY21vbml0b3IuY29tIiwic3ViIjoiTmVkIn0.mqWsk4fUZ5WAPYoY9bJHI7gD8Zwdtg9DUoCll-jXCMg

デコードされたヘッダー

{
  "typ": "JWT",
  "alg": "HS256"
}

デコードされたペイロード

{
  "iss": "LM",
  "iat": 1619470682,
  "exp": 1619471886,
  "aud": "logicmonitor.com",
  "sub": "Ned"
}

署名

mqWsk4fUZ5WAPYoY9bJHI7gD8Zwdtg9DUoCll-jXCMg

JWTトークンを使用する場合

JWT は、ステートレス認証の状況で HTTP リクエストの状態を維持するための実用的な方法を提供します。一般的な用途には、RESTful API とシングル サインオン (SSO) 認証があります。JWT は、リクエストごとにサーバーに状態情報を提供します。これは、クライアント認証と承認制御を必要とするセキュリティ保護された RESTful Web サービスに特に役立ちます。

JWT を使用しない場合: セッション トークンで十分な場合は JWT を使用しないでください。セッション トークンはクライアント アクセスを管理するための確立された方法であり、脆弱性をもたらす可能性は低いです。

LogicMonitorの記事 Web サービスの追加と管理 JWT と Web サービスの統合に関する洞察を提供します。

「JWT は、ユーザーを認証するための安全でステートレスな方法を提供し、クライアントとサーバー間のデータ交換を変革します。」

JWT のセキュリティに関する考慮事項

JWTまたはJWSの最も一般的な脆弱性は実装中に発生します。JWSは本質的にセキュリティを提供しないため、適切な実装と安全なサーバー監視を組み合わせる必要があります。 Silver Peakのようなツールで 次のようなセキュリティ上の落とし穴を回避するための鍵となります。

  • アルゴリズムの混乱: Avoid により、JWT ヘッダーが検証アルゴリズムを指定することが許可され、攻撃者が「alg」ヘッダーを「none」に設定した場合に脆弱性が発生する可能性があります。
  • 弱い秘密: トークンの偽造を防ぐために、強力で複雑な秘密を使用します。
  • トークンサイドジャック: ユーザーのコンテキストと有効期限を組み込み、トークンを安全に保存することで、サイドジャックを防止します。

暗号化アルゴリズムの実際の比較: HMAC と RSA

HMAC (ハッシュベースのメッセージ認証コード) は、共有秘密キーを使用して署名を作成し、検証します。非対称アルゴリズムである RSA は、秘密キーを使用して署名を作成し、公開キーを使用してデジタル署名を検証します。

RSA アルゴリズムを使用するシステムは、秘密鍵で署名し、公開鍵で検証します。JWT が HMAC アルゴリズムを使用して署名され、入力として公開 RSA 鍵が使用されている場合、受信側システムは、HMAC アルゴリズムを使用して署名を検証するために、既知の公開 RSA 鍵を使用するように騙される可能性があります。

この攻撃は、受信側システムが JWT ヘッダーによるトークン認証を許可した場合に機能します。この場合、攻撃者は非対称スキームの公開鍵を対称署名スキームの共有秘密鍵として宣言しました。

JWTトークンの実装に関するベストプラクティス

JWT のセキュリティと有効性を最大限に高めるには、実装時にこれらのベスト プラクティスに従う必要があります。

  • 適切な認証制御: JWT ヘッダーによるトークン認証を許可しないでください。許可されたアルゴリズムの定義済みリストを使用してください。
  • トークンの秘密: 攻撃者が有効なトークンを生成できるような弱いトークン秘密を避けてください。
  • ユーザーコンテキスト: トークンのサイドジャックを防ぐには、トークンにユーザー コンテキストを追加します。クライアント認証中にランダムな文字列が提供され、強化された Cookie に保存されます。
  • 安全な保管: 安全な保存を保証するために強化された Cookie を使用します。
  • 有効期限: トークンの検証日に適切な制限を設定し、長期間有効にしておく必要のあるトークンについては、他の失効方法を検討してください。
  • 権限の範囲: 保護されたリソースへのアクセス範囲を限定した JWT を発行します。
  • クレームが必要: アクセス ポイントに制限を適用して、署名の有効性に関係なく、範囲制限を超えた要求が拒否されるようにします。
  • 特権データ: ヘッダーやペイロードに保存されたデータを隠さない JWT または JWS には、特権データを保存しないでください。

JWT トークンとセッション トークン

JWTは従来のセッショントークンとは異なる いくつかの方法で:

ステートレス

JWT はステートレスであり、サーバー側のストレージを必要としません。すべての情報はトークン自体に保存されるため、サーバー ストレージが不要になり、Web アプリの要件が軽減されます。状態を管理するために、セッション トークンにはサーバー ストレージが必要になるため、これらのアプリケーションのスケーリングはより困難になります。

地方分権化

JWT は分散認証を可能にします。ユーザーに JWT が発行されると、正しい秘密鍵を持つどのサービスでも、中央サーバーに接続することなくトークンを検証できます。セッション トークンを使用する場合、ユーザーは通常、サーバー上に保存されているセッション データを使用して資格情報を検証する必要があります。

柔軟性

JWT はセッション トークンよりも多くの情報を保持できます。ユーザー ロール、権限、トークン情報、メタデータなどを含めることができます。セッション データには通常、識別子のみが含まれ、残りはサーバー上に保存されます。

セキュリティ

JWT では機密データがユーザーのマシンに保存されるため、セキュリティに関する異なる考慮事項が必要です。暗号化、適切な署名、および秘密鍵の適切な処理が必要です。セッション トークンのセキュリティの多くは、サーバーのデータ管理に依存します。

パフォーマンス

JWT は、サーバー操作を減らすことで Web アプリケーションのパフォーマンスを向上させることができます。たとえば、データベース検索の回数を減らして、高帯域幅アプリケーションのパフォーマンスを向上させることができます。セッション トークンでは、リクエストごとに検索が必要になる場合があり、スケーリングが複雑になる可能性があります。

JSON Web Tokenの使用例

JWT は汎用性が高く、次のようなさまざまなシナリオに適用できます。

Microservices

JWT はマイクロサービス間の通信を容易にします。JWT は秘密鍵を使用して任意のサーバーで認証できるため、アプリケーションの分散化とサービス間通信のセキュリティ確保に役立ちます。また、サーバー間でユーザー コンテキストを伝達し、共有データベースを使用せずに一貫したユーザー状態を維持するのにも役立ちます。

モバイルアプリケーション

JWT は、モバイル アプリでのユーザー認証とセッションの管理に役立ちます。これは、接続が断続的なエリアで永続的な認証を必要とするアプリにとって特に重要です。JWT はデバイスに安全に保存され、ユーザー情報、権限、その他の情報を維持しながら、キャッシュされたリソースを使用して一定レベルのオフライン アクセスを可能にします。

APIとウェブアプリケーション

JWTは、ステートレスな認証と豊富なユーザー情報を可能にすることで、APIとWebアプリケーションの構築を簡素化します。サーバー側セッションなしでAPIアクセスを認証するのに役立ちます。トークンにユーザーの役割と権限を直接含めることで、認証を簡素化します。 Zoomアプリケーション認証.

「JWT は現代のアプリケーションにとって不可欠であり、プラットフォーム間で安全かつ効率的な通信を可能にします。」

結論

JWT は、認証とデータ交換を管理および保護するための軽量な方法を提供します。JWT は、特定のセキュリティ対策とスケーラブルなリソースを必要とする組織に適している可能性があります。

LogicMonitorの サポートセクション またはLMに参加 コミュニティのディスカッション JWT の実装とセキュリティのベスト プラクティスについて詳しくは、こちらをご覧ください。

JSON Web Tokenに関するよくある質問

マイクロサービス アーキテクチャにおける JWT の役割は何ですか?

JWT は、ステートレスな認証と承認を可能にすることで、マイクロサービス間の安全で効率的な通信を実現します。

JWT はモバイル アプリケーションのセキュリティをどのように強化できるのでしょうか?

JWT を使用すると、モバイル アプリは暗号化されたユーザー データと権限を伝送してユーザーを安全に認証できるため、サーバー側のセッション ストレージの必要性が減り、パフォーマンスが向上します。

JWT 実装の潜在的なセキュリティ上の落とし穴は何ですか?

よくある落とし穴としては、アルゴリズムの混乱、弱い秘密、安全でないクライアント側ストレージ、不適切なトークン検証などがあり、これらはすべて対処しないとセキュリティが侵害される可能性があります。

JWT は OAuth などの他のトークン タイプとどう違うのでしょうか?

JWT はトークン形式ですが、OAuth は認証フレームワークです。JWT は、OAuth 実装内でトークンとしてよく使用されます。

JWT の有効期限と更新を管理するためのベストプラクティスは何ですか?

トークン更新メカニズムを実装し、短期間のアクセス トークンや長期間の更新トークンなどの適切な有効期限を設定して新しいアクセス トークンを取得し、セキュリティを維持しながら継続的なアクセスを確保します。

よくあるご質問

機密データを JWT 内に保存してはいけないのはなぜですか?

署名されていても、JWTのペイロードとヘッダーはトークンを持つ人なら誰でもデコードできます。つまり、パスワードや個人情報といった機密情報が漏洩する可能性があるということです。機密データは常にサーバー上に保管してください。

JWT は Web アプリのパフォーマンスの向上にどのように役立ちますか?

JWTは、ユーザーの役割、権限、その他のデータをトークン自体に保持します。これにより、ユーザーの詳細を取得するためにサーバーを何度も参照する必要がなくなります。バックエンドの負荷を軽減し、アプリの応答時間を改善できます。

JWT の代わりにセッション トークンを使用する必要があるのはどのような場合ですか?

サーバー側で認証状態を制御したい場合は、セッショントークンを使用してください。これにより、認証の失効が容易になり、機密データの保護が強化されます。ステートレスなスケーリングを必要としないアプリにとっては、よりシンプルな選択肢となります。

JWT ヘッダーでアルゴリズムを定義できるようにする主なリスクは何ですか?

JWTヘッダーでアルゴリズムを制御できるようにすると、攻撃者がそれを「none」やその他の脆弱な方法に変更でき、トークンを偽造できる可能性があります。サーバーでは常に特定の安全なアルゴリズムを強制してください。

モバイル アプリケーションで JWT をより安全にするにはどうすればよいですか?

JWTは、強化されたCookieや暗号化されたストレージなどの安全な場所に保存してください。トークンの有効期限を短くすることで、トークンの有効期間を制限してください。リスクを軽減するために、トークンのスコープを常に制限し、サーバー側で検証してください。

JWS と JWE の違いは何ですか?

JWSは署名付きトークンであり、データの整合性は保護しますが、機密性は保護しません。JWEは暗号化されているため、整合性と機密性の両方を保護します。データのプライバシーを確​​保する必要がある場合は、JWEを使用してください。

有効期限が切れる前に JWT を取り消すことはできますか?

JWTはステートレスであるため、サーバー側のブラックリストやトークンレジストリなどの追加システムがなければ、失効は困難です。有効期限を短く設定し、リフレッシュトークンを使用する方法もあります。セキュリティを強化するには、サーバーデータベースでアクティブなトークンを追跡してください。

免責事項: このブログで述べられている見解は著者の見解であり、LogicMonitor またはその関連会社の見解を必ずしも反映するものではありません。

14日間フルアクセス LogicMonitor プラットフォーム