2015-11-03 2 views
2

Я пытаюсь использовать Jenkins json API и не могу заставить аутентификацию работать.Jenkins json REST api с запросом CORS с использованием jQuery

установки:

  • Дженкинс безопасности: Jenkin’s own user database
  • доступа: Matrix-gebaseerde beveiliging
  • CORS через Jenkins CORS plugin
  • используя имя пользователя/апи фишку зарегистрированного пользователя

попытался:

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 Forbidden

+0

Любые удачи в этом? – Nick

+1

No. Извините. У вас есть какие-либо вопросы –

+0

Просто отправил возможный ответ – Nick

ответ

2

Я имел некоторый успех с этим. Примечание: я должен был добавить две строки add_header в наш Nginx прокси-конфигурации ...

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

Тогда я могу сделать это в Дженкинс. Кажется, что не нужен какой-либо пользователь/пропуск/токен, если мой браузер разрешен на другой вкладке (общий доступ к тому же сеансу/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); 
}); 
+1

Я попробую и дам вам знать (на следующей неделе?). –

+0

Это сработало! Благодаря! Как вы уже сказали, вы должны пройти аутентификацию в том же браузере. Чтобы полностью подтвердить подлинность, вы можете использовать: заголовки: {'Авторизация': 'Basic' + btoa ('username: apiToken')} –

1

В ответ на @nick обеспечение ответ:

Я использовал Дженкинс Cors Filter Plugin добавить заголовки CORS, которые необходимы:

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 может быть извлечен с помощью конфигурации конкретного пользователя для использования в самой Дженкинс.

+1

Я установил этот плагин, но он ничего не сделал. Либо связанный с jenkins, который нужно перезапустить (у нас было множество заданий, которые мы не могли убить в то время), или прокси-сервер nginx, возможно, отфильтровывал их ?! В любом случае, поэтому я помещаю заголовки в прокси-сервер nginx. – Nick

+0

Хороший совет на заголовке auth. Я попробую это ... – Nick

Смежные вопросы