nginx 使用Angular 15和Keycloak 20.0.5的Web应用程序|页面刷新后重定向到登录页面

cidc1ykv  于 6个月前  发布在  Nginx
关注(0)|答案(1)|浏览(127)

我正在使用Angular 15和Sping Boot 开发一个Web应用程序。作为IAM解决方案,我们使用Keycloak(20.0.5)。我们已经为Web应用程序创建了一个公共客户端(web-application)。我们已经在Kubernetes中部署了angular应用程序,keycloak和其他Sping Boot 微服务(在EKS集群中)。
前端Kubernetes服务名称-main-frontend-service

还请注意应用和keycloak部署在不同的集群中。

  • Web应用程序URL:* http://a************.amazonaws.com/main-frontend
  • Keycloak URL:* http://b************.amazonaws.com/keycloak-service

现在我们面临的问题是,当用户刷新页面或复制页面或尝试在新标签中打开页面时,用户被重定向到登录页面。

请查找以下与前端keycloak客户端相关的代码片段

import {KeycloakService} from "keycloak-angular";
import {environment} from "../../environments/environment";

export function initializeKeycloak(keycloak: KeycloakService) {
  return () => keycloak.init({
    config: {
      url: `${environment.keycloakConfig.url}`,
      realm: `${environment.keycloakConfig.realm}`,
      clientId: `${environment.keycloakConfig.clientId}`,
    },
    initOptions: {
      // checkLoginIframe: true,
      // checkLoginIframeInterval: 300,
      onLoad: 'login-required',
      // silentCheckSsoRedirectUri:
      //   window.location.origin + '/assets/silent-check-sso.html'
    },
  });
}

字符串
我们已经尝试了目前建议的解决方案,但无法找到解决方案。

请查找keycloak客户端配置

  • 根URL:* http://a************.amazonaws.com/main-frontend
  • 重定向URL:* /main-frontend

x1c 0d1x的数据

另请在kubernetes中查找main-frontend-service的nginx配置

paths:
- backend:
    service:
      name: main-frontend-service
      port:
        number: 80
  path: /(/|$)(.*)
  pathType: Prefix
- backend:
    service:
      name: main-frontend-service
      port:
        number: 80
  path: /main-frontend(/|$)(.*)
  pathType: Prefix

已编辑

  • Web应用程序(在本地启动时)在localhost中正常工作,如预期 *

请找到当前的架构。所有的后端API调用都是通过spring-gateway-service,它集成了spring security和keycloak。
示例API:http:a*********.amazonaws.com/gateway-service/service-a/api/<endpoint>


的数据
如果你能在这个问题上给予给予帮助,我真的很感激。

oxf4rvwz

oxf4rvwz1#

你的Angular应用中的token不会在标签之间共享,这是意料之中的:想象一下,如果在任何其他标签中运行的任何其他JavaScript代码都可以访问你的token。
您可以预期,与当前浏览器的用户会话在Keycloak上保持打开状态,并且authorization_code流在新选项卡上静默完成(新令牌被传递到新的公共客户端示例,而无需用户输入凭据)。
您可以研究为什么这个新选项卡没有绑定到Keycloak上的现有会话(或本次会议结束的原因),但是Spring Security团队不鼓励使用公共客户端(以及许多其他)。推荐的替代方法是在S单个P年龄A之间使用配置为OAuth2机密客户端的B确认端FF前端应用程序和资源服务器。
我使用spring-cloud-gatewayTokenRelay过滤器编写了a tutorial,作为Angular应用程序和Spring资源服务器之间的BFF。在deploy on K8s中应用了完全相同的模式。Keycloak在自己的命名空间中运行(相同的集群,但在不同的集群中会有相同的行为)。您可以尝试创建一个帐户,登录并打开一个新的选项卡,您将被连接。

相关问题