[英]Keycloak retrieve custom attributes to KeycloakPrincipal
在我的 rest 服務中,我可以在使用身份驗證后獲取主體信息
KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();
陳述。
Keycloak 主體不包含我需要的有關經過身份驗證的用戶的所有信息。 是否可以自定義我自己的主體類型? 在 keycloak-server-end 我開發了一個用戶聯合提供者。 我看到 UserModel 可以為我的用戶添加一組自定義屬性。
是否可以在該代碼中插入我的自定義主體?
是否可以從 keycloak 主體中檢索此屬性?
方法是什么?
要添加自定義屬性,您需要做三件事:
第一個在這里解釋得很好: 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' 屬性(這是有道理的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.