我们最近发布了最新版本的Intranet应用程序,它现在使用
Windows身份验证作为标准,并且需要能够使用最终用户的域凭据连接到已配置的sql服务器.
最近我们发现,在几个客户部署中,尽管IIS可以看到用户的域凭据,但它不会将这些凭据传递给sql服务器.相反,它似乎使用匿名帐户.这是尽管遵循所有正确的步骤(将目录安全性更改为Win Auth,更新Web.Config以使用Win Auth并拒绝匿名用户).
我一直在做很多阅读,这表明我们需要确保Kerberos到位,但我不确定(a)这是多么有效(即它真的是一个要求吗?)或(b)如何去调查它是否已经设置或如何进行设置.
我们的情况是,我们需要能够配置IIS或应用程序为客户工作,或者向客户解释他们需要做些什么才能使其正常工作.
我们已经设法使用测试sql服务器和开发人员的IIS框在我们的内部网络上重现这一点,所以我们将搞乱这个设置,看看我们是否可以提出解决方案,但如果有人有任何聪明的想法,我很高兴听到他们!
我特别想听听人们对Kerberos的看法或建议.这是一项要求,如果是,我如何向客户概述应如何配置?
哦,我也看到有几个人提到域名的’经典单跳规则’和传递窗口凭据,但我不知道这实际上有多少重量?
谢谢!
马特
解决方法
这称为
Double-Hop Problem,禁止将用户凭证转发给第三方.当他们从一台计算机,另一台(第一跳)上的站点进行浏览,并将凭证转发到第三台计算机(第二跳)时,会发生这种情况.
如果您在同一台计算机上托管IIS和sql Server,则不会出现此问题.
在How to use the System.DirectoryServices namespace in ASP.NET发布了更多技术细节,解释了双跳问题以及主要和次要令牌.