【问题标题】:Windows authentication is not challenging browsers out of the domainWindows 身份验证不会挑战域外的浏览器
【发布时间】:2011-09-05 16:27:25
【问题描述】:

我有一个允许匿名访问和 Windows 身份验证的 Web 应用程序。

基本上,如果 windows 用户在应用程序的用户列表中,应用程序会尝试通过 windows 身份验证自动登录用户,否则会显示登录屏幕。如果未提供凭据,则应用程序会显示一个登录屏幕,用户可以在其中使用应用程序内部用户登录。

据我所知,Windows 身份验证是一个具有挑战性的协议,因此我必须返回 Unauthorized 以强制浏览器发送凭据。

当机器在我的域内时效果很好。

用户在列表中的我的域中的机器:

  • 没有凭据的浏览器发出请求。
  • Web 应用自定义授权过滤器拒绝连接(挑战)。
  • 浏览器使用 Windows 凭据重新发出请求。
  • Web 应用程序验证该 Windows 用户并允许其获取。

用户不在允许列表中的我域中的机器:

  • 没有凭据的浏览器发出请求。
  • Web 应用自定义授权过滤器拒绝连接(挑战)。
  • 浏览器使用 Windows 凭据重新发出请求。
  • Web 应用无法验证请求并重定向到登录屏幕。

现在问题来了。

从我的域中取出用户不在允许列表中的机器:

  • 没有凭据的浏览器发出请求。
  • Web 应用自定义授权过滤器拒绝连接(挑战)。
  • 浏览器显示一个 Windows 登录屏幕,它不会重新发出请求。

为什么服务器返回未授权时请求没有重新发出?

如果我关闭身份验证对话框并刷新浏览器,则应用程序会重定向到登录页面。

问候。

【问题讨论】:

    标签: asp.net asp.net-mvc windows-authentication ntlm


    【解决方案1】:

    好吧,如果计算机在服务器域之外,浏览器将不会尝试发送凭据(因为它在 Windows 身份验证方面可能毫无意义),它会在第一个 HTTP 401 之后提示输入凭据。

    解决方法是同时启用匿名认证和Windows认证,让登录页面匿名访问。在 LogOn 页面中放置登录控件和一个名为“Windows Login”的按钮,该按钮导航到名为“WindowsAuth”的操作方法。在该操作方法中,如果不是 Request.LogonUserIdentity.IsAuthenticated,则返回 HttpUnauthorizedResult,否则重定向到 Home,这将强制浏览器发送 Windows 凭据。

    如果域外的浏览器尝试“Windows 登录”,它会得到一个漂亮的“HTTP 401 Unauthorized”页面,因此他可以回击并以传统方式执行登录。

    我希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-15
      • 2018-09-30
      • 2016-12-14
      • 1970-01-01
      • 2012-10-14
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多