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

fre*_*eAR 5 jenkins

我最近升级到 Jenkins 2.192,我的应用程序开始失败并出现以下错误:

HTTP Error 403: No valid crumb was included in the request
Reason: No valid crumb was included in the request
Run Code Online (Sandbox Code Playgroud)

降级到 Jenkins 2.189 后我没有看到问题。我没有看到 Jenkins 2.189、2.190、2.191 的问题。我遇到了 Jenkins 2.192 的问题(也见于 2.196)

2.191 和 2.192 之间发生了一些变化,导致我观察到的失败。

acd*_*ior 9

您现在必须在每次使用该面包屑时转发会话 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!!!!
      }
    }
  );
}
Run Code Online (Sandbox Code Playgroud)


fre*_*eAR 8

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

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

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

  • 仍然遇到同样的问题 (2认同)

小智 5

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

在此处输入图片说明

如果您使用用户名和用户 API 令牌进行身份验证,则 Jenkins 2.96 周/2.107 LTS 不需要面包屑。有关更多信息,请参阅使用 API 令牌或 JENKINS-22474 进行身份验证时不再需要 CSRF 面包屑。


小智 5

在阅读了几篇文章后,我找到了解决方法......

步骤1

转到 Jenkins 并为 Jenkins 中的登录用户创建令牌

复制令牌和用户 ID

user id: admin
token id :- "*****"
Run Code Online (Sandbox Code Playgroud)

第2步:-

使用以下命令创建面包屑

wget -q --auth-no-challenge --user admin --password "ur jenkins password" --output-document - 'http://urljenkinsurl:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
Run Code Online (Sandbox Code Playgroud)

这里的输出将是你的面包屑,例如:-"Jenkins-Crumb:****************"

步骤 3:-

在 Jenkins“Strict Crumb Issuer Plugin”中安装插件

步骤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"
Run Code Online (Sandbox Code Playgroud)

第 5 步:-

转到您的 Jenkins 作业,转到配置 --> 选择 --> 使用 BitBucket Push 和 Pull Request 插件构建。

填充允许的分支:- /*

例如:- /*master 主分支

第 6 步:-

就是这样,现在尝试推送到主分支,将会看到构建被触发。

注意:- 请删除所有步骤中的“”并替换为您的值