7.8. 外部ストレージの拡張
PropertyFileUserStorageProvider
例は実際に制限されています。プロパティーファイルに保存されているユーザーでログインできますが、それ以外のことはほぼできません。このプロバイダーがロードしたユーザーが、特定のアプリケーションに完全にアクセスできるように、特別なロールまたはグループマッピングが必要な場合は、これらのユーザーに別のロールマッピングを追加する方法はありません。また、電子メール、名、姓などの重要な属性を変更したり、追加したりすることはできません。
このような状況では、Red Hat Single Sign-On では、Red Hat Single Sign-On のデータベースに追加情報を保存して外部ストアを拡張できます。これは フェデレーション (連合型) ユーザーストレージと呼ばれ、org.keycloak.storage.federated.UserFederatedStorageProvider
内でカプセル化されます。
UserFederatedStorageProvider
UserFederatedStorageProvider
インスタンスは、KeycloakSession.userFederatedStorage()
メソッドで利用できます。これには、あらゆる種類のメソッドがあり、属性、グループおよびロールマッピング、さまざまな認証情報タイプ、および必要なアクションを保存できます。外部ストアのデータモデルが、Red Hat Single Sign-On 機能セットをすべてサポートできない場合は、このサービスで、その部分に対応できます。
Red Hat Single Sign-On にはヘルパークラス org.keycloak.storage.adapter.AbstractUserAdapterFederatedStorage
が同梱されています。このクラスは、ユーザー名の get/set を除くすべての UserModel
メソッドが、ユーザーがフェデレーションされたストレージに委譲します。外部ストレージ表現に委譲するのに必要なメソッドを上書きします。上書きする保護メソッドが少ないため、このクラスの javadoc を参照することを強くお勧めします。具体的には、グループメンバーシップおよびロールマッピング関連です。
7.8.1. 拡張例 リンクのコピーリンクがクリップボードにコピーされました!
PropertyFileUserStorageProvider
の例では、AbstractUserAdapterFederatedStorage
を使用するためにプロバイダーに簡単な変更が必要になります。
PropertyFileUserStorageProvider
代わりに、AbstractUserAdapterFederatedStorage
の匿名クラス実装を定義します。setUsername()
メソッドはプロパティーファイルを変更し、これを保存します。