基础设施:
cloud: aws beanstalk为容器代理服务器应用程序负载均衡器打开nginx -仅https,私有子网中的默认进程(https) 2+实例在https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-endtoend.html https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-singleinstance-docker.html之后启用端到端加密
运行docker的实例上的自签名证书
在本地,我们有一个3容器来模拟基础设施,
1 nginx: 443作为负载均衡,https反向代理2 app容器: 3000:3000,3001:3001,所以还没有端到端加密
软件: autho passport (https://github.com/auth0/passport-auth0) express react cookie-session包
const sessionConfig = {
name: 'sessionId',
secret: uid.sync(18),
secure: true,
httpOnly: true,
secureProxy: true,
maxAge: 1800 * 1000
};工作流程:打开网站,点击登录链接,跳转到auth0登录页面,输入用户名/护照后,点击提交。
当我们有超过1个实例在运行时,我们遇到了“重定向太多次”的问题。如果我在aws中打开目标组的粘滞会话,问题就会消失。
我们在本地docker环境中也看到了同样的情况。
在这段代码中,
router.get('/callback', (req, res, next) => {
authenticate('auth0', (authErr, user) => {
if (authErr) {
console.error(`Error authenticating user: ${authErr}`);
return next(authErr);
}
if (!user) {
console.info(`No user data, redirecting to login page`);
return res.redirect('/login');
}逻辑总是命中- if (!user),我们不确定为什么多实例负载均衡器设置会发生这种情况。
更新:
抱歉,我是个新手,
我想知道是否可以使用cookie-session而不是express-session,因为JWT应该不在服务器上存储信息。
我之所以问这个问题,是因为我读过一些关于passport和Auth0的教程,其中也提到了expression-session。
既然Auth0使用的是JWT,我可以使用cookie-session吗?如果是这样,我能做错什么呢?
PS。下面是我的会话配置:
const sessionConfig = {
name: 'sessionId',
domain: 'example.com',
secret: uid.sync(18),
secure: true,
httpOnly: true,
maxAge: 1800 * 1000
};请给我建议和帮助。谢谢!杰伦
发布于 2019-08-02 03:48:45
问题已解决。
这是因为密钥是随机的,所以固定的密钥不会在服务器之间共享。
https://stackoverflow.com/questions/57259876
复制相似问题