目标:
我想编写一个可以触发Jenkins作业的应用程序,它本身也可以针对Crowd服务器对用户进行身份验证。用户必须在一个单独的群组中才有权对Jenkins采取行动。
设定:
我正在使用Crowd2插件来针对Atlassian Crowd 2.1服务器对Jenkins用户进行身份验证。
我的想法:
现在,Jenkins有两种类型的远程执行:
Jenkins REST API(使用每用户令牌进行身份验证)
可以通过此调用使用“TOKEN”以这样的方式触发构建:
JENKINS_URL /工作/ JOBNAME /建?标记= TOKEN
Jenkins CLI(使用SSH密钥进行身份验证)
可以使用SSH私钥通过命令行工具触发构建,以对用户进行身份验证。
...要求我的应用程序知道API令牌。
我如何绕过API令牌限制?
在群组中存储API令牌?
Crowd2 Jenkins插件可以将Jenkins API令牌存储为人群属性(用户定义的属性,可以存储在人群用户目录中),是一种方式。即使我认为这可能是一个安全漏洞,因为该属性可能会从Crowd注册的所有其他应用程序中检索(这将使他们能够代表用户执行Jenkins工作)。
问:良好的做法和足够安全?在我看来,这还不够安全。
使用我的应用程序验证针对Jenkins的人群令牌?
我还尝试通过Crowd的API生成一个众包令牌,然后使用该令牌作为Cookie请求Jenkins REST API,希望Jenkins crowd2插件验证对Crowd传递的Crowd令牌。但它不起作用(当我在浏览器中使用人群令牌时,通过检查Firefox中的页面信息,它当然有效)。
我不确定这种方法(如果crowd2插件将检查传递的令牌)是否存在安全漏洞,以及众包令牌机制是否设计为以这种方式工作。我确信,它可能会对Jenkins的性能产生负面影响,因为每个API请求都必须检查令牌是否有效。
问:好的方法可能吗?
...要求我的应用程序知道在Jenkins注册的SSH私钥。
如果Jenkins支持添加SSH密钥,这将是一个很好的方法。我的应用程序可以生成SSH密钥对(随机)密码,并在Jenkins中代表用户自动存储公钥。
我认为这是正确的方法,即使它需要扩展Jenkins和可能的身份验证插件。
问:这种方法是否可行且足够安全?
问:还有其他方法吗?
我认为Jenkins应该实施OAuth端点以进行授权(如果是人群插件,则必须将授权委托给Crowd)或者完全将用户管理与其核心分离。我错了吗?
如有必要,请帮助我改进这个问题。我可以想象,我已经把两个问题混合在一起,并没有明确地说明目标。
注意:编辑此问题〜创建后1小时(请参阅我的第1条评论)。