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

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

我一直在阅读很多书,这些书表明我们需要确保Kerberos已经到位,但是我不确定(a)这是多么有效(即这确实是一项要求吗?)或(b )如何进行调查,或者如何进行调查。

在这种情况下,我们需要能够配置IIS或应用程序以使其适合客户,或者向客户确切说明他们需要做什么才能使其正常工作。

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

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

哦,我也看到一些人提到了针对域并传递Windows凭据的“经典单跳规则”,但是我不知道这实际上占了多少权重?

谢谢!

马特

有帮助吗?

解决方案

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

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

如何在ASP.NET中使用System.DirectoryServices命名空间的上有许多更多的技术详细信息,它解释了双跳问题以及主要令牌和辅助令牌。

其他提示

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

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

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

您声明自己不确定“如何调查它是否已安装或如何进行设置”。

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

将其解压缩到目录中,在IIS中配置一个虚拟目录以指向它。浏览到主页,然后告诉它要允许访问的后端服务器(例如UNC,SQL,HTTP等),并告诉您是否正确设置了它,并解释原因

如果您愿意,它甚至可以重新配置kerberos来解决问题(尽管我没有使用过-我宁愿自己重新配置它以了解我将来所做的事情)

对于您的特定问题,我意识到这为时已晚,但我认为值得与其他后续人员分享-特别是能够解释委派工作原理或失败原因的工具功能。我发现它非常宝贵。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top