代码之家  ›  专栏  ›  技术社区  ›  Arthur

如何在AddonRestSpringAtlassianConnectAPI中实现JWT授权?

  •  0
  • Arthur  · 技术社区  · 6 年前

    我用创建插件

    mvn archetype:generate -DarchetypeGroupId=com.atlassian.connect -DarchetypeArtifactId=atlassian-connect-spring-boot-archetype -DarchetypeVersion=1.5.1
    

    Atlassian-Connect.json

    {...
     "scopes": [
     "read", "write"
    ],
    "authentication": {
     "type": "jwt"
     },
     "lifecycle": {
     "installed": "/installed",
     "uninstalled": "/uninstalled"
     },
     "enableLicensing": false,
     "modules": {
      "generalPages": [
    
      {
        "key": "comments",
        "location": "system.top.navigation.bar",
        "name": {
          "value": "Comments"
        },
        "url": "/rest/api",
        "conditions": [{
          "condition": "user_is_logged_in"
        }]
      }
    ]
      }
    }
    

    我正在尝试访问我的API

     AJS.$.ajax({
                        url: "https://X.ngrok.io/rest/api",
                        type: "GET",
                        dataType: "json",
                        contentType: "application/json",
                        async: false, headers: {
        'Authorization' : "JWT {{sessionToken}}"
    },
                        success: function (data) {
                            console.log(e);
                        },
                        error: function(response) {
    
                            console.log(response);
                        }
                        })
    

    如何在JS端获得JWT(最好描述一下

    简单的插件一步一步,如果可以的话(我用例子检查了很多链接,但是_))?

    1 回复  |  直到 6 年前
        1
  •  1
  •   s.hesse    6 年前

    您正在声明中的HTML页 atlassian-connect.json 文件,即“注释”常规页。因此,如果有人打开此页面,您可以生成JWT并将其插入HTML文档中。 之前 将其返回给用户/请求者。然后可以在JavaScript代码中使用这个JWT。由于您似乎在使用Spring引导模板,因此应该查看中的“验证从iframe内容返回到加载项的请求”部分。 repositories readme file . 这正是你的情况。

    另一种选择是基于从连接应用程序(如jira或confluence)接收的JWT生成JWT。不过,这还有一点工作要做。我可以推荐你读一下如何获得 a valid JWT from the Connect application within JavaScript 以及如何 installation handshake phase 作品。基于这些,您可以生成自己的JWT。

    但是,在所有情况下,请注意不要为每个请求生成新的令牌,而是为会话生成新的令牌,这样您就可以为多个请求使用该令牌。我建议使用选项a),因为sprint boot connect模板已经支持它。