Keycloak对接企业Federation认证并自定义映射应用角色可行性咨询
方案可行性确认
该方案完全可行,你需要的「Keycloak完成联邦认证后补充自有库角色」的逻辑也可以实现,Keycloak的原生扩展能力完全可以匹配你的需求。
两种主流实现路径,你可以根据团队的改造范围、运维成本选择
路径1:Keycloak侧扩展(推荐,权限统一输出,全栈无需额外查库)
- 开发自定义的
Identity Provider Mapper(身份提供者映射器)或者认证流程SPI,在企业Federation服务完成用户认证、Keycloak拿到用户的用户名/邮箱等基础信息后,触发自定义扩展逻辑 - 扩展逻辑中可以直连你的应用数据库(需为Keycloak配置仅拥有角色表读权限的低权限账号),或者调用你应用侧提供的只读角色查询接口,对应用户名/邮箱检索到权限角色列表
- 将检索到的角色映射为Keycloak的客户端角色或者领域角色,这些角色会自动写入返回的ID Token、Access Token中,你的Angular前端、Spring后端直接解析Token即可拿到完整的身份+权限信息,不需要额外做权限查询
路径2:Spring后端侧扩展(改造成本最低,无需修改Keycloak原有配置)
- Keycloak仅负责身份认证,返回的Token中仅携带Federation服务同步的基础用户信息
- 在Spring的权限校验流程中新增自定义逻辑:实现
Converter<Jwt, Collection<GrantedAuthority>>接口,拿到Keycloak解析后的用户名/邮箱后,查询自有应用数据库获取对应的角色列表,替换Keycloak默认解析的权限集合即可,后续的接口权限校验直接使用自有库的角色 - 如果前端也需要用到角色信息,可以在后端提供一个
/api/user/info接口,前端登录成功后调用该接口获取完整的角色信息存储到本地使用
技术栈适配注意事项
- Angular侧直接使用官方封装的
keycloak-angular库即可,不管是解析Token携带的角色还是调用后端接口拉取角色,都有成熟的开箱即用能力 - Spring侧引入
spring-security-oauth2-resource-server依赖做JWT Token解析,自定义的权限转换逻辑只需要注入到安全配置类中即可,代码改动量在100行以内
内容的提问来源于stack exchange,提问作者arkhadi
相关产品推荐
相关产品推荐

