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')}"
答案1
总结
配置文件只能通过 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进行操作