Atlassian Connect-Express:JIRA 插件中的 JIRA REST API 身份验证
Atlassian Connect-Express: JIRA REST API authentication within the JIRA plugin
我正在使用 atlassian-connect-express
工具包创建 Atlassian Connect based Add-ons with Node.js.
它提供入站请求的自动 JWT 身份验证以及返回主机的出站请求的 JWT 签名。
当我在 JIRA 仪表板中安装附加组件时,它已通过身份验证 return 以下有效负载:
{ key: 'my-add-on',
clientKey: '*****',
publicKey: '********'
sharedSecret: '*****'
serverVersion: '100082',
pluginsVersion: '1.3.491',
baseUrl: 'https://myaccount.atlassian.net',
productType: 'jira',
description: 'Atlassian JIRA at https://myaccount.atlassian.net ',
eventType: 'installed' }
但我无法使用框架生成的 JWT 令牌对 JIRA Rest Api 进行身份验证。它会抛出以下错误消息。
404 '{"errorMessages":["Issue does not exist or you do not have permission to see it."],"errors":{}}'
下面是我发送 GET 请求时的代码:
app.get('/getissue', addon.authenticate(), function(req, res){
var request = require('request');
request({
url: 'https://myaccount.atlassian.net/rest/api/2/issue/ABC-1',
method: 'GET',
}, function(error, response, body){
if(error){
console.log("error!");
}else{
console.log(response.statusCode, body);
}
});
res.render('getissue');
});
下面是我的应用程序描述符文件的代码:
{
"key": "my-add-on",
"name": "Ping Pong",
"description": "My very first add-on",
"vendor": {
"name": "Ping Pong",
"url": "https://www.example.com"
},
"baseUrl": "{{localBaseUrl}}",
"links": {
"self": "{{localBaseUrl}}/atlassian-connect.json",
"homepage": "{{localBaseUrl}}/atlassian-connect.json"
},
"authentication": {
"type": "jwt"
},
"lifecycle": {
"installed": "/installed"
},
"scopes": [
"READ",
"WRITE"
],
"modules": {
"generalPages": [
{
"key": "hello-world-page-jira",
"location": "system.top.navigation.bar",
"name": {
"value": "Hello World"
},
"url": "/hello-world",
"conditions": [{
"condition": "user_is_logged_in"
}]
},
{
"key": "getissue-jira",
"location": "system.top.navigation.bar",
"name": {
"value": "Get Issue"
},
"url": "/getissue",
"conditions": [{
"condition": "user_is_logged_in"
}]
}
]
}
}
我很确定这不是我的正确做法,要么我应该使用 OAuth。但我想让 JWT 方法在这里进行身份验证。
您应该使用由 JIRA 初始化的全局变量 'AP' 以及您的 add-on 执行。您可以使用 Chrome/Firefox Debug.
探索它
你试过打电话吗?
AP.request(..,...);
而不是 "var request = require('request');"
您可以在下面的脚本顶部设置以传递 JS 提示和 IDE 验证:
/* global AP */
并且在使用 AP 时 URL 应该如下所示:
url: /rest/api/2/issue/ABC-1
而不是:
url: https://myaccount.atlassian.net/rest/api/2/issue/ABC-1
我的假设是 ABC-1 问题和用户凭据得到验证,并且用户能够通过 JIRA 访问 ABC-1 UI。
这是供参考的文档:https://developer.atlassian.com/cloud/jira/software/jsapi/request/
在此处签入即可使用 Atlassian Connect for Node.js Express Docs
在 JIRA ADD-On 中,签名 HTTP 请求的工作方式如下。 GET 和 POST 两者。
获取:
app.get('/getissue', addon.authenticate(), function(req, res){
var httpClient = addon.httpClient(req);
httpClient.get('rest/api/2/issue/ABC-1',
function(err, resp, body) {
Response = JSON.parse(body);
if(err){
console.log(err);
}else {
console.log('Sucessful')
}
});
res.send(response);
});
POST:
var httpClient = addon.httpClient(req);
var postdata = {
"fields": {
"project":
{
"key": "MYW"
},
"summary": "My Story Name",
"description":"My Story Description",
"issuetype": {
"name": "Story"
}
}
}
httpClient.post({
url: '/rest/api/2/issue/' ,
headers: {
'X-Atlassian-Token': 'nocheck'
},
json: postdata
},function (err, httpResponse, body) {
if (err) {
return console.error('Error', err);
}
console.log('Response',+httpResponse)
});
我正在使用 atlassian-connect-express
工具包创建 Atlassian Connect based Add-ons with Node.js.
它提供入站请求的自动 JWT 身份验证以及返回主机的出站请求的 JWT 签名。
当我在 JIRA 仪表板中安装附加组件时,它已通过身份验证 return 以下有效负载:
{ key: 'my-add-on',
clientKey: '*****',
publicKey: '********'
sharedSecret: '*****'
serverVersion: '100082',
pluginsVersion: '1.3.491',
baseUrl: 'https://myaccount.atlassian.net',
productType: 'jira',
description: 'Atlassian JIRA at https://myaccount.atlassian.net ',
eventType: 'installed' }
但我无法使用框架生成的 JWT 令牌对 JIRA Rest Api 进行身份验证。它会抛出以下错误消息。
404 '{"errorMessages":["Issue does not exist or you do not have permission to see it."],"errors":{}}'
下面是我发送 GET 请求时的代码:
app.get('/getissue', addon.authenticate(), function(req, res){
var request = require('request');
request({
url: 'https://myaccount.atlassian.net/rest/api/2/issue/ABC-1',
method: 'GET',
}, function(error, response, body){
if(error){
console.log("error!");
}else{
console.log(response.statusCode, body);
}
});
res.render('getissue');
});
下面是我的应用程序描述符文件的代码:
{
"key": "my-add-on",
"name": "Ping Pong",
"description": "My very first add-on",
"vendor": {
"name": "Ping Pong",
"url": "https://www.example.com"
},
"baseUrl": "{{localBaseUrl}}",
"links": {
"self": "{{localBaseUrl}}/atlassian-connect.json",
"homepage": "{{localBaseUrl}}/atlassian-connect.json"
},
"authentication": {
"type": "jwt"
},
"lifecycle": {
"installed": "/installed"
},
"scopes": [
"READ",
"WRITE"
],
"modules": {
"generalPages": [
{
"key": "hello-world-page-jira",
"location": "system.top.navigation.bar",
"name": {
"value": "Hello World"
},
"url": "/hello-world",
"conditions": [{
"condition": "user_is_logged_in"
}]
},
{
"key": "getissue-jira",
"location": "system.top.navigation.bar",
"name": {
"value": "Get Issue"
},
"url": "/getissue",
"conditions": [{
"condition": "user_is_logged_in"
}]
}
]
}
}
我很确定这不是我的正确做法,要么我应该使用 OAuth。但我想让 JWT 方法在这里进行身份验证。
您应该使用由 JIRA 初始化的全局变量 'AP' 以及您的 add-on 执行。您可以使用 Chrome/Firefox Debug.
探索它你试过打电话吗?
AP.request(..,...);
而不是 "var request = require('request');" 您可以在下面的脚本顶部设置以传递 JS 提示和 IDE 验证:
/* global AP */
并且在使用 AP 时 URL 应该如下所示:
url: /rest/api/2/issue/ABC-1
而不是:
url: https://myaccount.atlassian.net/rest/api/2/issue/ABC-1
我的假设是 ABC-1 问题和用户凭据得到验证,并且用户能够通过 JIRA 访问 ABC-1 UI。
这是供参考的文档:https://developer.atlassian.com/cloud/jira/software/jsapi/request/
在此处签入即可使用 Atlassian Connect for Node.js Express Docs 在 JIRA ADD-On 中,签名 HTTP 请求的工作方式如下。 GET 和 POST 两者。
获取:
app.get('/getissue', addon.authenticate(), function(req, res){
var httpClient = addon.httpClient(req);
httpClient.get('rest/api/2/issue/ABC-1',
function(err, resp, body) {
Response = JSON.parse(body);
if(err){
console.log(err);
}else {
console.log('Sucessful')
}
});
res.send(response);
});
POST:
var httpClient = addon.httpClient(req);
var postdata = {
"fields": {
"project":
{
"key": "MYW"
},
"summary": "My Story Name",
"description":"My Story Description",
"issuetype": {
"name": "Story"
}
}
}
httpClient.post({
url: '/rest/api/2/issue/' ,
headers: {
'X-Atlassian-Token': 'nocheck'
},
json: postdata
},function (err, httpResponse, body) {
if (err) {
return console.error('Error', err);
}
console.log('Response',+httpResponse)
});