我有一个允许匿名访问和Windows身份验证的Web应用程序。
基本上,该应用尝试自动登录用户通过窗口认证如果Windows用户是在应用程序的用户列表中,否则它显示登录屏幕。如果没有提供凭证,则应用程序会显示登录屏幕,用户可以使用应用程序内部用户登录。
据我所知,Windows身份验证是一个具有挑战性的协议,所以我要以迫使浏览器发送凭据返回未经授权。
当我的域内有机器时,效果很好。
我的域中用户在列表中的计算机:
我的域中的用户不在允许列表中的计算机:
现在出现了问题。
机器离开我的域,用户不在允许的列表中:
为什么在服务器未经授权返回时不会重新发出请求?
如果我关闭身份验证对话框并刷新浏览器,则应用程序会重定向到登录页面。
问候。
答案 0 :(得分:1)
好吧,如果计算机位于服务器域之外,浏览器将不会尝试发送凭据(因为它在Windows身份验证方面可能毫无意义),并且它将在第一个HTTP 401之后提示输入凭据。< / p>
解决方案是同时启用匿名身份验证和Windows身份验证,并匿名访问LogOn页面。在LogOn页面中放置登录控件,以及一个名为“Windows Login”的按钮,该按钮导航到名为“WindowsAuth”的操作方法。在该操作方法中,如果不是HttpUnauthorizedResult
,则返回Request.LogonUserIdentity.IsAuthenticated
,否则重定向到Home,这将强制浏览器发送Windows凭据。
如果域外的浏览器尝试执行“Windows登录”,它将获得一个不错的“HTTP 401 Unauthorized”页面,因此他可以回击并以传统方式执行登录。
我希望这有助于某人。