【问题标题】:Authenticating Jenkins through JSON API using password使用密码通过 JSON API 对 Jenkins 进行身份验证
【发布时间】:2015-05-25 21:19:23
【问题描述】:

我正在尝试构建一个前端,它的某些功能需要与 Jenkins 后端进行通信。在我的前端,我希望用户能够使用 Jenkins 凭据(用户名和密码,使用 Kerberos)登录并将这些凭据传递到我的 Jenkins 服务器,我想在该服务器上检索可用于制作的令牌对 Jenkins 服务器的进一步 API 调用,而无需在每个请求中披露密码。

我知道为了能够进行 Jenkins API 调用,我需要使用 HTTP Basic auth,它会同时接受 user:tokenuser:password。我想避免在每个请求中发送密码。

我也知道我可以通过访问 Jenkins 网页找到我的令牌,使用我的密码登录,转到我的个人资料页面并在那里找到令牌。然后,我可以将其 base64 编码为一个正常运行的 HTTP 基本身份验证标头。这很好用。

但是,我似乎找不到合适的方式来使用密码以编程方式进行身份验证,将密码换成令牌。我能够做到的最好的事情是使用user:password基本身份验证标头对https://<JENKINS_HOST>/me/configure的所述个人资料页面进行GET,然后解析生成的HTML以获取api令牌,这显然感觉不是很健壮:

$ curl -v --silent https://<USER:PASS@JENKINS_HOST>/me/configure 2>1
    | sed -n 's/.*apiToken" value="\([^"]*\).*/\1/p'

<TOKEN>

我期望/希望找到的是用于身份验证的 API 端点,它将接受用户/密码并以 JSON 格式返回令牌。对于大多数 Jenkins 页面,只需将 /api/json 附加到 URL 即可找到等效的 JSON API,但是 /me/configure/api/json 只是向我抛出 404。有谁知道有没有这样的方法?到目前为止,我发现的所有文档都只是告诉您转到 /me/configure 网页并手动查找它,这对于想要传递身份验证的客户来说实际上没有意义。

【问题讨论】:

    标签: authentication jenkins


    【解决方案1】:

    Jenkins 用户 API 令牌不会通过 API 公开。

    我只会从 Jenkins 手动获取一次 API 令牌并对其进行硬编码(而不是硬编码您的密码),因为 API 令牌永远不会更改,除非您明确重置它。

    或者,您可以使用您的用户名和密码进行身份验证,并存储来自 Set-Cookie 标头的结果值。在后续 API 调用中发送 cookie 值将按预期工作。

    【讨论】:

    • 感谢您的回答。但是,如果我想代表访问我的服务的最终用户进行 Jenkins API 调用,那么手动获取令牌是没有意义的,因为需要为每个调用我的 API 的用户获取令牌。但是,另一种方法可能是代表单个专用“服务用户”而不是代表最终用户进行所有 Jenkins API 调用。
    猜你喜欢
    • 1970-01-01
    • 2016-01-02
    • 2016-09-16
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多