我想在詹金斯(Jenkins)中通过API作业创建,但无法在詹金斯(Jenkins)中使用CSRF保护。我有一个面包屑,但idk如何将其附加到JSON或JavaScript中的url /请求上,以通过POST方法获取数据传递。有任何想法吗?我只想使用JS而不使用JAVA。谢谢
它应该很容易。为了在詹金斯获得CSRF,您需要做的事情很少。
#1
提取有效的实际CSRF碎屑,为此应使用“ / 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
现在,由于您已经处理了有效且实际的CSRF碎屑,因此请与任何修改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。如果您需要阅读一些实际能满足您需求的源代码,那么以下文件可能是您感兴趣的文件: