gpt4 book ai didi

asp.net - Windows 身份验证不会挑战域外的浏览器

转载 作者:行者123 更新时间:2023-12-04 14:41:53 27 4
gpt4 key购买 nike

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

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

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

当我的域内有机器时,它工作得很好。

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

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

  • 我域中用户不在允许列表中的机器:
  • 没有凭据的浏览器发出请求。
  • Web 应用程序自定义授权过滤器拒绝连接(挑战)。
  • 浏览器使用 Windows 凭据重新发出请求。
  • Web 应用程序无法验证请求并重定向到登录屏幕。

  • 现在问题来了。

    用户不在允许列表中的我的域中的机器:
  • 没有凭据的浏览器发出请求。
  • Web 应用程序自定义授权过滤器拒绝连接(挑战)。
  • 浏览器显示 Windows 登录屏幕,并且不会重新发出请求。

  • 当服务器未经授权返回时,为什么不重新发出请求?

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

    问候。

    最佳答案

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

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

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

    我希望这对某人有帮助。

    关于asp.net - Windows 身份验证不会挑战域外的浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310636/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com