2015-12-01 2 views
1

Мы используем JIRA 6.4.5 в нашей компании, но я пытаюсь извлечь данные из интерфейса API REST. Я пробовал сейчас последние пару дней, застрял в междоменной проблеме или что я не знаю учетных данных пользователя, поэтому я тоже не могу делать сервер.Как получить и отправить данные через jQuery из JIRA REST API?

Идеально у меня есть страница jQuery, где пользователь будет использовать свои собственные учетные данные/сеанс для запроса данных JIRA. API JIRA REST находится по адресу srv1.mydomain.xyz, и я использую srv2.mydomain.xyz как мой веб-сервер с моим кодом.

Я прочитал JIRA REST API Reference.

Я пробовал различные Javascript/Jquery вещи - в приведенном ниже примере я пытаюсь представить 1ч 30 мин к конкретной проблеме:

$.ajax({ 
    url: "https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog", 
    dataType: "json", 
    method: "post", 
    data: { time: "1h 30m", 
      comment: "Test" } 
}).done(function(data) { 
    alert("Success"); 
}).fail(function(jqXHR, textStatus) { 
    alert("Failed"); 
}); 

я получаю эту ошибку:

XMLHttpRequest cannot load https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog?time=1h+30m&comment=Test . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' https://srv2.mydomain.xyz ' is therefore not allowed access. The response had HTTP status code 401.

Я тогда посмотрел больше на это и увидел, что у Atlassian есть что-то по имени Atlassian Connect, поэтому я постарался с этим:

AJS.$.ajax({ 
    url: "https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog", 
    type: "post", 
    dataType: "json", 
    contentType: "application/json", 
    xhrFields: { withCredentials: true }, 
    async: false, 
    method: "post", 
    data: { time: "1h 30m", 
      comment: "Test" } 
}).done(function(data) { 
    alert("Success"); 
}).fail(function() { 
    alert("Failed"); 
}); 

Но я получаю подобную ошибку:

XMLHttpRequest cannot load https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog . Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' https://srv2.mydomain.xyz ' is therefore not allowed access.

Я также смотрел, чтобы, если я мог бы сделать это на стороне сервера от моего сервера с поддержкой PHP в том же домене, что и сервер JIRA, но я не получить base64-кодированные учетные данные при выполнении phpinfo(), тогда я не думаю, что могу использовать этот подход (и я не хочу запрашивать у пользователя учетные данные).

Мне больно известно, что моя проблема связана с междоменной защитой, но я не могу найти примеры того, как ее исправить? Было бы здорово, если бы JIRA-сервер мог установить Access-Control-Allow-Origin для определенных хостов, но я предполагаю, что это не параметр конфигурации (я не контролирую сервер JIRA).

+0

Вы видите этот ответ: https://answers.atlassian.com/questions/69356/cross-origin-resource-sharing-with-jira-rest-api-and-javascript – Robert

ответ

0

Это, безусловно, кросс-доменный корпус. И поверьте мне, он существует для вашей собственной защиты;)

Метод, который я использую, заключается в том, чтобы отправить запрос jQuery на страницу обработки на сервере, которая затем аутентифицирует и перехватывает сервер Jira. В вашем случае, поскольку srv1 и srv2 находятся в одном домене, srv2 (webserver) может разговаривать с srv1 (Jira) с использованием внутренних IP-адресов (например, https://10.50.25.87:8080/rest/api/latest/issue/proj-3/worklog), поэтому проблема междоменного доступа не применяется.