amazon-web-services - auth0+passport.js 超过 1 个实例的重定向过多
问题描述
基础设施:
云: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 应用程序容器:分别是 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 不应该在服务器中存储信息。
我之所以问,是因为我已经阅读了一些护照和 Auth0 的教程,并且它也只提到了表达式会话。
由于 Auth0 使用 JWT,我可以使用 cookie-session 吗?如果是这样,我会做错什么?
PS。这是我的会话配置:
const sessionConfig = {
name: 'sessionId',
domain: 'example.com',
secret: uid.sync(18),
secure: true,
httpOnly: true,
maxAge: 1800 * 1000
};
请提供建议和帮助。谢谢!周杰伦
解决方案
问题已解决。
这是因为秘密是随机的,所以服务器之间没有共享一个固定的秘密。
推荐阅读
- java - 创建休眠配置:未设置“hibernate.dialect”时,对 DialectResolutionInfo 的访问不能为空
- google-cloud-platform - Pubsub 消息缺少时间戳属性
- jquery - 如何在 jQuery 中创建验证
- powershell - 如何启动 .bat 文件以与 Powershell 分开运行(2pt 问题的 pt1)
- javascript - 如何优先考虑特定的 ajax 调用?
- c# - 通过 USB 端口进行简单的串行通信
- python-3.x - python:将excel转换为csv
- .net - 使用 TeamFoundationServer.Client 获取本地工作空间
- python - Pycharm 警告:预期为“collection.iterable”,改为使用迭代器
- excel - 如何通过将 N/A 值视为零来执行多个 VLOOKUP 值的求和?