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 控制台上启用组映射器:(客户端范围->创建“组”|映射器->添加内置->组添加选择,客户端->我的机密-客户端->客户端范围-> 添加“组”)。
使用此配置,可以使用正则表达式完成匹配组:
请注意 uid 选项:“在每次用户身份验证期间计算组和角色映射。平台管理员仍然可以覆盖映射,但这些映射将在下一次用户身份验证后刷新。” 我不太明白在 yaml 上在哪里配置它。
在 3.5.2 版本中,用户角色通过以下方式映射:
使用电子邮件(如果在客户端范围内可用)、SpEl 函数和 /protocol/openid-connect/userinfo 端点返回的 json 调用函数:
#profile(userinfo)是唯一的上下文变量,通过SpEl操作