8

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

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

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

我们处于这样一种情况,即我们需要能够配置 IIS 或应用程序以供客户使用,或者向客户解释他们需要做什么才能使其正常工作。

我们已经设法在我们的内部网络上使用测试 SQL 服务器和开发人员的 IIS 框重现了这个问题,所以我们要搞砸这个设置,看看我们是否能想出一个解决方案,但如果有人有任何好主意,我很高兴听到它们!

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

哦,我还看到一些人提到域和传递 Windows 凭据的“经典单跳规则”,但我不知道这实际上有多大权重?

谢谢!

马特

4

3 回答 3

4

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

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

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

于 2010-11-01T19:19:15.063 回答
1

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

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

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

于 2010-11-01T18:51:47.713 回答
0

您说您不确定“如何进行调查是否已设置或如何进行设置”。

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

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

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

我意识到这对于您的特定问题来说为时已晚,但认为值得为其他人分享 - 特别是解释为什么委派工作或不工作的工具能力。我发现它无价之宝。

于 2010-12-03T10:25:45.463 回答