如何通过 JSON / JS 在 Jenkins 中为 CSRF 添加面包屑

How to add crumb for CSRF in Jenkins via JSON / JS

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

应该很简单。为了在 Jenkins 中通过 CSRF,您需要做的事情很少。

#1

获取有效的实际 CSRF crumb,为此您应该使用“/crumbIssuer”端点。据我所知,这是一个受保护的端点,因此您应该使用 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

现在,既然您已经掌握了有效且实际的 CSRF 碎屑,请将它与任何修改 Jenkins 状态的请求一起发送。比方说,您的有效 CSRF crumb JSON 看起来像这样:

{ "crumbRequestField": "Jenkins-Crumb", "crumb": "noop" }

因此您的 Ajax 调用看起来有点像这样(注意额外的 "Jenkins-Crumb" HTTP header):

// **** - 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 中。以下是一些您可能感兴趣的文件,以防您需要阅读一些实际执行您正在查找的操作的源代码:

请记住,您获得的 curl 与会话相关联。这意味着您必须在请求面包屑时获取 cookie ..然后在 运行 工作时设置 cookie

crumb=`curl -s -X GET "http://jenkins/crumbIssuer/api/json" --user usr:passwd --cookie-jar /tmp/crumcookie | tr ',' '\n' |grep '"crumb"' | sed 's/"//g' | awk -F ':' '{print }'`
echo "We got a crumb >> $crumb"
curl -X POST "http://jenkins/job/remoteTest/build" --user usr:passwd --cookie /tmp/crumcookie -H "Jenkins-Crumb:$crumb"
echo "Job has been launched"