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

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')}"

答案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进行操作

相关内容