第2章 Jakarta Persistence を使用した Quarkus Security
Jakarta Persistence を使用してユーザーの ID を保存するようにアプリケーションを設定できます。
Quarkus は、JDBC アイデンティティープロバイダー に似た Jakarta Persistence アイデンティティープロバイダーを提供します。Jakarta Persistence は、ユーザー名とパスワードの認証情報を必要とする Basic および フォームベース の Quarkus Security メカニズムでの使用に適しています。
Jakarta Persistence IdentityProvider
は SecurityIdentity
インスタンスを作成します。ユーザー認証中、このインスタンスはアクセス要求の検証と承認に使用されます。
実際の例は、Basic 認証と Jakarta Persistence を使用したセキュリティーのスタートガイド のチュートリアルを参照してください。
2.1. Jakarta Persistence エンティティー仕様 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus セキュリティーは、ユーザー名、パスワード、ロールを収集し、それらを Jakarta Persistence データベースエンティティーに保存するために Jakarta Persistence を統合します。
次の Jakarta Persistence エンティティー仕様は、Quarkus がデータベースからこの情報を取得できるように、ユーザーの情報を Jakarta Persistence エンティティーに保存し、正しくマッピングする方法を示しています。
-
Jakarta Persistence エンティティーには、
@UserDefinition
アノテーションが存在する必要があります。Panache による Hibernate ORM の簡略化 が使用されているかどうかは関係ありません。 -
@Username
および@Password
フィールドタイプは常にString
です。 -
@Roles
フィールドは、String
、Collection<String>
、またはCollection<X>
のいずれかである必要があります。ここで、X
は、@RolesValue
としてアノテーションが付けられた単一のString
フィールドを持つエンティティークラスです。 -
各
String
ロール要素タイプは、コンマで区切られたロールのリストとして解析されます。
次の例は、user
エンティティーにアノテーションを追加してセキュリティー情報を保存する方法を示しています。
quarkus-security-jpa
エクステンションは、単一のエンティティーに @UserDefinition
アノテーションが付けられている場合にのみ初期化されます。
- 1
- テーブル名。
user
として定義しないでください。これは、ほとんどのデータベースで制限されているキーワードです。 - 2
@UserDefinition
アノテーションは、単一のエンティティー (通常の Hibernate ORM エンティティーまたは Hibernate ORM with Panache エンティティー) に存在する必要があります。- 3
- ユーザー名に使用されるフィールドを示します。
- 4
- パスワードに使用されるフィールドを示します。デフォルトでは、
quarkus-security-jpa
は bcrypt ハッシュパスワードを使用しますが、代わりにプレーンテキストまたはカスタムパスワードを設定することもできます。 - 5
- これは、ターゲットプリンシパル表現属性に追加されたロールのコンマ区切りリストを示します。
- 6
- この方法を使用すると、適切な
bcrypt
ハッシュを使用してパスワードをハッシュ化し、ユーザーを追加できます。