概要
目前很多公司都是通过jenkins做工作流集成的,本身提供了多种用户管理授权的机制,而飞书是目前企业中最流行的员工管理工具,所以我们很容易想到利用飞书的账号体系来替代jenkins本身的用户。而到目前为止,在网上搜索这一需求,还无法找到有效的解决方案(也许之后会有更多更好的方案),本文可以做为一个集成的参考,看是否能帮助大家。
集成平台说明
集成飞书单点登录,依赖一个叫 “飞书集成平台” 的系统,很多开发者可能只听说过 “飞书开放平台”,他们并不是一个系统,因此需要企业管理员开通这个飞书集成平台的权限(勾选“身份集成”的使用权限)。
另外一个前提,不同付费版本对接口有不同限制,请看下表:
集成方案1-SAML
通过saml集成,官方有专门的模板,按照官方文档,傻瓜式配置一下就能用了,非常简单。
文档地址:飞书集成平台 - 先进连接方式,提升集成效率标准、高效的系统集成能力,为企业构建强大的集成解决方案,实现企业的全域数据互通https://anycross.feishu.cn/documentation/sso/third-party/jenkinshttps://anycross.feishu.cn/documentation/sso/third-party/jenkinshttps://anycross.feishu.cn/documentation/sso/third-party/jenkins 当然这个方式也有一些小问题(看后续平台是否会优化),比如如果有多个jenkins服务器,需要每个建一个应用,关联字段当前只支持邮箱等等。如果不CARE这些问题或后续平台完善了模板相关功能的话,还是推荐使用这个方案的。
集成方案2-OIDC
OIDC(OpenID Connect)是一个基于 OAuth 2.0 协议的身份层规范,旨在使应用程序能够进行端到端用户身份验证。官方提供的文档是基于OIDC的通用配置方案,具体和Jenkins的集,需要注意一些细节,如下所述。
1. 创建应用-选择自建应用
2. 填写基本信息
登录回调地址填写jenkins地址(可添加多个),需要注意这里是https !!
https://192.168.xxx.xxx:8443/securityRealm/finishLogin
如果需要邮箱信息,在scope中勾选email
换取token的方式选择 client_secret_basic
3. 完善授权范围
4. 点击启动应用
下面是jenkins的相关配置
1. 改造jenkins为https
因为OIDC协议要求应用必须是基于HTTPS的服务,对于内网ip访问的机器需要进行一个简单的改造 (如果本身jenkins就是外网域名的https服务,可跳过这一步)
以MAC电脑为例:
首先生成一个签名密钥,记住设定的密码
keytool -genkeypair -alias jenkins -keyalg RSA -keysize 2048 -validity 365 -keystore /opt/homebrew/etc/jenkins/jenkins.jks
编辑JENKINS启动配置
vi /opt/homebrew/Cellar/jenkins/2.xxx/homebrew.mxcl.jenkins.plist
修改如下内容
找到以下部分:
<string>/opt/homebrew/opt/jenkins/bin/jenkins</string>
<string>--httpListenAddress=0.0.0.0</string>
<string>--httpPort=8080</string>
修改为以下内容以启用 HTTPS:
<string>/opt/homebrew/opt/jenkins/bin/jenkins</string>
<string>--httpListenAddress=0.0.0.0</string>
<string>--httpPort=-1</string> <!-- 禁用 HTTP -->
<string>--httpsPort=8443</string>
<string>--httpsKeyStore=/opt/homebrew/etc/jenkins/jenkins.jks</string>
<string>--httpsKeyStorePassword=xxxxx</string>
外网域名访问的jenkins可使用正式的证书
<string>--httpsCertificate=/path/to/jenkins.crt</string> <!-- 指定证书路径 -->
<string>--httpsPrivateKey=/path/to/jenkins.key</string> <!-- 指定私钥路径 -->
重启jenkins服务
brew services restart jenkins
然后jenkins就可以通过 https://192.168.XX.XX:8443 访问了,如果浏览器报不安全链接,直接忽略(高级>继续访问)即可。
2. 安装jenkins插件
在插件管理中搜索 OpenId Connect Authentication,并安装
3. 全局安全配置
安全域选为 Openid 连线登入 。
Client id, Client secret, well-know endpoint 在飞书sso应用配置界面可以找到,直接复制粘贴过来。
Override scope 填写也和应用配置界面勾选的保持一致,用空格分隔。
User name field name为映射的Jenkins user id,如果飞书上每个用户都有email,也可以设为email,否则直接用name就行,支持中文的id。
安全设置要勾上PKCE。
4. 配置权限
请一定注意,在重登前先设置好新用户体系的权限,否则重登后就进不了系统管理了
添加用户权限时使用的用户名,就是 User name field name 配置的字段值
个人推荐使用Role-based 插件进行用户组授权管理,具体配置的细节和本文主题无关,就不再赘述了。
小结
总的来说,飞书集成平台还是很好用的,目前也没有发现什么坑点,本文也仅是为没什么做过sso集成配置的同学一个参考。