2017-10-30 14 views
0

私はSpringブートでREST APIを構築しており、認証と認可のために私はKeycloakを使用しています。ユーザーはKeycloakによって管理されているため、アプリケーションデータベースにはユーザーのデータはありません。しかし、監査目的でユーザーデータが必要になるため、KeycloakのUserエンティティの属性をアプリケーションデータベースに保存したいと考えています。Keycloak - 領域のすべてのユーザーを取得してアプリケーションデータベースに保存する方法

アプリケーションデータベースのUserテーブルをkeycloak Userテーブルと同期させるにはどうすればよいでしょうか?

+0

あなたは一度にすべてのユーザーを必要としますか、ログインする際にこれを行うことはできますか? – stdunbar

+0

私は自分のログイン時にユーザーを追加できません。ユーザーにログインするためにKeycloakアクセストークンエンドポイントを使用しているため、私のAPIからログインイベントを傍受できません。 –

答えて

1

私はEventListenerSpiに基づいてKeycloakプラグインを実装します。 EventListenerProviderの実装では、ユーザー管理イベントのみに集中できます。すべてのユーザーデータとJSONオブジェクトを返す

public class SyncEventListener implements EventListenerProvider 
{ 
    private static final List<OperationType> SYNC_OPERATIONS = Arrays.asList(OperationType.CREATE, OperationType.UPDATE, OperationType.DELETE); 
    @Override 
    public void close() {} 

    @Override 
    public void onEvent(Event event) {} 

    @Override 
    public void onEvent(AdminEvent event, boolean includeRepresentation) 
    { 
    if ((event.getResourceType() == ResourceType.USER) && SYNC_OPERATIONS.contains(event.getOperationType())) 
    { 
     // Write user data to external message queue or database 
     externalStore.write(event.getOperationType(), event.getRepresentation()); 
    } 
    } 
} 

event.getRepresentation()。 もちろん、Keycloak管理コンソール(Events/Config/Admin Events Settings)で管理イベントを有効にする必要があります。 [イベントを保存]と[表現を含める]の両方をオンにします。

+0

お返事ありがとうございます。これを実装すると、イベントオブジェクトにこの名前のメソッドがないので、 'getResourceType()'のエラーが発生します。これをどうやって解決するのですか?また、このファイルクラスをREST APIの一部として使用できますか? –

+0

依存関係をキークローキングライブラリに定義する必要があります。 _compileグループ: 'org.keycloak'、名前: 'keycloak-server-spi'、バージョン: '3.3.0.Final'_ _compileグループ:' org.keycloak '、名前:' keycloak -server-spi-private '、バージョン:' 3.3.0.Final'_ – Boomer

関連する問題