【发布时间】:2021-08-03 07:08:01
【问题描述】:
我正在尝试使用我的 React 应用程序设置 SAML 单点登录。后端是快递/护照设置。前端是 Reactjs。
我加载了初始的 Reactjs SPA,它注意到我没有设置用户名。 ...然后它重定向到 SSO 页面。我输入我的信息(根据需要),然后在成功后指出身份提供者将我的客户转发回/login/callback 路由的位置。反过来,该路由应该将用户转发回其原始 URL(由 req.body.RelayState 定义)。
回调路由如下所示:
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 的人都可以假装是我)。
身份验证后如何安全地将数据传递到我的前端?
【问题讨论】:
标签: node.js reactjs express passport.js