重定向不适用于 Safari 和 Firefox

Redirection not working on Safari and Firefox

我正在使用 express-ntlm 在我的应用程序上对我的用户进行身份验证。对于 Mac OS,浏览器要求输入用户名和密码,当用户输入错误的密码时,它会显示一个带有禁止消息的页面。我在我的自定义库上覆盖了 forbidden 函数,这样我就可以将用户重定向到当前的 URL,这样他们就可以再次插入用户名和密码。出于某种原因,这适用于 Chrome 但不适用于 Firefox 或 Safari,它只是不断刷新页面但不会提示用户输入用户名和密码。看起来浏览器正在存储失败的登录尝试,并且不允许您重试。

forbidden: function(req,res){
    res
      .status(401)
      .send(`<!DOCTYPE html><html><head><body>
      <h2>Login failed, Please try again.</h2></body></head>
      <script>
      window.setTimeout(function() {
        window.location.href = '${req.url}';
      }, 1000);
      </script></html>`)
  }

只有将 NTLM 用于 SSO(无需手动输入凭据),NTLM 才有意义。

对于您的情况,我建议您创建自己的 username/password 表单,然后使用一些 Active Directory / LDAP 模块对域控制器进行身份验证。如果成功,用户将登录,否则显示错误,用户可以重试。

如果浏览器支持 NTLM(例如 IE),您也可以将它们结合使用 express-ntlm,否则显示登录表单。在我看来,这将是您用户的最大好处和最佳用户体验。