JWT の認証と承認を使用して Spring Boot を保護する方法

May 08 2023
学習者の皆さん、こんにちは。ここでは、Spring Boot3.0 と JWT を使用した Spring セキュリティの実装について学習します。

学習者の皆さん、こんにちは。ここでは、Spring Boot3.0 と JWT を使用した Spring セキュリティの実装について学習します。これは、Spring Security パート 1 の続きです。リンクでは、Spring セキュリティ ロール ベースの実装について説明しました。ここでは、JWT の実装方法について説明します。

JWT (JSON Web Tokens) は、2 者間のクレームを安全に表すための標準です。これは、2 つの当事者間で転送されるクレームを表すコンパクトで URL セーフな手段です。JWT は、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。

ヘッダーはアルゴリズムとトークンタイプで構成され、ペイロードは件名、名前、発行日で構成され、検証署名はエンコードされたヘッダー、ペイロード、および秘密鍵の組み合わせです。JWTトークンはこれら3つの組み合わせです

Spring Securityを JWT と統合して、JWT を生成、解析、および検証することで Web アプリケーションを保護できます。

JWTで認証・認可する流れ

以下は、 Spring Bootで JWT の認証と承認がどのように機能するかの概要です。

  1. ユーザー認証: ユーザーがシステムにログインすると、サーバーはユーザー名やパスワードなどのユーザーの資格情報を検証します。認証情報が正しい場合、サーバーはユーザーの JWT を生成し、それをクライアントに返します。
  2. JWT の作成: サーバーは、ユーザーの ID 情報とその他の必要なデータ (有効期限など) を JSON オブジェクトにエンコードして JWT を作成します。JSON オブジェクトは、秘密鍵または公開鍵と秘密鍵のペアを使用して署名されます。
  3. トークン ストレージ: クライアントは JWT をローカルに、通常は Cookie またはローカル ストレージに格納します。
  4. 認可: 後続のリクエストごとに、クライアントはリクエスト ヘッダーで JWT を送信します。サーバーは JWT の署名を検証し、その内容をデコードして、ユーザーの ID 情報やその他の詳細を抽出します。この情報に基づいて、サーバーはユーザーが特定のリソースにアクセスしたり、特定のアクションを実行したりすることを承認できます。
  5. トークンの検証: サーバーは、JWT が改ざんされておらず、有効期限が切れていないことを検証することもできます。トークンが無効な場合、サーバーはリクエストを拒否するか、ユーザーに再度ログインするようにリクエストできます。

ステップ 1: JWT 依存関係を追加する

ステップ 2: JWT を認証および生成するためのエンドポイントを作成する

トークンを認証して生成するためのエンドポイント

CreateToken メソッドでは、クレーム、サブジェクト、発行日、有効期限、署名を設定してトークンを作成しています。

ステップ 3: JWT を検証するフィルターを作成する

フィルター用のクラスを作成し、OncePerRequestFilter で拡張し、doFilterInternal メソッドをオーバーライドして、ヘッダーから認可トークンを呼び出します。トークンからユーザー名と有効期限を抽出して、トークンを検証します。このファイラーは、各 API 呼び出しの JWT トークンを検証するために使用されます。

ステップ 4: API 呼び出しを承認する構成を追加する

クラスを作成し、承認するメソッドを追加します。上記のコードでは、「/products/new」、「/products/authenticate」エンドポイントへのアクセス権がすべてのユーザーに与えられます。「/products/**」エンドポイントについては、有効な JWT を持つ認証済みユーザーのみがアクセスできます。アクセス。

実装のテスト

トークンの認証と生成

/認証エンドポイント

生成されたトークンをコピーして他の API 呼び出しに追加します。管理者の資格情報を使用して以下の API にアクセスしています。

ユーザーのみがアクセスできる管理者資格情報で API にアクセスしようとすると、403 Forbidden エラーが発生します。

注: この実装の動作する github コードが必要な場合は、私をフォローしてメール ID にコメントしてください。ソース コードのリンクをメールで送信します。

パート 1 : Spring Boot を使用した Spring Security ロールベースのアクセス

他の Spring Boot コンセプトのリンクを参照してください。

春の AOP チュートリアル

Spring Boot ロギングのチュートリアル

Spring Boot での一元化された構成

最も一般的に使用される Hibernate アノテーション

インタビューのための重要なマイクロサービス設計パターン