如何通过JSON / JS在Jenkins中为CSRF添加crumb

时间:2017-04-10 11:03:20

标签: javascript json jenkins csrf-protection

我想在Jenkins中通过API工作创建,但我无法在Jenkins中连接CSRF保护。我得到了一个碎屑但是如何将它附加到JSON或JavaScript中的url / request以通过POST方法传递数据。有任何想法吗?我想只使用JS,而不使用JAVA。感谢

1 个答案:

答案 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中。以下是一些可能感兴趣的文件,以便您需要阅读实际执行所需内容的源代码: