使用jQuery的Jenns json REST api和CORS请求

我正在尝试使用Jenkins json API,无法使身份validation工作。

建立:

  • Jenkins安全性: Jenkin's own user database
  • 访问: Matrix-gebaseerde beveiliging
  • CORS通过Jenkins CORS插件
  • 使用注册用户的用户名/ api令牌

尝试:

 var username = "username"; var apiToken = "apiToken"; // username / api-token on url (basic authentication) $.ajax({ url: "http://"+username+":"+apiToken+"@host:port/job/test/api/json", method: "GET" }); // username / api-token supplied using jQuery's username/password properties $.ajax({ url: "http://host:port/job/test/api/json", method: "GET", username: username, password: apiToken }); // username / api-token by setting "Authorization" header directly $.ajax({ url: "http://host:port/job/test/api/json", method: "GET", headers: { "Authorization": "Basic " + btoa(username + ":" + apiToken) } }); 

所有这些尝试都会产生相同的结果: 响应:403禁止

我已经取得了一些成功。 注意:我必须在我们的nginx代理配置中添加两个add_header行…

 add_header Access-Control-Allow-Origin 'http://localhost:9001'; add_header Access-Control-Allow-Credentials 'true'; 

然后我可以在jenkins做到这一点。 只要我的浏览器在另一个选项卡中被授权(共享相同的会话/ cookie),它似乎不需要任何用户/传递/令牌。

 $.ajax({ url:'https://myserver.com/job/MYJOB/lastBuild/api/json', method: 'GET', xhrFields: { withCredentials: true } }).done(function(data) { console.log(data); }).fail(function() { console.error(arguments); }); 

回应@nick提供的答案:

我使用了Jenkins Cors Filter Plugin来添加所需的CORS头:

 Access-Control-Allow-Origins: http://mydomain Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Headers: Authorization 

@nick的解决方案要求您在同一浏览器中进行身份validation。
为了通过REST调用提供凭据,我添加了一个"Authorization" header如下所示:

 $.ajax({ url:'https://myserver.com/job/MYJOB/lastBuild/api/json', method: 'GET', headers: {'Authorization': 'Basic ' + btoa('username:apitoken')} }).done(function(data) { console.log(data); }).fail(function() { console.error(arguments); }); 

可以通过在Jenkins本身中使用的特定用户的配置来检索apitoken