ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Jira与Confluence集成Crowd实现SSO单点登录实战指南

Jira与Confluence集成Crowd实现SSO单点登录实战指南 1. 账号越来越多先想清楚为什么要统一1.1 三套系统三本账的日常先讲一个我反复接触到的场景。团队里Jira管项目、Confluence管文档可能还挂着一套内部Wiki或者历史遗留的禅道。每个系统单独注册账号密码策略还不一样刚开始十来个人无所谓团队一到三四十人就开始乱了新员工入职要挨个系统建号离职要挨个系统删号经常漏掉某一个员工自己也记不住密码隔三差五就有人找你重置密码。更要命的是权限没法统一管控。离职的人如果Confluence账号漏删理论上还能翻公司历史文档Jira里失效的账号会在经办人、报告人字段里留下一个永远对不上人的记录。你会发现研发协作工具越多账号治理成本越高。这也是为什么在我的项目规划里会把账号体系放到跟监控、备份一样高的优先级。1.2 Jira、Confluence和Crowd各管什么先说背景方便还没接触过Atlassian体系的朋友理解。Jira是项目管理和问题跟踪工具Confluence是团队知识库和协作文档工具这俩是Atlassian家的黄金搭档。很多人会在Jira和禅道之间纠结禅道把需求、任务、缺陷、测试用例揉在一个系统里开箱即用国内团队上手快Jira的强项则是工作流可定制、插件生态丰富并且它不只有这两个产品还配了一套完整的企业级周边Crowd就是其中之一。Crowd是Atlassian的身份管理服务器你可以把它理解成账号总闸门用户、组这些权威数据放在这里或者对接公司现有的AD/LDAPJira、Confluence以及第三方应用都来这个总闸门验证身份。集成之后用户只维护一套账号密码登录过Jira再开Confluence不用二次登录这就是标题里说的SSO单点登录。1.3 适用边界要心里有数这里说的SSO是Crowd传统的Cookie-SSO方案适用场景是自托管的Jira Server/Data Center加Confluence Server/Data Center。如果你的Jira和Confluence已经迁到了Atlassian Cloud走的是Atlassian自家账号体系跟Crowd就是两条路了。另外如果你的公司已经有成熟的AD域控想的是“所有系统都统一到AD”那Crowd的角色就是中间层——它不对接你的业务系统而是把AD的用户组同步过来再分发给Jira和Confluence。这套组合非常常见后面我会专门讲。2. Crowd部署与目录设计2.1 安装方式和数据库准备Crowd的安装不算复杂但有几个决策点容易影响后面使用。首先是部署位置我的建议是单独一台虚拟机2核4G起步小团队够用别跟Jira、Confluence挤一台机器后面做备份、做升级、排查问题都清净得多。安装包方面Windows环境直接跑官方安装器Linux环境建议下tar.gz包解压设置两个环境变量export CROWD_INSTALL/opt/atlassian/crowd export CROWD_HOME/opt/atlassian/crowd-homeCROWD_INSTALL是程序目录CROWD_HOME是数据目录用户、组、应用的配置都存在后者升级时只覆盖前者数据不受影响。然后执行bin/start-crowd.sh默认端口8095上下文路径是/crowd浏览器访问http://crowd服务器IP:8095/crowd进入安装向导。数据库这块有个大坑向导里默认的嵌入式H2数据库只适合试用生产环境必须换MySQL或PostgreSQL。H2的数据文件出问题后很难恢复我见过不止一个团队拿H2跑了好几个月最后数据膨胀到起不来。用MySQL的话提前建库建账号CREATE DATABASE crowd CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER crowd% IDENTIFIED BY 你的强密码; GRANT ALL PRIVILEGES ON crowd.* TO crowd%; FLUSH PRIVILEGES;注意MySQL 8的驱动要单独下载mysql-connector-j的jar包放进Crowd安装目录的lib下连接串里加上useSSLfalse和characterEncodingutf8mb4不然中文用户显示、emoji之类的会出问题。2.2 目录决定账号来源Crowd里“目录”就是用户和组的集合可以理解成账号的数据源。你可以在Crowd里建内部目录也可以对接外部的LDAP/AD还可以同时挂多个目录并设置优先级。内部目录适合还没有统一账号体系的团队Crowd自带的用户管理界面可以直接建用户、建组、设密码策略对接AD适合已经有域控的公司Crowd会把AD里的用户和组拉进来统一管理。两种目录可以并存比如把AD设为最高优先级内部目录兜底这样既能用企业账号又能给外部协作人员开临时账号。目录设计上要提前想清楚几件事用户的唯一标识用什么一般是用户名组名命名规则是什么密码策略由谁主导。别等到Jira和Confluence都接进来了再改目录结构到时候用户和组的映射关系全要重新理一遍非常折腾。2.3 注册应用给Jira和Confluence发“通行证”Crowd里“应用”就是允许接入的系统。在Crowd管理后台的Applications里添加应用填应用名我用的是jira和confluence后面配置客户端时要严格一致、应用密码相当于共享密钥然后填应用的访问地址比如http://jira.example.com:8080。这里最关键的是Remote Addresses远程IP白名单。默认只允许127.0.0.1如果Jira跑在另一台机器你必须把它的IP加进来否则Jira连Crowd时会被直接拒绝报错“Failed to find application”。很多第一次做集成的人都在这一步卡住。建议按内网网段填比如192.168.10.0/24不要图省事填0.0.0.0/0后面安全加固时你会感谢自己当初没偷懒。注册完应用要给应用分配可用的目录。这一步决定了Jira登录时去哪个目录验证。如果Crowd里挂了AD和内部目录两个源就把这两个目录都勾上Crowd会按照目录优先级依次验证。3. Jira和Confluence接入Crowd目录3.1 Jira侧接入与验证Jira侧的操作路径是管理员账户登录进入齿轮图标下的系统设置找到“用户目录”老版本叫“JIRA用户服务器”不同版本菜单位置有差异认准用户目录这个入口就没错选择添加目录类型选Atlassian Crowd。填写的关键字段就三个服务器URL填http://crowd服务器IP:8095/crowd/应用名和密码填注册应用时设置的jira和对应密码。填完先点测试看到连接成功再保存。保存后Jira会同步Crowd目录里的用户和组这一步可能需要等一两分钟取决于用户规模。验证方式很简单先直接在Crowd里新建一个测试用户比如zhangsan然后回到Jira的管理后台在用户管理里搜索这个用户能搜到就说明目录同步正常。再用这个测试用户登录Jira能登录成功说明认证链路通了。这里提醒一句测试用户记得加进Jira的管理员组里不然后面调整目录顺序时容易把自己锁在外面这点我后面还会专门讲。3.2 Confluence侧接入与验证Confluence的接入方式几乎一样进入管理员后台找到“用户目录”添加目录类型选Atlassian Crowd填Confluence注册在Crowd里的应用名和密码服务器URL填同一个Crowd地址测试连接后保存。Confluence接入后同样会同步用户和组验证方式也是在Confluence用户管理里搜索Crowd里的测试用户再用该用户登录。Confluence和Jira两边都接好后你会发现一个好处在任意一边改密码另一边也跟着生效因为密码都走Crowd验证账号数据是同一份。3.3 组映射与权限交接接入完成后真正的重头戏是把权限组对上号。Jira默认的组是jira-administrators和jira-software-usersConfluence是confluence-administrators和confluence-users。如果Crowd里没有这些组Jira和Confluence的管理员权限就落不到从Crowd同步来的用户头上。我的习惯是在Crowd里预先建好一套统一的组再建好映射关系系统管理员组普通用户组Jirajira-administratorsjira-software-usersConfluenceconfluence-administratorsconfluence-users然后在Crowd里把现有管理员账号加入对应的管理员组确保Jira和Confluence的管理员都能从Crowd解析到权限再去调整Jira/Confluence的用户目录顺序把Crowd目录放到最前面。目录顺序非常关键它决定认证时的优先级。我的建议是Crowd目录置顶本机内置目录保留在下面做兜底但绝不能让内置目录跑到Crowd前面否则哪怕Crowd里禁用了一个用户只要内置目录里还有同名账号他仍然能登录。4. 从账号互通到一次登录SSO配置过程4.1 Cookie-SSO的原理目录接入解决的是“账号统一”SSO解决的是“免登录”。Crowd的SSO不是重定向到统一登录页那种模式而是基于Cookie的令牌认证。用户访问Jira并输入账号密码后Jira通过后台API把凭据发给Crowd验证Crowd验证通过后返回一个令牌Jira在自己的响应里把这个令牌写进CookieCookie域设置为SSO配置里指定的域名。用户再访问Confluence时浏览器自动带上这个CookieConfluence看到后去Crowd查询这个令牌是否有效有效就直接登录。所以这套SSO能生效的前提是Jira和Confluence在同一个父域名下。比如jira.example.com和wiki.example.comCookie域设为.example.com两个系统才能共享Cookie。如果一台是192.168.1.10:8080另一台是192.168.1.11:8090没有共同域名Cookie就共享不了SSO也就无从谈起。4.2 Crowd服务端开启SSO在Crowd管理后台找到SSO选项编辑配置启用SSO勾上。Cookie域Domain填.example.com这种带前导点的父域名如果是纯内网IP访问可以不填但那样只能在同一台机器上的应用间生效。Cookie名称保持默认的crowd.token_key。Cookie安全如果Jira和Confluence都是HTTP访问必须关掉启用HTTPS后才建议打开。这里要强调一下域名匹配的逻辑Cookie域是整个SSO的地基。我曾经在测试环境用127.0.0.1:8080访问Jira、127.0.0.1:8090访问ConfluenceSSO怎么都配不通因为两个端口不共享Cookie。后来把本地域名解析改成jira.local和wiki.local一个Cookie域.local解决所有问题。生产环境也同理务必先规划好对外访问域名。4.3 客户端切换SSO认证器Crowd服务端配好后Jira和Confluence还要把认证逻辑切到Crowd的SSO认证器。这一步不同版本差异较大新版本在用户目录的Crowd配置里可能直接有SSO相关勾选项老版本则必须改配置文件。通用的做法是修改Jira和Confluence安装目录下的seraph-config.xml。Jira的路径是JIRA_INSTALL/atlassian-jira/WEB-INF/classes/seraph-config.xmlConfluence的路径是CONFLUENCE_INSTALL/confluence/WEB-INF/classes/seraph-config.xml。把默认的authenticator替换为authenticator classcom.atlassian.crowd.integration.seraph.v5.SSOSeraphAuthenticator/修改前先备份原文件修改后重启对应服务。如果重启后发现日志里提示找不到应用配置就在同一个classes目录下补一个crowd.propertiescrowd.server.urlhttp://crowd.example.com:8095/crowd/services/ application.namejira application.password你的应用密码 sso.cookie.domain.example.com sso.cookie.namecrowd.token_key注意application.name和application.password必须和Crowd注册应用时完全一致差一个字符都连不上。验证SSO是否生效最干净的办法是无痕窗口先访问Confluence确认没登录再访问Jira用Crowd里的账号登录登录成功后新开一个标签页直接访问Confluence如果不再弹登录页说明SSO已经打通。5. 踩坑记录与问题排查5.1 连接失败Remote IP白名单接入过程中最常见的问题就是Jira或Confluence报无法连接Crowd日志里出现“Failed to find application”或者“Connection refused”。九成以上是Remote IP白名单没配好。Crowd默认只信任127.0.0.1Jira和Confluence在其他机器时它们的请求会被判定为未知应用。处理方式很简单回到Crowd管理后台编辑对应应用把Jira、Confluence所在服务器的内网IP或网段加进Remote Addresses保存后重试。排查这类问题建议按顺序捋先确认网络通不通在应用服务器上curl http://crowd:8095/crowd/看能否访问再确认应用名密码最后确认白名单。网络、凭据、白名单这三层90%的连接问题都出在这三处。5.2 登录回环与Confluence验证码不显示SSO配好之后可能出现登录回环访问Jira被踢回登录页登录成功又回到登录页反复横跳。这种情况基本是Cookie域不一致导致的——Jira写入Cookie的域和Confluence读取的域对不上或者Cookie的Secure标记打开但站点是HTTP浏览器拒绝写入。另一个常见现象是Confluence登录页验证码不显示。Confluence的验证码依赖外部校验服务如果服务器无法访问外部网络验证码图片就加载不出来用户卡在登录页。处理思路是如果你的登录已经全部走SSO普通用户根本不经过Confluence本地登录页这个问题自然就不重要了如果仍需本地登录建议在Confluence安全设置里关闭验证码或者调整验证码的触发策略只对多次失败的来源启用。5.3 组不同步与缓存用户能登录但权限不对比如用户明明在Crowd里加了confluence-administrators组Confluence管理后台却看不到他是管理员。先别急着重建目录这很可能是缓存问题。Crowd自身有缓存Jira和Confluence也会缓存目录数据。遇到组变更不生效先等一两分钟还不行就重启Jira/Confluence或者去两个系统的缓存管理界面清除用户目录缓存。另外要检查Crowd里应用分配目录时是否勾选了该目录如果Jira应用只分配了内部目录而用户建在AD目录里Jira自然搜不到这个用户。还有一点容易忽略Confluence的“嵌套组”选项。AD里的组套组很常见如果Confluence的Crowd目录没有打开嵌套组支持子组里的用户就不会被解析到权限。5.4 管理员被锁死后的自救这是整个集成过程中最吓人的坑把Crowd目录设为唯一认证目录后突然发现自己原本的admin账号登录不了Jira了而Crowd里还没建这个管理员等于被锁死在门外。避免方法我在前面强调过在调整目录优先级之前先在Crowd里建好同名管理员组把管理员账号加进去确认能用Crowd里的这个账号登录Jira再动目录顺序。万一真被锁了还有一个后路在Jira/Confluence的用户目录设置里把内置目录临时调回第一位用内置账号登进去再把Crowd目录的管理员组补上最后把优先级调回来。整个过程需要细心但能救回管理后台。5.5 安全加固清单Crowd这套体系集中了所有系统的认证入口一旦失守等于把Jira、Confluence的钥匙全交出去。上线前务必做一遍安全加固Crowd和Jira、Confluence的通信走HTTPS并把SSO Cookie的Secure标记打开。Remote IP白名单只放应用服务器网段别用0.0.0.0/0。Crowd管理后台不要直接暴露公网最好只允许内网或通过跳板机访问。应用密码和管理员密码用独立强密码不要复用。关注Atlassian官方安全公告Crowd这类SSO组件历史上确实出过安全漏洞及时升级到修复版本不要去网上找所谓的复现脚本折腾那不是管理员该做的事。定期备份Crowd的数据目录和数据库Crowd挂了所有系统都会跟着登录失败备份策略必须覆盖到Crowd本身。这套集成做完之后我个人的体会是后续运维省心非常多。新员工入职在Crowd里建一个账号Jira和Confluence就都有了离职一键禁用两个系统同时失效再也不用半夜被人叫起来重置密码。最后分享一个我自己的土习惯每次给Crowd、Jira或Confluence升级版本之前先把应用注册信息、目录配置和crowd.home目录完整备份一份升级完第一时间验证一遍SSO登录链路。这套体系本身不难难的是把账号、目录、权限、域名这些细节一次想清楚按上面的步骤一步步来你也能少走很多弯路。
返回列表