我想在Jenkins中通过API工作创建,但我无法在Jenkins中连接CSRF保护。我得到了一个碎屑但是如何将它附加到JSON或JavaScript中的url / request以通过POST方法传递数据。有任何想法吗?我想只使用JS,而不使用JAVA。感谢
答案 0 :(得分:3)
应该很容易。为了通过詹金斯的CSRF,你应该做的事情很少。
<强>#1 强>
获取有效的实际CSRF crumb,并且应使用“ / crumbIssuer ”端点。 AFAIK,这是一个受保护的端点,因此您应该使用API令牌或请求中的凭据对其进行经过身份验证的调用。我将如何在JavaScript中执行此操作:
// **** - is a placeholder for an auth token, replace it with yours
$.get({
url: "https://my.jenkins.io/crumbIssuer/api/json",
contentType: "application/json",
headers: {
"User-Agent": "my_js_script",
"Authorization": "****"
}
}).done(function(data) {
// this is how you fetch valid & actual CSRF crumb
console.log(data.crumbRequestField + " = " + data.crumb);
});
<强>#2 强>
现在,既然你已经掌握了一个有效的&amp;实际的CSRF crumb,确实发送任何修改Jenkins状态的请求。可以说,您的有效CSRF碎屑JSON看起来像这样:
{ "crumbRequestField": "Jenkins-Crumb", "crumb": "noop" }
因此您的Ajax调用看起来有点像这样(注意额外的“Jenkins-Crumb”HTTP标头):
// **** - is a placeholder for an auth token, replace it with yours
// simply activates a job in Jenkins, requirement for cloned jobs (aka. "Create-A-Copy-From")
$.post({
url: "https://my.jenkins.io/job/my_job/description",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
headers: {
"User-Agent": "my_js_script",
"Authorization": "****",
"Jenkins-Crumb": "noop" // makes CSRF filter in Jenkins happy
},
data: "description="
});
这些JavaScript代码段不太可能完美,但希望能为您提供正确的方向。
我正在开发一个Jenkins API库的项目,但是在Ruby中。以下是一些可能感兴趣的文件,以便您需要阅读实际执行所需内容的源代码: