node.js - 如何在使用 express/nodejs/passport 重定向时使用会话或 cookie 传递数据?
问题描述
请参阅上一个问题:如何使用 express 传递数据和重定向?
我的问题是我有一个 Reactjs SPA 和一个 NodeJS/Express/Passport 后端。快递后端正在发送一个res.redirect(%url%)
,但我无法与该重定向一起安全地发送其他信息。
上一个问题的答案是“发送 cookie 或在会话中发送数据”。如何才能做到这一点?
我目前的代码:
samlRouter.use(session(config.session));
samlRouter.use(passport.initialize());
samlRouter.use(passport.session());
samlRouter.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', req.header('origin'));
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-Width, Content-Type, Accept, Authorization');
res.header('Access-Control-Allow-Credentials', 'true'); //SAML
if (req.method == 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET');
return res.status(200).json({})
}
next();
})
samlRouter.post('/login/callback',
(req, res, next) => {
passport.authenticate('saml', config.saml.options)(req, res, next)
},
(req, res, next) => {
console.log('req.user.nameID :>> ', req.user?.nameID); // ***THIS IS CORRECT**
req.session.user = req.user;
return res.redirect(`${req.body.RelayState}`);
});
问题是 - 我需要告诉前端 reactjs 应用程序 req.user.nameID 是谁。我不能把它放在重定向的查询字符串中,因为它是登录名(因此任何想输入 xxxx.com/privatePage?myusername 的人都可以假装是我)。据我了解,其他选项是“设置 cookie”和“使用会话”。
具体来说,我如何实现这两个其他选项之一以在身份验证后将数据安全地传递到我的前端?(上面代码块的倒数第二行)。
编辑:值得注意的是我的 API 服务器和我的前端文件主机是不同的——所以我需要一个跨站点解决方案。当然,有些系统使用我可以模拟的第三方身份验证系统。
解决方案
任何只想输入 xxxx.com/privatePage?myusername 的人都可以假装是我
Cookie 不能解决这个问题。用户可以轻松设置 cookie。
如果您想了解如何将身份验证和授权凭据安全地传递给公共客户端的示例,请阅读有关 OAuth 2.0授权代码授权的信息,这正是它解决的问题。
推荐阅读
- java - 有没有办法弥合给定代码和实现之间的差异?
- php - 如何在单独的 PHP 文档中使用 $_GET 方法值
- android - 无法通过改造从服务器获取数据
- javascript - 训练简单策略代理时遇到问题。错误:找不到任何变量与损失函数 y=f(x) 的结果之间的联系
- java - Facebook 可以检测我是否在我的 Java 应用程序中使用他们的私有 Graphql API 吗?
- java - 如何停止while循环无限运行?
- python - 遍历数据框并根据列和条件计算数字
- java - 大部分来自同一线程的方法调用的 Java 同步
- pdf - 如何获取pdf的文本内容
- c# - 启动画面和主窗口