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