从 Jira 附加组件向外部 API 进行身份验证

Authenticate to external API from a Jira add-on

我正在构建一个 Jira 插件,为用户提供我自己的 API(不在 Jira 中)对象的状态。我的 API 使用 OAuth 2.0 进行保护。从我的 Jira 附加组件向我的 API 进行身份验证的最佳方式是什么?

我喜欢 Jira + GitHub/Bitbucket 集成的工作方式。具体来说,用户从 GitHub 中检索 API 键并将它们放入 Jira。然后 Jira 使用这些密钥进行身份验证,然后从 GitHub 检索数据。至少,我认为它是这样工作的。

如何为我的 Jira 插件实现同样的效果?

当您构建云附加组件时,您可以在不打扰管理员的情况下处理身份验证(他们不需要复制任何内容)。 要将自己与 Jira UI 集成,您需要创建一个网页面板或页面,在这两种情况下,Jira 都会要求您的站点呈现 HTML 代码,并且请求将包含 JWT token。在里面,您将获得有关哪个用户发出请求的信息。

现在,您可以通过多种方式向您的 API 验证 Jira 用户:

  • 向 HTML 提供一个限时令牌,并使用它来验证对 API 的调用。作为此解决方案的缺点,如果有人将页面保持打开状态而没有重新加载足够长的时间(超过您的时间限制),则令牌将变得无效。
  • 提供资源来检索限时令牌(验证 Jira 提供的 JWT 签名以确保请求确实来自特定的 Jira 实例)并在每次执行请求之前检索令牌(或每 N 分钟一次,具体取决于您的时间限制)。
  • 或者,如果你真的想打扰管理员,那么创建一个配置页面并让他们手动保存 API 密钥(我假设他们将不得不以某种方式从你那里检索这些密钥,这个额外的步骤可能会让很多人望而却步管理员),在此配置页面中,您将包含 JS 代码,该代码在提交时会将 API 键保存为 Application property,稍后您必须在向 API 发出请求之前检索此代码。但是,使用这种方法,管理员将无法将对您的 API 的访问限制为具有 Jira 权限的用户子集(每个登录用户都可以访问应用程序属性,在开放实例中甚至是匿名用户)。

如果您不确定如何验证 JWT 令牌,您可以阅读 this developer guide. Also, you can make your life easier by using one of the provided framework and tools,例如,atlassian-connect-spring-boot 将负责安装握手、JWT 身份验证和对 Jira 的身份验证从您的服务器 REST API。