Jenkins json REST api CORS 请求使用 jQuery
Jenkins json REST api with CORS request using jQuery
我正在尝试使用 Jenkins json API,但无法进行身份验证。
设置:
- 詹金斯安全:
Jenkin’s own user database
- 访问:
Matrix-gebaseerde beveiliging
- CORS 通过 Jenkins CORS plugin
- 使用注册用户的 username/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 中执行此操作。它似乎不需要任何 user/pass/token 只要我的浏览器在另一个选项卡中被授权(共享相同的 session/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 headers:
Access-Control-Allow-Origins: http://mydomain
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Authorization
@nick 的解决方案要求您在同一浏览器中进行身份验证。
为了通过 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);
});
可以通过特定用户的配置检索 apitoken
以在 Jenkins 本身中使用。
我正在尝试使用 Jenkins json API,但无法进行身份验证。
设置:
- 詹金斯安全:
Jenkin’s own user database
- 访问:
Matrix-gebaseerde beveiliging
- CORS 通过 Jenkins CORS plugin
- 使用注册用户的 username/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 中执行此操作。它似乎不需要任何 user/pass/token 只要我的浏览器在另一个选项卡中被授权(共享相同的 session/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 headers:
Access-Control-Allow-Origins: http://mydomain
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Authorization
@nick 的解决方案要求您在同一浏览器中进行身份验证。
为了通过 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);
});
可以通过特定用户的配置检索 apitoken
以在 Jenkins 本身中使用。