1

我已经建立了一个使用 AD 来确定权限的 Intranet 站点。与 IE 配合得很好。

有时用户会访问该站点并被要求提供凭据,即使他们使用的是 IE。我猜 IE 没有发送站点需要的 AD 信息,可能是因为安全设置。

我正在使用设置了 Windows 身份验证的 Windows Server 2008 R2 和 IIS 7.5。

在代码中,当页面被加载时,它会询问 NT 用户名:

    Dim ss As SoftwareStorage = New SoftwareStorage()
    Dim username As String
    username = ss.returnUserName()
    ...
    <input type="hidden" id="domainName" value="<% Response.Write(username)%>" />
    ...
    Dim ftpUser As System.Security.Principal.IPrincipal
    Public Function returnUserName() As String
       ftpUser = System.Web.HttpContext.Current.User
       Return (ftpUser.Identity.Name)
    End Function

我查看了良好(工作)和坏(不工作)http 连接的 Wireshark 提要。好的有两个初始http调用的以下信息:

    GET /foo/index.aspx HTTP/1.1 , NTLMSSP_NEGOTIATE
    GET /foo/index.aspx HTTP/W.W , NTLMSSP_AUTH, User: MYDOMAIN\foobar

坏的在相同的两个初始调用中具有以下内容:

    GET / HTTP/1.1
    GET / HTTP/1.1

因此,看起来 IE 在一个实例(IE 9、Vista)中没有发送正确的请求标头信息,而在另一个实例(IE 9、Win7)中发送了正确的标头信息。

我希望有人能帮我解决这个问题。

4

1 回答 1

1

出于安全(安全)原因,IE 不会向服务器发送凭据,除非确定它可以信任服务器。对于自动发送域凭据尤其如此。因此,为了确保 IE 对您的服务器具有最大的信任,您可以进入(浏览器菜单)工具、Internet 选项、安全性,并将您的服务器的名称明确设置为“Intranet”区域。Intranet 区域的信任级别比普通的“受信任”服务器高得多。安全免责声明:除非您确实信任它,否则不要将服务器明确标识为 Intranet 服务器。

有关更多信息,请阅读 IE 安全区域。

此外,在 IIS(身份验证)中,确保启用“Windows 身份验证”(禁用匿名)并(选择“Windows 身份验证”,单击“提供程序”(右))确保 NTLM 位于列表顶部。

于 2012-10-15T18:00:30.733 回答