JWT-based <img> 标签的身份验证?
JWT-based authentication for <img> tags?
假设我有一个使用 JWT 令牌对后端 REST 进行身份验证的单页应用程序 api。我在执行 REST 请求时在 http header 中传输 JWT 令牌。到目前为止,还不错。
现在,假设我想从服务器下载图像,并且我希望只有经过身份验证的用户才能访问该图像。在服务器上,这没问题:只需定义一个传递图像的路由,并在该路由中验证 JWT 令牌。
但是:如何将令牌从客户端传输到服务器?如果我使用常规 <img ...>
标记,我无法将令牌附加为 http header。我该怎么办?
我基本上可以想到添加令牌,例如base64 编码,查询字符串,但这似乎不是很安全,因为令牌随后会出现在浏览器的历史记录中。另一方面,我想不出另一种方法,无需完全使用 JavaScript.
加载图像
有什么提示吗?
如果我想到 Amazon S3,签名的 url 就是您想要的。正如您已经建议的那样,向查询字符串添加一个标记就可以了。
关于安全性:我认为这是令牌到期日期的问题。由于令牌没有失效,因此最好使用已签名的 URLs:
- 获取 JWT
- 使用该令牌
获得签名URL
- 使用 URL 检索 img
通过这种方式,您可以独立于 JWT 控制已签名 URL 的到期时间,还可以定义用于已签名 URL 的令牌的长度。
假设我有一个使用 JWT 令牌对后端 REST 进行身份验证的单页应用程序 api。我在执行 REST 请求时在 http header 中传输 JWT 令牌。到目前为止,还不错。
现在,假设我想从服务器下载图像,并且我希望只有经过身份验证的用户才能访问该图像。在服务器上,这没问题:只需定义一个传递图像的路由,并在该路由中验证 JWT 令牌。
但是:如何将令牌从客户端传输到服务器?如果我使用常规 <img ...>
标记,我无法将令牌附加为 http header。我该怎么办?
我基本上可以想到添加令牌,例如base64 编码,查询字符串,但这似乎不是很安全,因为令牌随后会出现在浏览器的历史记录中。另一方面,我想不出另一种方法,无需完全使用 JavaScript.
加载图像有什么提示吗?
如果我想到 Amazon S3,签名的 url 就是您想要的。正如您已经建议的那样,向查询字符串添加一个标记就可以了。
关于安全性:我认为这是令牌到期日期的问题。由于令牌没有失效,因此最好使用已签名的 URLs:
- 获取 JWT
- 使用该令牌 获得签名URL
- 使用 URL 检索 img
通过这种方式,您可以独立于 JWT 控制已签名 URL 的到期时间,还可以定义用于已签名 URL 的令牌的长度。