rest - 用 HTML5 音频/视频(和纯图像)实现无状态身份验证,有可能吗?
问题描述
我们有一个 REST 风格的 API,并尝试尽可能地遵循 REST 原则,当然这也包括无状态性。
虽然我们后端的大部分确实是无状态的,但有一件事似乎无法实现,那就是处理与 API 无关的静态资源的身份验证。我知道有一些方法可以使用一些基于令牌的方法(例如 JWT)来实现无状态身份验证。但这需要在请求的消息正文中设置一些标头或传输凭据信息。
当只需要保护 API 请求时,这不会有问题,因为我们可以轻松地修改 XHR 或相应地获取请求。
但问题是我们还需要保护静态资源,如图像和音频/视频文件。对于图像,我可以通过 XHR/fetch 加载它们,尽管与使用普通图像标签相比,这已经相当麻烦了。
但是一旦涉及到html5视频/音频,我还没有找到实现这一点的方法,有可能吗?
目前我们只使用安全的 httpOnly cookie,所以在这种情况下,图像或音频都没有问题。使用客户端生成的 cookie(具有类似 JWT 的有效负载)可能是一种解决方案吗?当然,这会引发另一个潜在的安全问题——如果发生 XSS 漏洞——cookie 及其信息可能会被盗,而这对于 httponly cookie 是不可能的。
有什么想法可以实现同样适用于图像和 html5 音频或视频的纯无状态身份验证(而且安全性也不低)?
PS:由于各种原因, HTTP Basic Auth不是一个选项。
解决方案
没有想法?嗯。好的,所以也许我可以回答我自己的问题......
一个潜在的解决方案是使用 JWT 之类的东西,但仍使用 cookie 作为传输机制。因此,令牌在服务器上生成,并通过 cookie 设置,就像之前使用传统会话 cookie 一样。似乎我可以通过这种方法获得“两全其美”:
客户端仍然无法访问 cookie 的内容,因此不需要了解任何有关授权的信息。客户端唯一需要知道的是身份验证的概念,即要求用户提供凭据并在返回 401 后立即将它们发送到服务器。
服务器现在无需进行任何会话管理,它所要做的就是验证令牌。
而且,最重要的是:这不仅适用于我可以操作标头和/或消息正文的请求(如使用 XHR/fetch),而且适用于任何类型的静态资源,包括图像和 html5 音频和视频
这听起来像是一个好的解决方案吗?如果您认为是,请为这个答案投票!谢谢你。
推荐阅读
- reactjs - 带有反应的圆形进度条
- database - 在猫鼬中, User.findOne( {username : req.params.userName} ); 没有找到一些特定的文件
- javascript - Google Domain 拒绝使用 onClick 调用函数
- php - 检查一个单词是否出现在字符串中,而不是在第一个和最后一个
- java - Java中的享元模式
- python - 为什么语音识别无法识别任何声音
- javascript - “id”后面的分号是一个意外的标记
- java - Android要求不要在主线程上查询,但asyc查询正在延迟
- angular - 使用 chrome-tools 检查 AVD 时,如何配置 Ionic 5.24 / Capacitor 2.0.1 / Angular 9.1.2 项目以访问打字稿源?
- tableau-api - 将 Tableau 中折线图的度量转换为日期