我在基于Spring SAML2构建的Pivotal云代工厂中有一个身份验证微服务。它与PingFederate IDP集成在一起。每当从Web应用程序调用此服务时,就会创建JSESSIONID。为了使该服务正常工作,需要启用粘性会话。 http的auth请求和响应必须由PCF中的同一服务实例处理。但是,这没有发生。请求从一个实例发出,而响应又回到另一个实例。由于响应在当前会话中找不到SAML消息,因此身份验证失败。以下是流程-
浏览器->用于UI的GoRouter->角度UI服务和Nginx反向代理->用于API的GoRouter->身份验证服务-> PingFed
PCF允许基于JSESSIONID进行粘性会话。但是,当网络应用尝试通过Nginx反向代理访问Auth服务时,将为单个JSESSIONID创建2个 VCAP_ID 。因此,来自PingFed的响应无法从请求发出时到达同一身份验证服务实例。因此,我想知道为什么当请求通过反向代理到达时,PCF为什么要为JSESSIONID创建2个__VCAP_ID?
我尝试了不同的存储,例如redis。但是,由于Spring sAML2可在httpstorage上运行,所以我没有成功。就像入侵我不想做的Spring Saml2。
我试图通过重新启动应用程序来检查VCAP_ID属于哪个应用程序。我知道一个VCAP_ID用于反向代理实例,另一个用于auth服务。因此,反向代理的VCAP_ID导致了此问题,并且不确定如何消除该问题。
预期:PCF应该为每个实例的JSESSIONID创建一个VCAP_ID。
实际:PCF为每个实例的JSESSIONID创建两个VCAP_ID