【问题标题】:Download large files securely using JWT使用 JWT 安全下载大文件
【发布时间】:2020-04-08 21:29:50
【问题描述】:

我们有一个使用 JWT 作为 API 身份验证方式的 Angular 项目

除了下载文件外一切正常(它可能非常大,例如 10 GB)

我读了Download files in Javascript with OAuth2 建议我们应该将令牌作为查询参数传递

但是当我用谷歌搜索时,我发现很多网站都不推荐这样做,我想知道有什么替代方案

那么有没有比在查询参数中传递文件更安全的解决方案来下载文件?

【问题讨论】:

    标签: angular http security download jwt


    【解决方案1】:

    类似于 AWS S3 签名的 url,我建议您生成一个特殊的 JWT 令牌来下载文件并使用查询参数传递它:

    1) 客户端调用POST /request-download/[fileID] - 请求授权下载文件。

    2) 服务器返回特殊的 JWT 仅用于在响应中下载文件

    3) 客户端使用GET /path-to-file?token=[the-token-from-response]下载文件

    您只需要在服务器上实现自定义身份验证/授权逻辑即可接受文件的特殊 JWT 令牌。

    您可以跳过第一步,只返回特殊文件下载令牌以与每个文件一起下载。

    我所说的“下载文件的特殊 JWT 令牌”是一个标准的 JWT 令牌,它只授权持有者下载单个文件,没有别的 - 您可以将 fileId 作为声明传递给令牌,设置到期时间以满足您的需求。然后您可以在下载端点上验证令牌的有效性。很容易。

    【讨论】:

    • “仅用于下载文件的特殊 JWT”和“用于下载每个文件的签名令牌”是什么意思
    • 我所说的“下载文件的特殊 JWT 令牌”是一个标准的 JWT 令牌,它只授权持有者下载单个文件,没有别的 - 你可以将 fileId 传递给toke,设置过期时间以满足您的需求。然后您可以轻松地在下载端点上验证令牌的有效性。
    猜你喜欢
    • 2018-08-16
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多