【发布时间】:2020-04-05 10:27:39
【问题描述】:
我正在使用 Curl 向 Jenkins API 发出请求——这是通过 https 完成的。 按照 Jenkins 的建议,使用反向代理在 IIS 中设置 Jenkins。 Jenkins 站点具有 Windows 身份验证。 我需要在请求中传递一个 Crumb - 403 错误。
但是,当我请求 Crumb 时,它说我需要提供 Crumb? 我需要它通过命令提示符/批处理文件工作。
谢谢
【问题讨论】:
我正在使用 Curl 向 Jenkins API 发出请求——这是通过 https 完成的。 按照 Jenkins 的建议,使用反向代理在 IIS 中设置 Jenkins。 Jenkins 站点具有 Windows 身份验证。 我需要在请求中传递一个 Crumb - 403 错误。
但是,当我请求 Crumb 时,它说我需要提供 Crumb? 我需要它通过命令提示符/批处理文件工作。
谢谢
【问题讨论】:
为了能够对 Jenkins 进行 API 调用,您需要在 Jenkins 中为给定用户生成一个令牌。例如,让我们用用户Foo 来做。您需要使用 Foo 用户登录,然后在 Web UI 中登录:Foo (right upper corner) > Configure > API token > Add new token。
当您将令牌保存在某处后,您可以使用以下命令检索面包屑:
curl --user Foo:<token> 'https://www.mysuperduperjenkins.com/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
这基本上是从 Jenkins 获取包含面包屑的 XML 并获取面包屑所在的特定元素。命令的结果应该类似于:
Jenkins-Crumb:<someLongLongLongToken>
您可以将面包屑保存到变量中,例如将其命名为breadcrumb,然后:
curl -u 'Foo:<token>' -X POST --data '<parameters>' -H '$breadcrumb' www.mysuperduperjenkins.com
在这个 curl 中,我们使用面包屑作为标题,在上一步中获得。如果面包屑有效,您应该能够执行请求而不会出现 403/401 错误。
【讨论】:
curl --proxy-ntlm --proxy-user <user>:<pass> --proxy <url>:<port> --user <user>:<token> 'https://<url>/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 工作?