所以我在Express中使用Passport.js来使用passport-azure-oauth2
策略对应用程序中的用户进行身份验证。
第一次登录工作正常,Microsoft门户将我带回/cb
app.get("/cb", auth.passport.authenticate("provider", {
successRedirect: "/",
failureRedirect: "/login"
}), function (req, res) {
res.redirect("/");
});
它成功地将我重定向到"/"。此时,我可以通过此注销"已登录">
if(req.isAuthenticated()) {
console.log('Logged in');
} else {
console.log('Not logged in');
}
当我注销并尝试重新登录,或尝试使用其他浏览器登录时,就会出现问题。Microsoft门户总是将我带回"/login",让我陷入循环。
登录脚本很简单:
app.get('/logout', function(req, res) {
req.logout();
res.redirect('/');
});
在Chrome上,当我登录(甚至成功(时,它会记录一个错误:Set-Cookie header is ignored in response from url: https://login.microsoftonline.com/common/login. Cookie length should be less than or equal to 4096 characters.
我猜这个问题可能与此有关?但是我已经尝试了我能想到的一切,但无济于事。
自从你问这个问题以来已经有一段时间了,但也许这对其他人有帮助。
经过一天的调试,我发现我的 react 应用程序的服务工作者正在弄乱护照身份验证策略。
如您所描述的,当您第一次加载页面时,服务工作者尚未注册,但是当您被重定向到主页时,index.jsx 中的脚本在浏览器中启用工作线程(我用它来显示 Chrome 上的安装应用程序按钮(,所以如果您注销并尝试再次登录,就会出现此问题。
如果您赶时间,我建议您暂时禁用该工作线程,如果它对您的应用程序的正确运行不是很重要,并且您会发现一切正常。
它适用于本地主机,因为脚本检测到您的环境并且不会启动。
不幸的是,我还没有找到永久的解决方案。