我有两个服务在不同的子域上运行:1)Node.js,Express,PassportJS,2)基于PHP。两个服务都暴露在同一个门户中,为了避免要求用户输入两次凭证,我们从PHP服务器调用Node.js登录API。节点返回会话cookie(connect.sid
),我们将此转发给客户端,域名设置为<<rootdomain>>.com
。现在,当客户端调用Node.js时,我们可以看到cookie被发送到Node但仍然无法进行身份验证。
我已经验证了以下内容:
从PHP服务器到节点的登录API调用使用connect.sid
cookie返回成功,并将会话条目添加到Redis服务器(我们使用Redis存储会话)
Cookie已在浏览器中正确设置
当浏览器调用Node.js connect.sid
时,cookie被发送到服务器
如果我们直接从客户端调用login API,一切都按预期工作。基本上独立的节点应用程序没有任何问题。
我很好奇Node是否使用User-agent,IP或其他东西来验证connect.sid
cookie?或者它是否与Passport / Express会话参数值相关?可能有什么问题?仅供参考,目前网站不在SSL上运行。
以下是我的会议参数:
store = new RedisStore({
port: 6379,
host: 'localhost',
client : redis
});
var sess = {
store: store,
secret: 'some secret',
rolling: true,
cookie: { maxAge : 36000000, secure: false },
saveUninitialized: true,
resave: true,
sortName: 0,
sortModified:0,
sortSize: 0
};
提前致谢