Spring授权服务器Oauth 2.0 - 真实部署问题

问题描述 投票:0回答:1

所以,目前我有一个前端服务器,一个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。此外,还可以使用入口来路由集群中的流量。

我还有两个自定义域:

  1. 链接到网关的 api.custom.com
  2. 链接到身份验证服务器的 auth.custom.com

但是,网关的 Issuer-uri (与集群内的 auth 服务器通信的地址)设置为 auth-server (kubernetes 标签)。所以有两种通讯方式:

  1. FE - bff 发送重定向 uri ( auth.custom.com ) 时的身份验证服务器
  2. BFF - 用于直接通信的 AUTH 服务器(auth-server)

不幸的是,有一个问题,首先,当 auth.custom.com/oauth2/authorize?response_type/* 将到达身份验证服务器时,日志中将出现 Invoking ExceptionTranslationFilter ,这与 Invoking OAuth2AuthorizationEndpointFilter 的本地日志不同(8/20) 正在进行中。

可以以某种方式解释有关授权服务器以及 kubernetes 相关内容的会话/域问题/主题吗?

例如,身份验证服务器可以位于同一个集群内吗?应该是集群、节点端口、负载均衡器吗?哪些会话/域问题会阻止身份验证工作流程正常工作?

docker kubernetes spring-security spring-oauth2 spring-authorization-server
1个回答
1
投票

我在 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 配置:请求具有相同的来源。

© www.soinside.com 2019 - 2024. All rights reserved.