【发布时间】:2020-02-05 18:53:47
【问题描述】:
我已经在网上搜索了有关此问题的答案,但没有什么与我的设置非常相似。
所以我有一个单页应用程序和 3 个服务:
- 后端服务 - 服务 A
- 为 SPA 的静态文件提供服务的服务 - 服务 B
- 身份验证服务 - 服务 C
流程如下:
- 用户通过访问服务 B 的
/访问该站点会被重定向到服务 B 的/login。 - 用户输入凭据并将其发送到服务 C 以执行身份验证过程并为用户获取权限,此数据在 JWT 中发送。
- 然后服务 B 将其放入 cookie 中并将其返回给用户的浏览器。
- 然后用户执行了一个需要 JWT 的任务,所以我必须将该 cookie 发送到服务 A,但是有一个问题,我不能这样做,cookie 仅适用于服务 A。
https://auth0.com/docs/security/store-tokens - 这个链接是我发现的一个来源的例子,它讨论了在哪里存储 SPA 令牌的问题。 它在那里说我应该使用 cookie 来存储 JWT,如果:
- 如果有我自己的后端
- 如果后端与网站本身在同一个域中。
问题是我的后端有一个不同的 URL,它是一个完全不同的服务,所以使用 cookie 不是解决方案,或者至少在我看来是这样。
然后它说:
如果您的单页应用完全有后端服务器,则应使用授权代码流、带有代码交换证明密钥的授权代码流 (PKCE) 或混合流在服务器端处理令牌。
这里的问题是他们甚至没有提到如何以及在哪里存储 JWT,以便我可以从多个域访问它。
我还没有找到一种干净的方法来将该 JWT 保存在用户的浏览器上,并在我向后端执行的每个请求中发送它。
我需要的解决方案是以安全的方式将 JWT 保存在用户的浏览器中,以便我将其发送到我需要的任何后端服务。
感谢您迄今为止的阅读和帮助!
【问题讨论】:
标签: authentication architecture jwt authorization distributed-system