[英]Jenkins giving 403 in EC2 Server after passing the crumb in the request headers
我在 API 调用中使用 CSRF Jenkins 碎屑从 ZD52387280E1EA21938A17 在 Jenkins 中创建一个新作业
我尝试了以下
调用 API 获取 crumb 数据
http://admin:11542c80972c3a2b863453d234de68b1d@10.139.163.33/crumbIssuer/api/json
我也试过下面的 URL
下面是从服务器获取的 JSON 响应
{"_class":"hudson.security.csrf.DefaultCrumbIssuer","crumb":"b272a09b604e7b7cc8ee1431f0a0143fa1422db2fb5f92955b0356a31da37463","crumbRequestField":"Jenkins-Crumb"}
在下一步中,我将调用 Jenkins 以使用 header 创建一个新作业
Jenkins-Crumb:b272a09b604e7b7cc8ee1431f0a0143fa1422db2fb5f92955b0356a31da37463
Jenkins 给了我 403,我正在使用 HttpGet 获取令牌并使用 HttpPost 与 header 如上所述并发送到 jenkins。
当我尝试使用 postman 时,它没有给出这个错误。 我在一台 ec2 服务器上运行 Java 应用程序,在另一台 ec2 服务器上运行 jenkins。
没有代理,我也尝试使用各种选项,如启用代理兼容性、重新启动 jenkins 等,但无法正常工作。
请给出任何指示。
Java 代码使用的是
HttpPost postRequest = new HttpPost(url);
JenkinsCrumb crumb = jenkinsHelper.getCrumb();
String encodedPassword = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes());
postRequest.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + encodedPassword);
postRequest.addHeader(new BasicHeader(crumb.getCrumbRequestField(), crumb.getCrumb()));
return postRequest;
获取面包屑的代码是
String urlWithToken = "http://" + (user + ":" + pwd) + "@";
HttpGet request = new HttpGet(jenkinsBaseUrl.replace("http://", urlWithToken) + "crumbIssuer/api/json");
request.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + encodedPassword);
CloseableHttpResponse httpResponse = httpClient.execute(request);
我也尝试过使用 CURL 命令,但仍然得到相同的响应
我能够通过对 CRUMB 和 POST 请求使用相同的 HttpClient (CloseableHttpClient) 来解决此问题。 早些时候,我使用了 2 个单独的客户端,一个用于获取面包屑,另一个用于发布数据。 为这两者使用共享的 httpclient 导致成功 state。
希望这可以帮助任何其他面临类似问题的开发人员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.