Jira 云实例中问题附件的临时链接/URL



JIRA提供了一种使用基本身份验证,JWT身份验证机制访问问题附件的方法。我们可以使用它下载这些文件。我们能够使用两种身份验证机制下载文件。

示例 JWT 身份验证:

curl -X GET --url https://{site-name}.atlassian.net/secure/attachment/1001/example.txt -H 'Authorization: jwt '

问题/我们的要求:

但是有没有办法为 JIRA 问题的附件生成临时可访问的 URL,这些附件会将令牌嵌入到 URI 本身中。我在下面添加了示例

示例网址:

https://{site-name}.atlassian.net/attachment/1001/example.txt?token={temp_access_token}

在访问/单击上述网址时,即使用户未登录其帐户,下载也应自动开始

我们要求的理由:

我们正在创建基于 jira 云的服务/应用程序,其功能之一是通过我们的应用程序提供对用户附件的访问。我们的限制(云服务成本(是我们无法下载所有巨大的附件并存储和管理它。因此,我们正在寻找一种解决方案,用户可以使用它直接从JIRA的服务器下载。

在 JWT 生成步骤中,您可以定义 JWT 的有效期。您可以将 JWT 附加到 URL,如下所示:<Jira Base Url>/rest/api/3/...?jwt=....这样,您可以按需生成 JWT,并且它仅在您定义的给定时间内有效。

在了解 JWT for Connect 应用程序页面上的Java 示例中,您可以看到它们如何设置expirationTime。只需按需执行相同的操作即可。以下是代码片段的重要部分:

public class JWTSample {
public String createUriWithJwt()
throws UnsupportedEncodingException, NoSuchAlgorithmException {
long issuedAt = System.currentTimeMillis() / 1000L;
long expiresAt = issuedAt + 180L;
/* ... */
JwtJsonBuilder jwtBuilder = new JsonSmartJwtJsonBuilder()
.issuedAt(issuedAt)
.expirationTime(expiresAt)
.issuer(key);
/* ... */
String jwtToken = /* ... */;
String apiUrl = baseUrl + apiPath + "?jwt=" + jwtToken;
return apiUrl;
}
}

安全问题:我明确提到您应该按需生成这些链接,因为您不应将到期日期设置为超过 5-10 分钟(这已经相当高了(。否则,攻击者只需要检索您生成的链接(URL 通常记录在某处(,并且还能够检索附件。

替代方法

既然您提到您将构建服务/应用程序,为什么不通过您的服务链接附件下载?这样,您就不必暴露潜在的安全威胁的JWT。例如:您在 UI 中提供了一个下载按钮,这会向服务发送 HTTP 请求,您的服务会下载附件,然后将其转发给您的用户。但是,这不符合您向未经身份验证的用户授予访问权限的要求 - 如果这确实是您想要做的。

最新更新