Authentication 用于多域API的浏览器访问令牌存储
我在开发一个单页应用程序时遇到了一些棘手的情况 SPA目前使用JWT令牌访问两个不同域上的两个无状态(无会话)API后端 正常用户流的典型(简化)示例为:Authentication 用于多域API的浏览器访问令牌存储,authentication,cookies,jwt,microservices,access-token,Authentication,Cookies,Jwt,Microservices,Access Token,我在开发一个单页应用程序时遇到了一些棘手的情况 SPA目前使用JWT令牌访问两个不同域上的两个无状态(无会话)API后端 正常用户流的典型(简化)示例为: 用户加载“spa.com”并下载spa应用程序 用户向SPA提供用户名/密码,SPA向“API.SPA.com/auth”发出API请求 该端点向SPA返回一个签名的JWT,然后SPA将其存储在localStorage中 此JWT作为标头添加到SPA发出的任何其他API请求中 SPA现在可以使用相同的JWT“API.SPA.com”和“API
- sameSite不起作用,因为两个API域都需要访问 代币
- 删除httpOnly(让应用程序访问令牌,传递到第二个API)可以通过XSS嗅探访问令牌,并且不会比localStorage更安全
- 我们的框架提供的CSRF解决方案默认情况下需要加密cookie内容,因此通过第二个API无法读取cookie内容。(身份验证API是用Rails编写的,但我不确定这是否与根本问题相关)
有没有人遇到过类似的情况,或者他们可以为我指出一些多域访问令牌身份验证的最佳做法?最简单的选择是只将访问令牌存储在浏览器内存中,而不是本地存储中。如果用户刷新页面或进行多选项卡浏览,则需要处理静默令牌更新 我已经添加了一些到我的博客文章和代码示例的链接,以及一些设计模式,它们可以帮助您实现自己的解决方案。要使SPA的安全性和可用性达到我们的利益相关者满意的水平,可能会很棘手 简单代码示例 令牌续订依赖于隐藏的iframe令牌续订,除非使用持久的SSO Cookie,否则在具有默认设置的Safari中可能无法工作
- 将访问令牌存储在浏览器内存中
- 在仅HTTP加密的web域cookie中存储刷新令牌