如何在附加的REST Spring Atlassian Connect API中实现JWT授权?

时间:2019-01-21 09:04:22

标签: java jira

我使用创建了插件

class ImplB : virtual public IB{}; 
class ID : virtual public IB{};

atlassian-connect.json

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

我正在尝试访问我的API

{...
 "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"
    }]
  }
]
  }
}

如何在JS端获取jwt(最好进行描述

如果可以的话,一步一步地简化插件(我检查了很多示例链接,但是…))?

1 个答案:

答案 0 :(得分:1)

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

另一种选择是基于您从Connect应用程序(如Jira或Confluence)接收到的JWT生成JWT。但是,这还有更多工作要做。我可以建议阅读有关如何获取a valid JWT from the Connect application within JavaScript以及installation handshake phase的工作方式的信息。基于这些,您可以生成自己的JWT。

但是,在所有情况下,请注意,您不会为每个请求生成一个新令牌,而是为一个会话生成一个新令牌,因此您可以将令牌用于多个请求。我建议使用选项a),因为Sprint Boot Connect模板已经支持它。