如何在使用express/nodjs/passport重定向时通过会话或cookie传递数据



请参阅前面的问题:如何使用express在重定向的同时传递数据?

我的问题是我有一个Reactjs SPA和一个NodeJS/Express/Passport后端。express后端正在发送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"one_answers"使用会话"。

具体来说,我如何实现这两个其他选项中的一个,以便在身份验证后将数据安全地传递到我的前端?(上面代码块的倒数第二行(。

编辑:值得注意的是,我的API服务器和Front-end文件主机是不同的,所以我需要一个跨站点的解决方案。当然,有些系统使用第三方身份验证系统,我可以模仿。

有人想只在xxxx.com/privatePage中键入吗?我的用户名可以假装是我

Cookies无法解决此问题。用户可以同样轻松地设置cookie。

如果您想了解如何将身份验证和授权凭据安全地传递给公共客户端的示例,请阅读有关OAuth 2.0授权代码授予的信息,这正是它所解决的问题。

您可以在重定向之前在响应上设置cookie。

设置Cookie

res.cookie('cookieName', 'cookieValue')

关于设置cookie的更多信息,您可以参考下面的问题。如何使用express框架在nodejs中设置cookie?。

最新更新