Keycloak与Atlassian Crowd集成咨询:无需重构应用认证层
嘿,这个需求完全可行!不用折腾你的应用认证层,Keycloak本身就提供了好几种成熟的方式对接Atlassian Crowd,下面给你拆解几个最实用的方案,你可以根据自己的场景选:
方案1:让Keycloak委托认证给Crowd(最推荐,无同步延迟)
这是最省心的方案——用户登录时,Keycloak会直接把认证请求转发给Crowd,验证通过后再生成自己的令牌给应用。你的应用完全感知不到Crowd的存在,还是和之前一样对接Keycloak,零代码改动。
具体实现步骤:
- 先在Crowd里配置Keycloak应用
- 登录Crowd后台,创建一个新的应用(比如命名为
KeycloakIntegration) - 配置允许访问的Keycloak服务器IP,设置应用密钥(后续Keycloak要用到)
- 记录下Crowd的基础URL(比如
https://your-crowd-domain.com/crowd)
- 登录Crowd后台,创建一个新的应用(比如命名为
- 在Keycloak里添加Crowd用户联邦提供者
- 登录Keycloak Admin Console,进入你的Realm,找到左侧菜单的
User Federation - 点击
Add provider,选择Atlassian Crowd(Keycloak自带这个插件,不用额外安装) - 填入刚才在Crowd里配置的参数:Crowd URL、应用名称、应用密钥,点击
Test Connection确保连通
- 登录Keycloak Admin Console,进入你的Realm,找到左侧菜单的
- 调整同步与映射设置
- 可以设置
Sync Mode为Immediate(实时同步用户信息),或者Periodic(定时同步) - 开启
Import Roles和Import Groups,把Crowd里的角色/组同步到Keycloak,这样应用可以继续用Keycloak的权限逻辑
- 可以设置
- 验证效果
- 用Crowd里的用户账号登录你的应用,Keycloak会自动调用Crowd做认证,成功后返回令牌,流程和之前完全一致
方案2:定期同步Crowd用户/角色到Keycloak
如果你的Crowd用户变动不频繁,或者需要把用户数据存在Keycloak本地,可以用定时同步的方式:
- 方式一:用Keycloak自带的同步功能
在刚才的Atlassian Crowd用户联邦配置里,设置Periodic Sync的时间间隔(比如每天凌晨1点),Keycloak会自动拉取Crowd的用户、角色、组数据,同步到本地存储。用户登录时直接用Keycloak本地的数据,不用实时调用Crowd。 - 方式二:自定义脚本同步
如果你需要更灵活的过滤(比如只同步特定部门的用户),可以写脚本调用Crowd的REST API(/rest/usermanagement/1/user等接口)拉取数据,再调用Keycloak的Admin API写入数据。这种方式适合有定制化需求的场景。
注意:这种方式有数据延迟,Crowd里的用户信息更新后,要等同步完成才会在Keycloak里生效。
方案3:把Crowd作为Keycloak的身份提供者(Identity Provider)
这种方式和委托认证类似,但逻辑上是把Crowd当成一个外部登录源。用户登录时可以选择“用Crowd账号登录”,Keycloak会跳转到Crowd的登录页面,验证通过后Crowd返回用户信息,Keycloak生成令牌给应用。
实现步骤:
- 在Crowd里开启SAML或OAuth2支持(Crowd支持SAML 2.0)
- 在Keycloak里添加一个新的
Identity Provider,选择SAML类型,导入Crowd的SAML元数据 - 配置用户属性映射,把Crowd返回的用户信息(比如邮箱、用户名)映射到Keycloak的用户字段
- 可以设置强制用户使用Crowd登录,或者保留原有Keycloak登录方式
这种方式适合需要支持多种登录渠道的场景,但如果要全量切换到Crowd,方案1的委托认证会更透明。
额外注意点
- 不管用哪种方案,你的应用完全不需要重构认证层,还是和之前一样对接Keycloak的接口、验证JWT令牌
- 权限管理:可以在Keycloak里把Crowd的角色映射到应用的客户端角色,这样应用的权限逻辑不用改
- 网络连通:如果用方案1的实时委托,要确保Keycloak和Crowd之间的网络稳定,避免登录延迟
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

