JWT の認証と承認を使用して Spring Boot を保護する方法
学習者の皆さん、こんにちは。ここでは、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 アプリケーションを保護できます。
以下は、 Spring Bootで JWT の認証と承認がどのように機能するかの概要です。
- ユーザー認証: ユーザーがシステムにログインすると、サーバーはユーザー名やパスワードなどのユーザーの資格情報を検証します。認証情報が正しい場合、サーバーはユーザーの JWT を生成し、それをクライアントに返します。
- JWT の作成: サーバーは、ユーザーの ID 情報とその他の必要なデータ (有効期限など) を JSON オブジェクトにエンコードして JWT を作成します。JSON オブジェクトは、秘密鍵または公開鍵と秘密鍵のペアを使用して署名されます。
- トークン ストレージ: クライアントは JWT をローカルに、通常は Cookie またはローカル ストレージに格納します。
- 認可: 後続のリクエストごとに、クライアントはリクエスト ヘッダーで JWT を送信します。サーバーは JWT の署名を検証し、その内容をデコードして、ユーザーの ID 情報やその他の詳細を抽出します。この情報に基づいて、サーバーはユーザーが特定のリソースにアクセスしたり、特定のアクションを実行したりすることを承認できます。
- トークンの検証: サーバーは、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 チュートリアル
最も一般的に使用される Hibernate アノテーション