我正在尝试构建一个前端,以便某些功能需要与Jenkins后端进行通信。在我的前端,我希望用户能够使用Jenkins凭证(用户名和密码,使用Kerberos)登录并将这些凭据传递给我的Jenkins服务器,我想要检索可用于制作的令牌进一步的API调用Jenkins服务器而不在每个请求中公开密码。
我知道为了能够进行Jenkins API调用,我需要使用HTTP Basic身份验证,它将同时接受user:token
和user:password
。我想避免在每个请求中发送密码。
我也知道我可以通过访问Jenkins网页找到我的令牌,使用我的密码登录,转到我的个人资料页面并在那里找到令牌。然后,我可以将其编码为功能强大的HTTP基本身份验证标头。这很好。
然而,我似乎无法找到一种体面的方式来使用密码进行编程验证,交换令牌的密码。我能够完成的最好的工作是使用https://<JENKINS_HOST>/me/configure
基本auth标头对user:password
的个人资料页面进行GET,然后解析生成的api令牌HTML,这显然不会感觉非常强大:
$ 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网页并手动查找,这对于想要传递身份验证的客户来说没有任何意义。
答案 0 :(得分:0)
Jenkins用户API令牌不会通过API公开。
我只需从Jenkins手动获取一次API令牌并对其进行硬编码(而不是硬编码您的密码),因为除非您明确重置,否则API令牌永远不会更改。
或者,您可以使用您的用户名和密码进行身份验证,并将结果值存储在Set-Cookie
标题中。在后续API调用中发送cookie值将按预期工作。