第2章 Jakarta Persistence を備えた Quarkus Security
Jakarta Persistence を使用してユーザーの ID を保存するようにアプリケーションを設定できます。
Quarkus は、JDBC アイデンティティープロバイダー に似た Jakarta Persistence アイデンティティープロバイダーを提供します。Jakarta Persistence は、ユーザー名とパスワードの認証情報を必要とする Basic および フォームベース の Quarkus セキュリティーメカニズムでの使用に適しています。
Jakarta Persistence IdentityProvider
は SecurityIdentity
インスタンスを作成します。ユーザー認証中、このインスタンスはアクセス要求の検証と承認に使用されます。
実際の例は、Basic 認証と Jakarta Persistence を使用したセキュリティーの開始チュートリアル を参照してください。
2.1. Jakarta Persistence エンティティー仕様
Quarkus セキュリティーは、ユーザー名、パスワード、ロールを収集し、それらを Jakarta Persistence データベースエンティティーに保存するために Jakarta Persistence を統合します。
次の Jakarta Persistence エンティティー仕様は、Quarkus がデータベースからこの情報を取得できるように、ユーザーの情報を Jakarta Persistence エンティティーに保存し、正しくマッピングする方法を示しています。
-
Panache を使用した簡略化された Hibernate ORM が使用されているかどうかに関係なく、
@UserDefinition
アノテーションは Jakarta Persistence エンティティーに存在する必要があります。 -
@Username
および@Password
フィールドタイプは常にString
です。 -
@Roles
フィールドは、String
、Collection<String>
、またはCollection<X>
のいずれかである必要があります。ここで、X
は、@RolesValue
としてアノテーションが付けられた単一のString
フィールドを持つエンティティークラスです。 -
各
String
ロール要素タイプは、コンマで区切られたロールのリストとして解析されます。
次の例は、user
エンティティーにアノテーションを追加してセキュリティー情報を保存する方法を示しています。
package org.acme.security.jpa; import jakarta.persistence.Entity; import jakarta.persistence.Table; import io.quarkus.hibernate.orm.panache.PanacheEntity; import io.quarkus.elytron.security.common.BcryptUtil; import io.quarkus.security.jpa.Password; import io.quarkus.security.jpa.Roles; import io.quarkus.security.jpa.UserDefinition; import io.quarkus.security.jpa.Username; @Entity @Table(name = "test_user") @UserDefinition 1 public class User extends PanacheEntity { @Username 2 public String username; @Password 3 public String password; @Roles 4 public String role; /** * Adds a new user to the database * @param username the username * @param password the unencrypted password (it is encrypted with bcrypt) * @param role the comma-separated roles */ public static void add(String username, String password, String role) { 5 User user = new User(); user.username = username; user.password = BcryptUtil.bcryptHash(password); user.role = role; user.persist(); } }
quarkus-security-jpa
エクステンションは、単一のエンティティーに @UserDefinition
アノテーションが付けられている場合にのみ初期化されます。
- 1
@UserDefinition
アノテーションは、通常の Hibernate ORM エンティティーまたは Panache エンティティーを含む Hibernate ORM のいずれかの単一のエンティティーに存在する必要があります。- 2
- ユーザー名に使用されるフィールドを示します。
- 3
- パスワードに使用されるフィールドを示します。デフォルトでは、
quarkus-security-jpa
は bcrypt ハッシュパスワードを使用しますが、代わりにプレーンテキストまたはカスタムパスワードを設定することもできます。 - 4
- これは、ターゲットプリンシパル表現属性に追加されたロールのコンマ区切りリストを示します。
- 5
- この方法を使用すると、適切な
bcrypt
ハッシュを使用してパスワードをハッシュ化し、ユーザーを追加できます。