Jenkins + Crowd2插件:从第三方应用程序执行API

时间:2012-10-28 12:35:43

标签: authentication jenkins authorization atlassian-crowd

目标:

我想编写一个可以触发Jenkins作业的应用程序,它本身也可以针对Crowd服务器对用户进行身份验证。用户必须在一个单独的群组中才有权对Jenkins采取行动。

设定:

我正在使用Crowd2插件来针对Atlassian Crowd 2.1服务器对Jenkins用户进行身份验证。

我的想法:

现在,Jenkins有两种类型的远程执行:

  • Jenkins REST API(使用每用户令牌进行身份验证)

    可以通过此调用使用“TOKEN”以这样的方式触发构建:
    JENKINS_URL /工作/ JOBNAME /建?标记= TOKEN

  • Jenkins CLI(使用SSH密钥进行身份验证)

    可以使用SSH私钥通过命令行工具触发构建,以对用户进行身份验证。

令牌方法(REST API)......

...要求我的应用程序知道API令牌。

我如何绕过API令牌限制?

在群组中存储API令牌?

Crowd2 Jenkins插件可以将Jenkins API令牌存储为人群属性(用户定义的属性,可以存储在人群用户目录中),是一种方式。即使我认为这可能是一个安全漏洞,因为该属性可能会从Crowd注册的所有其他应用程序中检索(这将使他们能够代表用户执行Jenkins工作)。

问:良好的做法和足够安全?在我看来,这还不够安全。

使用我的应用程序验证针对Jenkins的人群令牌?

我还尝试通过Crowd的API生成一个众包令牌,然后使用该令牌作为Cookie请求Jenkins REST API,希望Jenkins crowd2插件验证对Crowd传递的Crowd令牌。但它不起作用(当我在浏览器中使用人群令牌时,通过检查Firefox中的页面信息,它当然有效)。

我不确定这种方法(如果crowd2插件检查传递的令牌)是否存在安全漏洞,以及众包令牌机制是否设计为以这种方式工作。我确信,它可能会对Jenkins的性能产生负面影响,因为每个API请求都必须检查令牌是否有效。

问:好的方法可能吗?

CLI方法......

...要求我的应用程序知道在Jenkins注册的SSH私钥。

如果Jenkins支持添加SSH密钥,这将是一个很好的方法。我的应用程序可以生成SSH密钥对(随机)密码,并在Jenkins中代表用户自动存储公钥。

我认为这是正确的方法,即使它需要扩展Jenkins和可能的身份验证插件。

问:这种方法是否可行且足够安全?

问:还有其他方法吗?

我认为Jenkins应该实施OAuth端点以进行授权(如果是人群插件,则必须将授权委托给Crowd)或者完全将用户管理与其核心分离。我错了吗?

如有必要,请帮助我改进这个问题。我可以想象,我已经把两个问题混合在一起,并没有明确地说明目标。

注意:编辑此问题〜创建后1小时(请参阅我的第1条评论)。

0 个答案:

没有答案