如何配置IIS以便在连接到SQL Server时使用用户的域凭据?

时间:2010-11-01 18:36:30

标签: asp.net impersonation kerberos delegation

我们最近发布了最新版本的Intranet应用程序,该应用程序现在使用Windows身份验证作为标准,并且需要能够使用最终用户的域凭据连接到已配置的SQL服务器。

最近我们发现,在几个客户部署中,尽管IIS可以看到用户的域凭据,但它不会将这些凭据传递给SQL服务器。相反,它似乎使用匿名帐户。这是尽管遵循所有正确的步骤(将目录安全性更改为Win Auth,更新Web.Config以使用Win Auth并拒绝匿名用户)。

我一直在做很多阅读,这表明我们需要确保Kerberos到位,但我不确定(a)这是多么有效(即它真的是一个要求吗?)或(b )如何调查是否已设置或如何进行设置。

我们的情况是,我们需要能够配置IIS或应用程序为客户服务,或者向客户解释他们需要做些什么才能使其正常工作。

我们已经设法在我们的内部网络上使用测试SQL服务器和开发人员的IIS框重现了这一点,所以我们将搞乱这个设置并看看我们是否可以提出解决方案,但是如果任何人都有任何好主意,我很高兴听到他们的意见!

我特别想听听人们对Kerberos的看法或建议。这是一项要求,如果是,我如何向客户概述应如何配置?

哦,我也看到有几个人提到域名的'经典单跳规则'并传递Windows凭据,但我不知道这实际上有多少重量?

谢谢!

马特

3 个答案:

答案 0 :(得分:4)

这称为Double-Hop Problem,禁止将用户凭据转发给第三方。当他们从一台计算机,另一台(第一跳)上的站点进行浏览,并将凭据转发到第三台计算机(第二跳)时,就会发生这种情况。

如果您在同一台计算机上托管IIS和SQL Server,则不会出现此问题。

How to use the System.DirectoryServices namespace in ASP.NET上发布了更多技术细节,解释了双跳问题以及主要和次要令牌。

答案 1 :(得分:1)

要在用户的Active Directory或Windows凭据下运行您的应用程序,请确保:

  • IIS应用程序设置为不允许匿名访问
  • IIS应用程序使用集成Windows身份验证
  • 您的连接字符串应为Integrated Security=SSPI,以确保将用户的Windows / AD凭据传递给SQL Server。

    即。 Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;

答案 2 :(得分:0)

你声明你不确定“如何调查它是否已设置或如何进行设置”。

为此,我衷心推荐一种名为DelegConfig的工具。这是一个非常方便的应用程序,你可以告诉你是否正确设置了kerberos。

将其解压缩到一个目录中,在IIS中配置虚拟目录以指向它。浏览到主页面,告诉它你想要允许访问哪个后端服务器(例如UNC,SQL,HTTP等等),它会正确地告诉你它的设置和解释原因。< / p>

如果你愿意的话,它甚至可以通过kerberos来解决这个问题(虽然我没有使用过它 - 我宁愿自己重新配置它以了解我将来做了什么)

我意识到这对你的特定问题来说太晚了,但认为值得为后面的其他人分享 - 特别是工具能够解释为什么委托是或不工作。我发现它非常有用。