jenkins - 请求中没有包含有效的面包屑 - Jenkins 403
问题描述
我的 Crumb.sh 文件是:
crumb=$(curl -u "jenkins:pwd" -s 'http://yuvi_jenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
echo $crumb
curl -u "jenkins:pwd" -H "$crumb" -X POST http://yuvi_jenkins:8080/job/ansible-project/build?delay=0sec
我得到的输出是:
Jenkins-Crumb:d3950e9f61bc9dd88fba532c17dba1ce220be11b92d78e720464afd38021a3fb
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 403 No valid crumb was included in the request</title>
</head>
<body><h2>HTTP ERROR 403</h2>
<p>Problem accessing /job/ansible-project/build. Reason:
<pre> No valid crumb was included in the request</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>
</body>
</html>
我尝试过的解决方案:
1) Probably you are accessing jenkins by proxy server, please do following
Go to "Global Security Settings"
Check "Enables the Compatibilty Mode for proxies".
Restart
2) To resolve this issue I unchecked "Prevent Cross Site Request Forgery exploits" in jenkins.com/configureSecurity section.
我已经尝试了上述解决方案,但仍然遇到同样的错误。
解决方案
根据此处的 Jenkins 文档,碎屑现在仅对创建它们的 Web 会话有效。为了解决这个问题,您可以在发出 crumb 请求时存储 cookie,然后在进行后续 API 调用时使用这些存储的 cookie。所以你的脚本会变成:
crumb=$(curl --cookie-jar ./cookie -u "jenkins:pwd" -s 'http://yuvi_jenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl --cookie ./cookie -u "jenkins:pwd" -H "$crumb" -X POST http://yuvi_jenkins:8080/job/ansible-project/build?delay=0sec
或者,我链接的文档建议将系统属性设置hudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID
为true
,或使用 Strict Crumb Issuer Plugin 将 crumb 验证更改为使用时间而不是会话 ID
感谢https://github.com/spinnaker/spinnaker/issues/2067#issuecomment-544993648帮助我解决了同样的问题
推荐阅读
- c# - C#:如何找到函数内数组的总和?
- flutter - 使用 colorScheme 与强调色
- python-3.x - libvirt 错误:内部错误:未定义的硬件架构
- arrays - 如何将 Nnumpy 数组转换为 Python 中的字典?
- python - 为什么这个循环不能正常工作?蟒蛇,硒
- postgresql - 如果我连接两个十六进制数字,结果是否保证为十六进制?
- c# - Process.Start() win32 异常找不到文件 C# Windows 窗体
- bash - 在 UNIX/Bash 脚本中按字母顺序对用户输入进行排序
- java - 使用scanner.nextInt() 从多行获取2个整数
- java - Kafka 消费者在 SSL 上抛出“OutOfMemoryError:Java 堆空间”错误