我们正在努力将我们的整体ASP.NET Webform应用程序移动到微服务,首先,我们使用Nginx作为代理路由器,Node express作为API网关 . 从浏览器,任何.aspx请求将从Nginx路由到现有的ASP.NET Webform应用程序,新的调用将路由到API Gateway Till路由它的所有工作正常但问题是会话管理,ASP.NET Webform应用程序正在使用Redis as会话存储和我们尝试访问API网关的同一会话ASP.NET将sessionID存储在“ASP.NET_SessionId”cookie中,而在Redis中,每个会话创建两个密钥,如SessionID_Data SessionID_Internal我们尝试将Express-redis会话设置为相同Gateway中的“ASP.NET_SessionId”但它创建了不同的密钥,然后我们尝试获取cookie值并尝试在API网关中生成相同的ID
enter code here
app.use(session({
genid: function(req) {
//Get SessionID from Cookie and Return
},
store: new RedisStore({
host:HOST,
port:PORT,
pass:PASSWORD,
prefix: APP_PREFIX //Application Prefix used by ASP.NET
}),
name: 'ASP.NET_SessionId',
secret: APP_SECRET,
resave: false,
saveUninitialized: false
}));
问题是ASP.NET为每个用户会话在Redis中创建了两个密钥,因此我们无法设置API网关
有没有办法在API网关中共享ASP.NET Web表单会话,或者如果我们创建身份验证和会话管理作为单独的微服务,那么该会话可以在ASP.NET Web表单和API网关中使用,它将自动增加Redis的TTL每个请求上的密钥?