在asp.net中获取Windows /域凭据,同时允许在IIS中进行匿名访问

was*_*igh 5 c# asp.net iis single-sign-on

我在我们的数据中心运行了一个asp.NET webapplication,我们希望客户通过单点登录进行登录.如果我们可以使用IIS集成安全性,这将非常容易.但是我们不能这样做.我们对客户的域控制器没有信任.我们希望网站可用于一般互联网.只有当人们从客户网络中连接时,他们才会自动登录.

我们拥有的是域帐户列表以及在asp.net代码中通过LDAP查询DC的方法.在IIS中允许匿名访问时,IIS永远不会向浏览器挑战凭据.因此我们的应用程序永远不会获得用户凭据.

有没有办法强制浏览器发送凭据(因此能够使用单点登录)与IIS接受匿名请求.

更新:

我尝试自己发送401:未经授权,www-authenticate:NTLM标头.接下来发生的事情(正如Fiddler告诉我的那样)是IIS完全控制并处理完整的请求链.据我从各种来源了解,IIS采用用户名,将挑战发送回浏览器.浏览器返回加密响应,IIS连接到域控制器以使用此响应对用户进行身份验证.

但是在我的方案中,IIS与客户端位于不同的Windows域中,无法对用户进行身份验证.因此,建立一个带有Windows身份验证功能的独立站点也无法正常工作.

现在我需要选择我正在研究的选项:

  1. 在我们的托管域和客户域之间创建域信任(我们的IT部门对此不满意)
  2. 使用NTML代理将IIS身份验证请求转发到客户端域控制器(我们有可通过LDAP连接的VPN连接)

ste*_*hbu 0

不确定你是否能轻松地让它发挥作用。与基本方式不同的是,401 质询发生在用户请求的带内(以便信用信息出现在标头中),NTLM 握手是在单独的端口上完成的,然后由非托管代码强制进入线程上下文。

您尝试拆开 VS2008(或反射器)中的 ASP.NET NTLM 模块,看看它如何提取凭据?

不是一个真正的答案 - 抱歉......