我计划实现一个架构,其中:
API 网关与多个服务和 Vue.js 前端应用程序交互。API 网关创建自己的会话,将用户请求链接到存储的令牌。前端使用会话 cookie 与 API 网关通信。身份验证通过 Keycloak 作为 SSO 提供程序处理。目标是让前端不知道实际令牌,同时保持安全性和灵活性。
灵感来源: https: //medium.com/@a.zagarella/microservices-architecture-a-real-business-world-scenario-c77c31a957fb
文章中介绍了Spring Cloud Gateway的使用,但在我的例子中它将是golang上的api网关。
实施此类设置的最佳做法有哪些?我应该注意哪些潜在陷阱?
这种方法看起来与链接文章中描述的方法类似,但我想获得更多关于如何有效实施它的见解。
请提供以下方面的指导:
如何在 API 网关上安全地存储和管理令牌 前端和 API 网关之间的会话管理的最佳实践 如何处理令牌刷新和过期 我应该牢记的任何安全注意事项 我特别感兴趣的是如何在这个架构中平衡安全性、易用性和可扩展性。
感谢您的专业知识!
这种将令牌存储在网关中(配置为)并用基于 的授权替换基于 cookie 的授权,同时将请求路由到下游资源服务器(使用过滤器)的方法
oauth2Client
通常oauth2Login
被Bearer
称为TokenRelay
“ OAuth2 BFF”(Backend-For-Frontend)。我在 Baeldung 上为此写了一篇文章。它包含所有实现细节和一个示例 Vue 应用程序(以及 Angular 和 React 应用程序)。
关于可扩展性,正如文章中提到的,您应该考虑使用Spring Session(使用 Redis 或类似软件在网关实例之间共享会话数据)。
关于令牌刷新,
TokenRelay
过滤器和 Spring Security 将为您处理。一旦正确配置了 BFF,前端就只使用它应该熟悉的“标准”会话 cookie 和 CSRF 令牌,下游服务是标准资源服务器。所以,双方都没有什么复杂的。然而,在 Vue 的情况下有一个陷阱,它不能透明地处理 CSRF 令牌(例如 Angular 那样)。因此,您必须编写一些代码(请求拦截器?)来读取
XSRF-TOKEN
cookie 值并将其设置为发送到后端X-XSRF-TOKEN
的所有POST
、PUT
、PATCH
和DELETE
请求的标头。