1.5. ユーザーエンティティーの定義
次のアノテーションを user エンティティーに追加して、セキュリティー情報をモデルに保存する方法を指定します。
src/main/java/org/acme/security/jpa/User.java
quarkus-security-jpa エクステンションは、単一のエンティティーに @UserDefinition アノテーションが付けられている場合にのみ初期化されます。
- 1
@UserDefinitionアノテーションは、単一のエンティティー (通常の Hibernate ORM エンティティーまたは Hibernate ORM with Panache エンティティー) に存在する必要があります。- 2
- ユーザー名に使用されるフィールドを示します。
- 3
- パスワードに使用されるフィールドを示します。デフォルトでは、bcrypt でハッシュされたパスワードを使用します。プレーンテキストまたはカスタムパスワードを使用するように設定できます。
- 4
- ターゲットプリンシパル表現属性に追加されたロールのコンマ区切りリストを示します。
- 5
- 適切にハッシュ化されたパスワードを持つユーザーを追加するためのヘルパーメソッドを指定します。
BcryptUtil.bcryptHash()メソッド:- パスワードごとに、ランダムなソルトを自動的に生成します。
- bcrypt を使用して、10 回のイテレーションでパスワードをハッシュ化します (デフォルト)。
- ハッシュはモジュラー暗号形式 (MCF) で返され、アルゴリズム識別子、コストパラメーター、ソルト、ハッシュが含まれます。
ヒント
パスワードハッシュ化のベストプラクティス:
-
事前にハッシュ化せず、必ずプレーンテキストのパスワードを
BcryptUtil.bcryptHash()に渡します。 - bcrypt ハッシュにはソルトが含まれているため、別途ソルトを保存する必要はありません。
-
認証中にパスワードを検証するために、フレームワークは
BcryptUtil.matches(plainPassword, hashedPassword)を自動的に使用します。 -
カスタムイテレーションの場合は
BcryptUtil.bcryptHash(password, iterationCount)を使用します。イテレーションの回数が多い (12 - 14) ほどセキュリティーは強化されますが、パフォーマンスは低下します。
- パスワードとロールの設定の詳細は、アプリケーションの設定 を参照してください。
- パスワードのハッシュ化と使用可能なオプションの詳細は、パスワードの保存とハッシュ化 を参照してください。
注記
Panache と PostgreSQL JDBC ドライバーを必ずセットアップしてください。詳細は、Panache を使用した Hibernate ORM のセットアップと設定 を参照してください。