护照.js Azure AD 身份验证总是在第二次失败



所以我在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 上的安装应用程序按钮(,所以如果您注销并尝试再次登录,就会出现此问题。

如果您赶时间,我建议您暂时禁用该工作线程,如果它对您的应用程序的正确运行不是很重要,并且您会发现一切正常。

它适用于本地主机,因为脚本检测到您的环境并且不会启动。

不幸的是,我还没有找到永久的解决方案。

最新更新