Single-Sign-On

graviteeio - management-rest-api oauth 角色映射

  • February 1, 2021

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操作

引用自:https://serverfault.com/questions/1051843