首页 > 解决方案 > 用 HTML5 音频/视频(和纯图像)实现无状态身份验证,有可能吗?

问题描述

我们有一个 REST 风格的 API,并尝试尽可能地遵循 REST 原则,当然这也包括无状态性。

虽然我们后端的大部分确实是无状态的,但有一件事似乎无法实现,那就是处理与 API 无关的静态资源的身份验证。我知道有一些方法可以使用一些基于令牌的方法(例如 JWT)来实现无状态身份验证。但这需要在请求的消息正文中设置一些标头或传输凭据信息。

当只需要保护 API 请求时,这不会有问题,因为我们可以轻松地修改 XHR 或相应地获取请求。

但问题是我们还需要保护静态资源,如图像和音频/视频文件。对于图像,我可以通过 XHR/fetch 加载它们,尽管与使用普通图像标签相比,这已经相当麻烦了。

但是一旦涉及到html5视频/音频,我还没有找到实现这一点的方法,有可能吗?

目前我们只使用安全的 httpOnly cookie,所以在这种情况下,图像或音频都没有问题。使用客户端生成的 cookie(具有类似 JWT 的有效负载)可能是一种解决方案吗?当然,这会引发另一个潜在的安全问题——如果发生 XSS 漏洞——cookie 及其信息可能会被盗,而这对于 httponly cookie 是不可能的。

有什么想法可以实现同样适用于图像和 html5 音频或视频的纯无状态身份验证(而且安全性也不低)?

PS:由于各种原因, HTTP Basic Auth不是一个选项。

标签: restauthenticationhtml5-videostatehtml5-audio

解决方案


没有想法?嗯。好的,所以也许我可以回答我自己的问题......

一个潜在的解决方案是使用 JWT 之类的东西,但仍使用 cookie 作为传输机制。因此,令牌在服务器上生成,并通过 cookie 设置,就像之前使用传统会话 cookie 一样。似乎我可以通过这种方法获得“两全其美”:

  • 客户端仍然无法访问 cookie 的内容,因此不需要了解任何有关授权的信息。客户端唯一需要知道的是身份验证的概念,即要求用户提供凭据并在返回 401 后立即将它们发送到服务器。

  • 服务器现在无需进行任何会话管理,它所要做的就是验证令牌。

  • 而且,最重要的是:这不仅适用于我可以操作标头和/或消息正文的请求(如使用 XHR/fetch),而且适用于任何类型的静态资源,包括图像和 html5 音频和视频

这听起来像是一个好的解决方案吗?如果您认为是,请为这个答案投票!谢谢你。


推荐阅读