【发布时间】:2015-05-25 21:19:23
【问题描述】:
我正在尝试构建一个前端,它的某些功能需要与 Jenkins 后端进行通信。在我的前端,我希望用户能够使用 Jenkins 凭据(用户名和密码,使用 Kerberos)登录并将这些凭据传递到我的 Jenkins 服务器,我想在该服务器上检索可用于制作的令牌对 Jenkins 服务器的进一步 API 调用,而无需在每个请求中披露密码。
我知道为了能够进行 Jenkins API 调用,我需要使用 HTTP Basic auth,它会同时接受 user:token 和 user: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 网页并手动查找它,这对于想要传递身份验证的客户来说实际上没有意义。
【问题讨论】: