ASP.Net Web应用程序尝试使用Impersonation和Delegation连接到SQL Server

Gra*_*ark 15 asp.net iis-7 kerberos delegation

我正在尝试在Intranet ASP.Net Web应用程序中使用Impersonation和Delegation,以便将经过身份验证的用户凭据传递到SQL Server.

Web服务器和SQL服务器是两个独立的计算机,但在同一个域中,因此需要委派.

我做了以下事情:

  • 设置<authentication mode="Windows"/><identity impersonate="true"/>在我的web-app的web.config中.
  • 在Active Directory中启用从Web服务器到SQL Server上的MSSQLSvc服务的约束委派.
  • 通过IIS在网站中仅启用Windows身份验证.

显然这应该都可以,但它没有(SQL Server拒绝访问匿名用户 - "登录失败的用户'NT AUTHORITY\ANONYMOUS LOGON'").

在IIS7中,应用程序池设置为使用集成Pipleline模式,并使用NetworkService Identity运行.该网站仅启用了Windows身份验证,关闭了扩展保护,启用了内核模式身份验证,并且NTLM是提供者.

我读过的所有网页似乎表明我的设置应该有效.我错过了什么?

Gra*_*ark 16

我发现了答案:

IIS7中的Windows身份验证提供程序必须设置为Negotiate:Kerberos,而不是NTLM.这意味着必须禁用内核模式身份验证设置.这似乎很好.我认为我说在使用自定义标识(即一个特定标识)时需要内核模式身份验证是正确的.委派可以使用任意数量的身份.一切都很好.

我也写了一篇关于此的博客文章,其中有更详细的内容.