カスタムプロトコルマッパーを使用してデータベース/外部ソースからの余分な主張を追加Keycloak

AlaricB:

私はこの質問への解決策を与えるこれら二つのポストを見てきましたが、彼らは私のような非Java開発者のためにそれを行う方法について詳細に十分な情報を提供していません。

データベース/外部ソースからの余分な主張を追加Keycloak

KeycloakでカスタムProtocolMapperを登録するには?

ここでは、より詳細で満たされた場合に他の人を助けることができる彼らのソリューションの要約です。

予想プロセス 第一のリンクから

  1. ユーザーがログインします
  2. 私はtransformAccessTokenメソッドを上書きどこカスタムプロトコルマッパーは、呼び出されます
  3. ここで私は、プロトコル・マッパーは、サービスとして、keycloakにしているクライアントにログインします。ここでは、それ以外の場合は無限再帰を入力してくださいよ、代わりにあなたのためのプロトコル・マッパーを構築しているものを、別のクライアントIDを使用することを忘れないでください。
  4. 私は、プロトコル・マッパーにアクセストークンを取得し、私が確保され、余分な主張を、つかむために自分のアプリケーションの残りのエンドポイントを呼び出します。
  5. エンドポイントによって返された情報を取得し、余分な主張として追加

それを達成するには、手順 2番目のリンクから

ProtocolMapperインターフェイスを実装して、ファイルを追加 「META-INF /サービス/ org.keycloak.protocol.ProtocolMapper」クラスへの参照を含むを。

この時点で、Keycloakは、新しい実装を認識します。そして、あなたは管理コンソールを経由してそれを設定することができるはずです。

トークン追加するには、次のインターフェイスをいくつかのデータを追加するには

org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper

インターフェイスによる方法を実装します

次に、ファイル「を追加META-INF /のjboss-展開する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リクエストごとに呼び出された/認証/王国/ testrealm /プロトコル/ openidの-接続/トークン

これを読んだ後、私はいくつかの質問があります:

  1. あなたは「ProtocolMapperを実装する」にはどうすればよいです
  2. どこにファイルが以前mentionned追加するには?(私のKeycloakのインストールフォルダ内の任意のMETA-INF /ディレクトリを参照してくださいすることはできません)
  3. どのように、どこであなたは「次のインタフェースを追加します」か
  4. どのようなカスタムtransformAccessTokenは()のように見えるん

お時間ありがとうございました。私はその答えをまとめ欠場なら、私に教えてください。

編集:

私は、誰かが私がKeycloak 3.4.3でデータベースから余分な主張を追加する方法についての手順をdetailled与えることができることを期待して恵みを始めている(非Javaのdevのための十分な詳細)

編集2 Aの方法は、トリックを行うが、詳細が不足している可能性があり、ここでdescibed。 カスタムアイデンティティプロバイダマッパーを作成Keycloak

Evil_skunk:

私はバイステップガイドこのステップは、あなたの役に立てば幸い

私は、この新しいバージョンがインストールされているので- -私はKeycloak 4.5.0を使用していますが、私は大きな違いを生むべきではありません。そして、私は実装OIDCProtocolMapper例では。

他の人のための簡単な概要のために - - ちょうどそれを要約すると、各ステップは、より詳細は後述記述されています

  1. あなたに基づいCustomProtocolMapperクラスを実装 AbstractOIDCProtocolMapper

  2. 名前のMETA-INF / servicesファイルをorg.keycloak.protocol.ProtocolMapper利用できるようにして、マッパーの名前が含まれている必要があります

  3. jboss-deployment-structure.xml クラスに建てkeycloakを使用して利用できるようにする必要性

  4. JARファイルが展開されて /opt/jboss/keycloak/standalone/deployments/

今より詳細わかりました:-)

カスタムマッパーを作成します。

私はMavenのあなたをアップロードpom.xmlPOM) -ちょうどあなたのIDEにインポートし、すべての依存関係を自動的にロードする必要があります。依存関係がちょうどありprovided 、後で実行時に直接keycloakから使用されます

関連のあるkeycloak.versionプロパティ-すべてkeycloak依存関係は、現在のバージョンでロードされています4.5.0.Final

今私は、議定書マッパークラスと呼ばれるカスタムを作成しましたCustomOIDCProtocolMapper「完全な」コードを検索ここ

これは、拡張する必要がありますAbstractOIDCProtocolMapperし、すべての抽象メソッドを実装する必要があります。たぶん、あなたは、SAMLプロトコルマッパーを持つようにしたい、それが(他の基底クラスですAbstractSAMLProtocolMapper

1つの関連する方法があるtransformAccessToken-ここで私はAccessTokenに追加請求を設定します。あなたはここにあなたのロジックを必要とするが、ええ-など、データベースに依存します;-)

servicesファイル

サービスファイルがある、重要なカスタム・インプリメンテーションを見つけることkeycloak用

でファイルを配置のfileName org.keycloak.protocol.ProtocolMapper内部\src\main\resources\META-INF\services\

keycloakは、このクラスは議定書マッパーとして利用可能であることを知っているので-このファイル内には、カスタムプロバイダの名前に書き込む
ファイルの内容がちょうど1行である私の例では、

com.stackoverflow.keycloak.custom.CustomOIDCProtocolMapper

展開構造XML

カスタムマッパーでは、keycloakからファイルを使用します。それらを使用するために、我々は、この依存関係についての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を

それは(うまくいけばなし)エラーメッセージを展開していたときにログファイルでは、表示されるはずです

今すぐあなたのマッパーを使用することができます-私の例では、私はkeycloak管理UIでマッパーを作成することができますし、選択しStackoverflow Custom Protocol Mapper、ドロップダウンから

ただ、情報として - これはkeycloakでサポートされて完全には公式ではありません - インタフェースは、それ以降のバージョンで可能な変更することができますので、

私はそれが理解できる願っています、あなたが正常に独自のマッパーを実装することができるようになります

EDIT:エクスポートされた日食のファイル構造のジッパー

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=136409&siteId=1