所以,目前我有一个前端服务器,一个bff(前端服务器的后端也称为网关),一个资源服务器和身份验证服务器。
BFF 配置为具有 spring oauth 2 客户端依赖项的 java spring boot。
每个 oauth 流程都是通过 BFF 服务器完成的。此 BFF 重定向到前端用户(浏览器)身份验证服务器 uri 和端点。身份验证成功后,它会存储访问和刷新令牌,然后从资源服务器获取资源。
在本地一切正常,我设置了一个链接到 127.0.0.1 的自定义域“自定义域”,以避免使用 localhost,因为重定向 uri 问题不允许您指定“localhost”作为重定向乌里。
此外,BFF 服务具有 /client 的上下文路径,以便与身份验证服务器不同,并且不会与 cookie 发生冲突(这至少是我在 idk 中读到的内容,如果它必须正确的话)
现在,我正在尝试将它们部署在本地 docker 上的 kubernetes 集群中。所有 4 个服务都位于同一个集群中,并且每个服务都是 ClusterIp。此外,还可以使用入口来路由集群中的流量。
我还有两个自定义域:
但是,网关的 Issuer-uri (与集群内的 auth 服务器通信的地址)设置为 auth-server (kubernetes 标签)。所以有两种通讯方式:
不幸的是,有一个问题,首先,当 auth.custom.com/oauth2/authorize?response_type/* 将到达身份验证服务器时,日志中将出现 Invoking ExceptionTranslationFilter ,这与 Invoking OAuth2AuthorizationEndpointFilter 的本地日志不同(8/20) 正在进行中。
可以以某种方式解释有关授权服务器以及 kubernetes 相关内容的会话/域问题/主题吗?
例如,身份验证服务器可以位于同一个集群内吗?应该是集群、节点端口、负载均衡器吗?哪些会话/域问题会阻止身份验证工作流程正常工作?
我在 Baeldung 上的 BFF 教程已部署到 K8s 集群,并且 3 个授权服务器之一(Keycloak 实例)由同一集群托管。
授权服务器和 BFF 完全分开配置:不同的命名空间、不同的入口甚至不同的子域(分别为
oidc.c4-soft.com
和 bff.demo.c4-soft.com
)。
此外,BFF 是通过配置为 OAuth2 客户端的
spring-cloud-gateway
和 TokenRelay
过滤器实现的(显然,就像您正在做的那样)。
入口仅用于将
oidc.c4-soft.com
路由到 Keycloak 服务,将 bff.demo.c4-soft.com
路由到 BFF 服务。根据请求的路径如何处理请求由 spring-cloud-gateway
configuration 决定,就像在 K8s 之外运行时一样。
资源服务器(REST API)和前端(Angular 应用程序)都基于同一主机(和端口)上的路径前缀提供服务(和路由),这极大地简化了 CORS 配置:请求具有相同的来源。