我们在公司使用JIRA 6.4.5,但我很难从其API REST接口中获取数据。我过去几天一直在尝试,遇到跨域问题,或者我不知道用户凭据,所以我也不能做任何服务器端。
理想情况下,我有一个jQuery页面,用户将使用自己的凭据/会话来查询JIRA数据。 JIRA REST API位于 srv1.mydomain.xyz ,我使用 srv2.mydomain.xyz 作为我的网络服务器和我的代码。
我尝试了各种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无法加载 https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog?time=1h+30m&comment=Test。 请求中不存在“Access-Control-Allow-Origin”标头 资源。原因'https://srv2.mydomain.xyz'因此不是 允许访问。响应的HTTP状态代码为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无法加载 https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。原因'https://srv2.mydomain.xyz'因此不是 允许访问。
我还查看了我是否可以在与JIRA服务器相同的域中从我的启用PHP的服务器执行此服务器端,但因为在执行phpinfo()
时我没有获得base64编码的凭据我不认为我也可以使用这种方法(我不想提示用户提供凭证)。
我很痛苦地意识到我的问题与跨域保护有关但我找不到任何关于如何修复它的例子?如果JIRA服务器可以为某些主机设置Access-Control-Allow-Origin
会很好,但我认为这不是配置选项(我不能控制JIRA服务器)。
答案 0 :(得分:0)
这绝对是一个跨域案例。相信我,它存在于你自己的保护之下; )
我使用的方法是将jQuery请求发送到基于服务器的处理页面,然后该页面对Jira服务器进行身份验证和交互。在您的情况下,由于srv1和srv2属于同一个域,因此srv2(webserver)可以使用内部IP(例如https://10.50.25.87:8080/rest/api/latest/issue/proj-3/worklog)与srv1(Jira)通信,因此跨域问题不适用。 / p>