Jenkins基础:API:创建Job的CSRF问题对应

使用Jenkins API创建Job是出现了No valid crumb was included in the request的错误提示,memo一下原因和对应方法。

现象

liumiaocn:jenkins liumiao$ curl -X POST -u root:liumiaocn -H "Content-Type:application/xml" -d "@demo/freestyle/config.xml" http://localhost:32002/createItem?name=free_style_job
<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 /createItem. 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>
liumiaocn:jenkins liumiao$

原因

Jenkins2.x在安装的时候CSRF防护设定缺省状态下是打开的,Jenkins是通过在Header中添加crumb信息来确认是否是跨域伪造请求的攻击的,在此CSRF防护设定起效的作用下,Jenkins会检查头部有无crumb信息,上述提示的“无有效的crumb”正是因为此设定的缘故

对应方法

对应方法非常简单,要么取消设定,要么在请求中添加crumb信息。

方法1: 取消CSRF保护设定

取消如下的CSRF Protection复选框
在这里插入图片描述
此种方式对应起来简单粗暴,快速有效。适用于Jenkins不直接对外暴露的情况,毕竟CSRF的攻击风险是客观存在的,设定之后Jenkins会给出相应的警告。
在这里插入图片描述

方法2:

通过在Header中添加crumb信息即可解决此问题。

  • 步骤1: 获取crumb信息

执行命令示例:curl -u root:liumiaocn ‘http://localhost:32002/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)

  • 执行日志示例
    从如下执行日志示例中可以看到,通过此方式返回了Jenkins-Crumb:5955de6dcdcdb990b7341ead1045eb64的crumb信息。
liumiaocn:jenkins liumiao$ curl -u root:liumiaocn 'http://localhost:32002/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
Jenkins-Crumb:5955de6dcdcdb990b7341ead1045eb64liumiaocn:jenkins liumiao$ 
  • 步骤2: 将获取的crumb信息添加到Header中

执行命令示例:curl -X POST -u root:liumiaocn -H “Content-Type:application/xml” -H “Jenkins-Crumb:5955de6dcdcdb990b7341ead1045eb64” -d “@demo/freestyle/config.xml” http://localhost:32002/createItem?name=free_style_job

结果确认
在这里插入图片描述

参考内容

https://wiki.jenkins.io/display/JENKINS/CSRF+Protection
https://wiki.jenkins.io/display/JENKINS/Remote+access+API#RemoteaccessAPI-CSRFProtection

淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页