私の休息サービスでは、認証後にプリンシパル情報を取得できます
KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();
ステートメント。
Keycloakプリンシパルには、認証されたユーザーについて必要な情報がすべて含まれていません。自分のプリンシパルタイプをカスタマイズすることは可能ですか? keycloak-server-endで、ユーザーフェデレーションプロバイダーを開発しました。 UserModelを使用すると、ユーザーに一連のカスタム属性を追加できることがわかりました。
そのコードにカスタムプリンシパルを挿入することは可能ですか?
Keycloakプリンシパルからこの属性を取得することは可能ですか?
方法は?
カスタム属性を追加するには、次の3つのことを行う必要があります。
最初のものはここでかなり説明されています: https://www.keycloak.org/docs/latest/server_admin/index.html#user-attributes
クレームマッピングの追加:
アクセスクレーム:
final Principal userPrincipal = httpRequest.getUserPrincipal();
if (userPrincipal instanceof KeycloakPrincipal) {
KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) userPrincipal;
IDToken token = kp.getKeycloakSecurityContext().getIdToken();
Map<String, Object> otherClaims = token.getOtherClaims();
if (otherClaims.containsKey("YOUR_CLAIM_KEY")) {
yourClaim = String.valueOf(otherClaims.get("YOUR_CLAIM_KEY"));
}
} else {
throw new RuntimeException(...);
}
これがユースケースに役立ち、適合することを願っています。カスタムテーマで追加したカスタム属性にこれを使用しました。
[ユーザー]> [ルックアップ]を選択し、[ID]をクリック> [属性]タブに移動> [属性の追加]>例:電話>保存
クライアントを選択>クライアントIDをクリック>マッパータブに移動>マッパーを作成
カスタム属性を取得する
更新
グループレベルで「電話」属性を追加し、そのグループにユーザーを割り当てると、すべてのユーザーのグループレベルから「電話」属性が取得されます。
マッパーに戻り、「Aggregate attribute values = true」および「Multivalued = true」で「phone」を更新すると、グループおよびユーザーレベルの両方の属性を持つ「phone」がリストとして取得されます。 「Aggregate attribute values = false」または「Multivalued = false」を保持する場合、ユーザーからの「phone」属性がグループからの「phone」属性を上書きする値を1つだけ取得します(これは理にかなっています)