私はこの質問の解決策を与えるこれらの2つの投稿を見ましたが、これらは非Java私のような開発者:
Keycloakはデータベース/外部ソースから追加のクレームを追加します
KeycloakにカスタムProtocolMapperを登録する方法
以下は、詳細を入力すると他の人を助けることができる彼らのソリューションの要約です。
予想されるプロセス最初のリンクから
- ユーザーがログイン
- カスタムプロトコルマッパーが呼び出され、transformAccessTokenメソッドを上書きします
- ここでは、プロトコルマッパーが置かれているクライアントにサービスとしてログインします。ここでは、プロトコルマッパーを作成しているクライアントIDの代わりに別のクライアントIDを使用することを忘れないでください。それ以外の場合は、無限の再帰を入力します。
- アクセストークンをプロトコルマッパーに入れ、アプリケーションの残りのエンドポイントを呼び出して、保護されている追加のクレームを取得します。
- エンドポイントから返された情報を取得し、追加のクレームとして追加します
それを達成するための手順2番目のリンクから
ProtocolMapperインターフェースを実装し、クラスへの参照を含むファイル "META-INF/services/org.keycloak.protocol.ProtocolMapper"を追加します。
この時点で、Keycloakは新しい実装を認識します。また、管理コンソールから設定できるはずです。
トークンにデータを追加するには、次のインターフェースを追加します
org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper
そして、インターフェースに従ってメソッドを実装します
次に、「META-INF/jboss-deployment-structure.xml」ファイルを次の内容で追加します
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="org.keycloak.keycloak-services"/> </dependencies> </deployment> </jboss-deployment-structure>
これをすべて実行した後、カスタムのtransformAccessToken()メソッドが、URL http://:/ auth/realms/testrealm/protocol/openid-connect/tokenへのリクエストごとに呼び出されます。
これを読んだ後、いくつか質問があります。
いつもありがとうございました。私が彼らの答えの要約を逃した場合は知らせてください。
編集:
私は、誰かがKeycloak 3.4.3のデータベースから追加のクレームを追加する方法の詳細な手順を教えてくれることを期待して、賞金を始めています(Java dev以外の場合に十分な詳細
編集2ここで説明されているメソッドは、トリックを実行できますが、詳細がありません。 KeycloakはカスタムIDプロバイダーマッパーを作成します
このステップバイステップガイドがお役に立てば幸いです
私はKeycloak 4.5.0を使用しています-この新しいバージョンがインストールされているためですが、大きな違いはありません。そして、私はOIDCProtocolMapper
を例に実装しました。
それを要約するために-他の人のための簡単な概要のために-各ステップは後でより詳細に説明されています
AbstractOIDCProtocolMapper
に基づいてCustomProtocolMapperクラスを実装します
META-INF/services org.keycloak.protocol.ProtocolMapper
という名前のファイルが使用可能でなければならず、マッパーの名前が含まれています
jboss-deployment-structure.xml
組み込みクラスのキークロークを使用できるようにする必要があります
JARファイルは/opt/jboss/keycloak/standalone/deployments/
にデプロイされます
さて、今より多くの詳細:-)
私はあなたのmavenをアップロードしましたpom.xml
( pom )-IDEにインポートするだけで、すべての依存関係が自動的にロードされます。依存関係はprovided
、後で実行時に直接キークロークから使用されます
関連するのはkeycloak.version
プロパティです。現在、すべてのキークロークの依存関係がバージョン4.5.0.Final
に読み込まれています
次に、CustomOIDCProtocolMapper
というカスタムプロトコルマッパークラスを作成しました。 「完全な」コードを見つける ここ
AbstractOIDCProtocolMapper
を拡張し、すべての抽象メソッドを実装する必要があります。 SAMLプロトコルマッパーが必要な場合は、それが別の基本クラス(AbstractSAMLProtocolMapper
)になります。
関連するメソッドの1つはtransformAccessToken
です。ここでは、AccessTokenに追加のクレームを設定しています。ここにはロジックが必要ですが、そうです-データベースなどによって異なります;-)
Keycloakがカスタム実装を見つけるには、サービスファイルは重要です
fileNameorg.keycloak.protocol.ProtocolMapper
を使用してファイルを\src\main\resources\META-INF\services\
内に配置します
このファイル内で、カスタムプロバイダーの名前に書き込みます。そのため、キークロークは、このクラスがプロトコルマッパーとして利用可能であることを認識します。
私の例では、ファイルの内容は1行だけです
com.stackoverflow.keycloak.custom.CustomOIDCProtocolMapper
カスタムマッパーでは、キークロークのファイルを使用します。それらを使用するには、jbossにこの依存関係を通知する必要があります。したがって、jboss-deployment-structure.xml
内にファイル\src\main\resources\META-INF\
を作成します。コンテンツ:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.keycloak.keycloak-services" />
</dependencies>
</deployment>
</jboss-deployment-structure>
拡張機能のjarファイル(mvn clean package
)をビルドし、jar
を/opt/jboss/keycloak/standalone/deployments/
に配置して、キークロークを再起動します
ログファイルには、いつ展開されたか、そして(できれば)エラーメッセージが表示されるはずです。
これでマッパーを使用できます-この例では、keycloak admin uiでマッパーを作成し、ドロップダウンからStackoverflow Custom Protocol Mapper
を選択できます
情報と同じように-これはkeycloakで完全に公式にサポートされているわけではありません-それで、インターフェイスは後のバージョンで変更される可能性があります
私はそれが理解可能であり、あなた自身のマッパーをうまく実装できるようになることを願っています
編集:エクスポートされたEclipseファイル構造 Zip