Jenkins 2.192:HTTP错误403:请求中未包含有效面包屑

时间:2019-08-30 18:43:58

标签: jenkins

我最近升级到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之间发生了某些变化,导致了我观察到的故障。

6 个答案:

答案 0 :(得分:6)

无需更改源代码的简单解决方案(已通过Jenkins v2.222验证):

  1. 安装Strict Crumb Issuer插件(https://plugins.jenkins.io/strict-crumb-issuer/
  2. 启用此插件,然后从其配置中取消选中“检查会话ID”(在Jenkins配置全局安全性下)

一个缺点是该解决方案使我们依赖于Strict Crumb Issuer插件,并且删除了安全功能。但是,由于我们的应用程序需要许多其他插件,并且只能在没有Internet访问的防火墙后运行,因此可以接受。

答案 1 :(得分:4)

引荐-https://support.cloudbees.com/hc/en-us/articles/219257077-CSRF-Protection-Explained

enter image description here

如果您使用用户名和用户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"