首页 > 解决方案 > 请澄清:带有 CSRF 的 Jenkins REST API 需要用户:PASSWORD 的碎屑,而不是用户:API_TOKEN?

问题描述

我发现启用 CSRF 保护后,我可以发出带有 crumbs 标头的发布请求并使用username:PASSWORD基本身份验证标头:

String basic = "<username>:<PASSWORD>";
HttpURLConnection c = (HttpURLConnection) new URL("https://host.com/jenkins/quietDown").openConnection();
c.setInstanceFollowRedirects(false);
c.setRequestMethod("POST");
c.addRequestProperty("Jenkins-Crumb", "<CRUMB>");
c.addRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString(basic.getBytes()));
c.getInputStream().close();

username:APITOKEN用于基本身份验证标头,在这种情况下不需要 crumbs 标头:

String basic = "<username>:<APITOKEN>";
HttpURLConnection c = (HttpURLConnection) new URL("https://host.com/jenkins/quietDown").openConnection();
c.setInstanceFollowRedirects(false);
c.setRequestMethod("POST");
c.addRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString(basic.getBytes()));
c.getInputStream().close();

问题:

使用 Jenkins 2.164.3 和 Java 8。

标签: jenkinscsrfjenkins-apicsrf-token

解决方案


推荐阅读