第2章 Jakarta Persistence を備えた Quarkus Security


Jakarta Persistence を使用してユーザーの ID を保存するようにアプリケーションを設定できます。

Quarkus は、JDBC アイデンティティープロバイダー に似た Jakarta Persistence アイデンティティープロバイダーを提供します。Jakarta Persistence は、ユーザー名とパスワードの認証情報を必要とする Basic および フォームベース の Quarkus セキュリティーメカニズムでの使用に適しています。

Jakarta Persistence IdentityProviderSecurityIdentity インスタンスを作成します。ユーザー認証中、このインスタンスはアクセス要求の検証と承認に使用されます。

実際の例は、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 フィールドは、StringCollection<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 ハッシュを使用してパスワードをハッシュ化し、ユーザーを追加できます。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.