解决 Jenkins 报错“Error 403 No valid crumb was included in the request

作者:快去debug2024.02.04 05:46浏览量:154

简介:本文介绍了解决 Jenkins 报错“Error 403 No valid crumb was included in the request”的方法。该问题通常是由于 CSRF (Cross-Site Request Forgery) 保护导致的。文章提供了三种可能的解决方法:手动获取 crumb、使用 Jenkins API Token 和禁用 CSRF 保护。通过这些方法,你可以成功解决该问题并顺利执行 Jenkins 任务。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

在使用 Jenkins 进行持续集成时,可能会遇到一个常见的错误:“Error 403 No valid crumb was included in the request”。这个错误通常是由于 CSRF (Cross-Site Request Forgery) 保护导致的。以下是一些可能的解决方法:

问题分析

Jenkins 通过 CSRF 保护来防止跨站请求伪造攻击。当用户尝试执行某些敏感操作(如构建项目)时,Jenkins 会要求提供“crumb”。如果请求中没有包含有效的“crumb”,就会返回“Error 403 No valid crumb was included in the request”错误。

解决方法

方法一:手动获取 crumb

  1. 打开 Jenkins 主页,并确保登录状态。
  2. 在浏览器地址栏中输入以下 URL:http://[YOUR_JENKINS_URL]/crumbIssuer/api/json
  3. 将返回的 JSON 数据中的 crumb 值复制下来。
  4. 在进行敏感操作时,将 crumb 值添加到请求头中。

    方法二:使用 Jenkins API Token

  5. 在 Jenkins 主页上,进入“个人设置”页面。
  6. 在“API Token”部分,生成一个新的 API Token。
  7. 在进行敏感操作时,将 API Token 添加到请求头中。

    方法三:禁用 CSRF 保护

    注意: 不推荐禁用 CSRF 保护,因为它有助于防止跨站请求伪造攻击。只有在你完全了解潜在风险的情况下才使用此方法。
  8. 打开 Jenkins 主页,并确保登录状态。
  9. 在浏览器地址栏中输入以下 URL:http://[YOUR_JENKINS_URL]/configureGlobalSecurity
  10. 在“Jenkins”下找到“Disable CSRF Protection”选项,并选中它。
  11. 保存配置。

    实例代码(Python)

    以下是使用 Python 的示例代码,用于发送请求时包含 crumb 或 API Token:
    1. import requests
    2. import json
    3. # 获取 crumb 的示例代码(方法一)
    4. crumb_url = 'http://[YOUR_JENKINS_URL]/crumbIssuer/api/json'
    5. response = requests.get(crumb_url)
    6. data = json.loads(response.text)
    7. crumb = data['crumb']
    8. # 使用 API Token 的示例代码(方法二)
    9. api_token = '[YOUR_API_TOKEN]' # 从 Jenkins 个人设置中生成一个新的 API Token
    10. headers = {'Authorization': 'Bearer ' + api_token}
    11. # 发送请求的示例代码(包含 crumb 或 API Token)
    12. url = 'http://[YOUR_JENKINS_URL]/job/[JOB_NAME]/build' # 替换为实际的 Jenkins job URL
    13. response = requests.post(url, headers=headers) # 如果使用 crumb,将 headers 更改为包含 crumb 的字典
    14. print(response.text)
    请注意,上述示例代码中的 [YOUR_JENKINS_URL][JOB_NAME][YOUR_API_TOKEN] 需要替换为实际的值。另外,如果你的 Jenkins 实例启用了身份验证,还需要在请求中包含用户名和密码。你可以使用 requests.auth 来实现这一点。
article bottom image

相关文章推荐

发表评论