我最近升级到Jenkins 2.192,我的应用程序开始失败并出现以下错误:
HTTP Error 403: No valid crumb was included in the request
Reason: No valid crumb was included in the request
降级到Jenkins 2.189后,我看不到问题。 我看不到詹金斯2.189、2.190、2.191的问题。 我遇到了詹金斯2.192(也见2.196)的问题
2.191和2.192之间发生了某些变化,导致了我观察到的故障。
答案 0 :(得分:6)
无需更改源代码的简单解决方案(已通过Jenkins v2.222验证):
一个缺点是该解决方案使我们依赖于Strict Crumb Issuer插件,并且删除了安全功能。但是,由于我们的应用程序需要许多其他插件,并且只能在没有Internet访问的防火墙后运行,因此可以接受。
答案 1 :(得分:4)
引荐-https://support.cloudbees.com/hc/en-us/articles/219257077-CSRF-Protection-Explained
如果您使用用户名和用户API令牌进行身份验证,则不需要Jenkins 2.96 weekly / 2.107 LTS的面包屑。有关更多信息,请参阅使用API令牌或JENKINS-22474进行身份验证时不再需要的CSRF屑。
答案 2 :(得分:4)
现在,每次使用面包屑时,您都必须转发会话ID(在生成面包屑的cookie响应中显示)。示例代码有望对其进行说明:
async function duplicateProject() {
const jenkinsAxios = axios.create({
baseURL: 'http://jenkins_url',
auth: {
username: 'MY-USERNAME',
password: "MY-PASSWORD"
}
});
const {data: existingJobConfig} = await jenkinsAxios.get('/job/existingJob/config.xml');
const crumbIssuer = await jenkinsAxios.get('/crumbIssuer/api/json');
await jenkinsAxios.post(`/createItem?name=MY_NEW_PROJECT`, existingJobConfig, {
headers: {
'Content-Type': 'application/xml',
[crumbIssuer.data.crumbRequestField]: crumbIssuer.data.crumb,
Cookie: crumbIssuer.headers['set-cookie'][0] // <--- THIS IS KEY!!!!
}
}
);
}
答案 3 :(得分:1)
浏览了几篇文章后,我找到了解决方法...
步骤:-1
转到Jenkins并为Jenkins中的登录用户创建令牌
复制令牌和用户ID
user id: admin
token id :- "*****"
第二步:-
使用以下命令创建面包屑
wget -q --auth-no-challenge --user admin --password "ur jenkins password" --output-document - 'http://urljenkinsurl:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
在这里,您的面包屑将输出,例如:-"Jenkins-Crumb:****************"
步骤3:-
在Jenkins“严格的碎屑发行者插件”中安装插件
步骤4:-
转到BitBucket并输入URL
http://admin:"your Jenkins token created in the above step"@3.22.23.32:8080/job/ur Job-name/build?crumb="created in the step 2"
步骤5:-
转到您的Jenkins作业,转到配置->选择->使用BitBucket Push和Pull Request插件构建。
填写允许的分支:-/ *
例如:-/ * master代表master分支
步骤6:-
就是这样,现在尝试推送到master分支,将看到构建被触发。
注意:-请在所有步骤中删除“”并替换为您的值
答案 4 :(得分:0)
使用VSTS代理从TFS排队jenkins任务时,升级到此版本后,我遇到了同样的问题。
您可以通过在Jenkins Server中禁用CSRF安全性来暂时解决此问题。
发现这一点可能会有所帮助: https://jenkins.io/doc/upgrade-guide/2.176/
答案 5 :(得分:0)
在您的API调用中传递面包屑很容易-而且更安全。 https://support.cloudbees.com/hc/en-us/articles/219257077-CSRF-Protection-Explained解释了所有内容。
有关詹金斯(Jenkins)面包屑处理的最新更改,另请参见Ansible jenkins_plugin module returns "HTTP Error 403: No valid crumb was included in the request"。