【问题标题】:JWT-based authentication for <img> tags?<img> 标签的基于 JWT 的身份验证?
【发布时间】:2015-10-16 16:47:06
【问题描述】:

假设我有一个使用 JWT 令牌对后端 REST api 进行身份验证的单页应用程序。执行 REST 请求时,我在 http 标头中传输 JWT 令牌。到目前为止,一切顺利。

现在,假设我想从服务器下载一个图像,并且我希望该图像仅供经过身份验证的用户访问。在服务器上,这没问题:只需定义一个传递图像的路由,并在该路由中验证 JWT 令牌。

但是:如何将令牌从客户端传输到服务器?如果我使用常规的 &lt;img ...&gt; 标记,我无法将令牌附加为 http 标头。我该怎么办?

我基本上可以考虑添加令牌,例如base64 编码的查询字符串,但这似乎不是很安全,因为令牌随后出现在浏览器的历史记录中。另一方面,我想不出另一种方法,不完全使用 JavaScript 加载图像。

有什么提示吗?

【问题讨论】:

    标签: html image authentication single-page-application jwt


    【解决方案1】:

    如果我想到 Amazon S3,那么这里就是你想要的签名 url。正如您已经建议的那样,在查询字符串中添加一个标记就可以了。

    关于安全性:我认为这是令牌到期日期的问题。由于令牌没有失效,因此使用签名 URL 可能会更好:

    1. 获取 JWT
    2. 使用该令牌获取签名 URL
    3. 使用该 URL 检索 img

    通过这种方式,您可以独立于 JWT 控制签名 URL 的过期时间,还可以定义用于签名 URL 的令牌的长度。

    【讨论】:

    • 谢谢。但是,如果 URL 被用户复制并通过电子邮件发送给另一个人,那么图像不会显示出来吗?
    • 是的,但这就像泄露他的凭据一样,他也可以把它们泄露出去,同样适用于签名链接,链接也会在某个时候过期。
    • 你是怎么做到的
    • 你的意思是到期吗?链接仅在您通常设置为 5 小时的预定义时间有效,签署链接可在 S3 中提供该功能,请参阅docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2016-05-01
    • 2011-04-18
    • 1970-01-01
    • 2019-05-19
    • 2016-09-21
    • 2016-06-01
    • 2021-01-27
    相关资源
    最近更新 更多