Asp.net NTLM和自动匿名身份验证IIS

Asp.net NTLM和自动匿名身份验证IIS,asp.net,authentication,iis-7,proxy,ntlm,Asp.net,Authentication,Iis 7,Proxy,Ntlm,我有一个用于我们内部网的MVC应用程序,它使用NTLM身份验证,但是我希望能够允许外部用户访问该应用程序。所有到我们内部网的外部连接都是通过NAT实现的,因此只有一个IP地址,可以用来表示请求是否是外部的。我希望所有内部用户都能像以前一样接受NTLM身份验证,但来自外部IP的任何连接都会自动获得匿名身份验证(“匿名”是指任何潜在的默认用户,如标准网络服务或IUSR_uu帐户、指定的域用户(当然是为了其他目的而严格锁定)等)。结果是,除非是内部的,并且浏览器默认使用NTLM,否则任何人都不应该看到

我有一个用于我们内部网的MVC应用程序,它使用NTLM身份验证,但是我希望能够允许外部用户访问该应用程序。所有到我们内部网的外部连接都是通过NAT实现的,因此只有一个IP地址,可以用来表示请求是否是外部的。我希望所有内部用户都能像以前一样接受NTLM身份验证,但来自外部IP的任何连接都会自动获得匿名身份验证(“匿名”是指任何潜在的默认用户,如标准网络服务或IUSR_uu帐户、指定的域用户(当然是为了其他目的而严格锁定)等)。结果是,除非是内部的,并且浏览器默认使用NTLM,否则任何人都不应该看到密码请求

我知道通常混合模式身份验证在最好的情况下是很尴尬的,但我想知道这个特定的用例是否有其他解决问题的方法。我考虑过的一些可能性包括:

  • 在请求到达WindowsAuthenticationModule之前拦截请求(在IIS、global.asax中的一个事件或HTTPHandler中),以便我们可以为指定用户注入身份验证
  • 在NAT中,有一种方法可以将NTLM头插入指定用户的HTTP请求中
  • 当外部用户通过不同的主机访问时(DNS在其端处理以符合其命名约定),让IIS为接收请求的简单代理站点提供服务,使用指定用户的NTLM将请求转发到主网站,然后将响应发送回原始请求者

  • 我使用您描述的请求拦截方法开发了一个网站。下面是一个详细的例子