You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins请求报403错误:无有效crumb,已试两种方案仍未解决

解决Jenkins接口403 "No valid crumb was included in the request"问题

先帮你梳理下当前的问题:你通过脚本调用Jenkins构建接口时遇到403错误,虽然已经成功获取到了crumb,但提交请求时还是提示无效crumb,并且尝试了代理兼容模式和关闭CSRF防护两种方案都没解决。

你的脚本与执行输出

你的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>

已尝试的方案

  • 开启Jenkins全局安全设置中的"代理兼容模式"并重启
  • 关闭"Prevent Cross Site Request Forgery exploits"防护

可能的原因与针对性解决方案

1. Crumb与请求的Host头不匹配(最常见)

Jenkins的crumb是和请求的Host主机标识绑定的,如果你获取crumb时用的是内部主机名yuvi_jenkins,但实际请求经过代理后,Jenkins收到的Host头是代理的域名/IP,两者不匹配就会导致crumb验证失败。

解决方法:
获取crumb和发送请求时,使用完全一致的Jenkins访问地址(和你通过代理访问的公网地址一致),比如替换成代理对外暴露的域名或IP:

# 替换成你的Jenkins公网访问地址
JENKINS_URL="http://jenkins.yourdomain.com:8080"
crumb=$(curl -u "jenkins:pwd" -s "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,:,//crumb)")
echo $crumb
curl -u "jenkins:pwd" -H "$crumb" -X POST "$JENKINS_URL/job/ansible-project/build?delay=0sec"

如果没有公网地址,也可以尝试在脚本中指定Host头,确保获取crumb和请求时的Host一致:

# 获取crumb时指定Host头
crumb=$(curl -u "jenkins:pwd" -H "Host: yuvi_jenkins" -s 'http://yuvi_jenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,:,//crumb)')
echo $crumb
# 请求时也指定相同的Host头
curl -u "jenkins:pwd" -H "$crumb" -H "Host: yuvi_jenkins" -X POST http://yuvi_jenkins:8080/job/ansible-project/build?delay=0sec

2. 代理服务器未正确传递Host头

如果你使用Nginx、Apache等反向代理,检查代理配置是否正确传递了Host头给Jenkins。比如Nginx需要添加:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

配置修改后重启代理服务,再测试脚本。

3. 验证关闭CSRF防护是否真正生效

如果你已经关闭了"Prevent Cross Site Request Forgery exploits",但还是报错,可能是Jenkins重启不彻底,或者代理缓存了旧的配置。尝试:

  • 彻底重启Jenkins服务(不是仅刷新网页)
  • 清空代理服务器的缓存
  • 绕过代理,直接在Jenkins服务器上执行脚本(用localhost:8080作为地址),看是否能正常构建,以此排查是否是代理的问题。

内容的提问来源于stack exchange,提问作者Yogendra Singh Rathore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:42:01