【问题标题】:Atlassian Connect-Express: JIRA REST API authentication within the JIRA pluginAtlassian Connect-Express:JIRA 插件中的 JIRA REST API 身份验证
【发布时间】:2018-03-19 14:30:14
【问题描述】:

我正在使用atlassian-connect-express 工具包来创建Atlassian Connect based Add-ons with Node.js.

它提供入站请求的自动 JWT 身份验证以及返回主机的出站请求的 JWT 签名。

当我在 JIRA 仪表板中安装插件并返回以下有效负载时,该插件已通过身份验证:

{ 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 方法进行身份验证。

【问题讨论】:

    标签: node.js jira jira-rest-api jira-plugin


    【解决方案1】:

    在这里签到Atlassian Connect for Node.js Express Docs 在 JIRA ADD-On Signed HTTP Requests 中的工作方式如下。 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);
             });
    

    发布:

     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)
    
                  });
    

    【讨论】:

      【解决方案2】:

      您应该在执行附加组件时使用由 JIRA 初始化的全局变量“AP”。您可以使用 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 UI 访问 ABC-1。

      这里是参考文档:https://developer.atlassian.com/cloud/jira/software/jsapi/request/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        • 2013-07-14
        相关资源
        最近更新 更多