使用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
。
- 请在401时帮助测试Firefox jQuery ajax中的CORS问题
- IE投掷访问被拒绝错误
- 请求的资源上没有“Access-Control-Allow-Origin”标头,响应具有HTTP状态代码401
- 允许cors jQuery POST请求Express.js服务器上的Spotify API
- 使用Javascript进行基本授权API登录(CORS?)
- 跨源Ajax请求在Opera和IE9中不起作用?
- CORS – Ajax错误函数将返回401的API请求的错误代码报告为0
- 使用Javascript但不使用Python / PHP的CORS错误
- 基于jQuery AJAX SOAP的Web服务和CORS(跨域资源共享)