Single-Sign-On
graviteeio - management-rest-api oauth 角色映射
Gravitee 管理器可以配置 keycloak 身份驗證,如此處所述。
他們在文件中聲明,角色映射可以在他們的 gravitee.yml 配置中解決:
security: providers: - type: oidc roleMapping: - condition: "{#jsonPath(#profile, '$.job_id') != 'API_MANAGER'}" roles: - "PORTAL:PARTNER" - "MANAGEMENT:API_CONSUMER"
如何正確映射#profile jonPath?我嘗試使用 java 異常進行下一個 SpEl 配置:
"{#jsonPath(#profile, 'gravitee-admin' in '$.realm_access.roles')}"
TL;博士
配置文件只能被 SpEl 斷言為字元串,確保您在 keycloak 控制台上啟用組映射器:(客戶端範圍->創建“組”|映射器->添加內置->組添加選擇,客戶端->我的機密-客戶端->客戶端範圍-> 添加“組”)。
使用此配置,可以使用正則表達式完成匹配組:
{(#jsonPath(#profile, '$.groups') matches 'gravitee-admin' )}
請注意 uid 選項:“在每次使用者身份驗證期間計算組和角色映射。平台管理員仍然可以覆蓋映射,但這些映射將在下一次使用者身份驗證後刷新。” 我不太明白在 yaml 上在哪裡配置它。
在 3.5.2 版本中,使用者角色通過以下方式映射:
userRoles = computeUserRolesFromProfile(email, socialProvider.getRoleMappings(), userInfo); // 1)
使用電子郵件(如果在客戶端範圍內可用)、SpEl 函式和 /protocol/openid-connect/userinfo 端點返回的 json 呼叫函式:
private Set<RoleEntity> computeUserRolesFromProfile(String userId, List<RoleMappingEntity> mappings, String userInfo) {
#profile(userinfo)是唯一的上下文變數,通過SpEl操作