[英]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.