请澄清:带有 CSRF 的 Jenkins REST API 需要 user:PASSWORD 的碎屑,但不需要 user:API_TOKEN 的碎屑?

Ret*_*ner 5 csrf jenkins jenkins-api csrf-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();
Run Code Online (Sandbox Code Playgroud)

或用于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();
Run Code Online (Sandbox Code Playgroud)

问题:

  • 这是预期用途吗(用户名:APITOKEN,不带面包屑标头)?文档和现有的 SO 答案很模糊。

使用 Jenkins 2.164.3 和 Java 8。