集成Windows身份validation与IIS,Firefox和SQL Server

我有我的本地主机上运行IIS上的网站。 该网站的目录安全性设置为只允许集成Windows身份validation。 它是内联网的一部分,需要通过我们的域帐户进行身份validation。

然后,我使用连接string中的Integrated Security = SSPI连接到SQL Server。

这与Microsoft Internet Explorer一起工作正常,它在login到域时自动validation身份,并且我可以看到logon_user是我的域帐户,SQL Server连接string工作得很好。

但是,当我使用Firefoxlogin时,事情是不同的。

首先,我被提示进行身份validation,这是正确的,因为Firefox没有configuration为信任本地主机足以自动发送凭据(事实上,我知道如何引入这个信任,这不是问题)。 然后我login,这再好,只要我input域帐户的细节一切都很好。 事实上,一个或两个debugging语句显示logon_user仍然是我的域帐户,一切都很好。

但是,当我连接到SQL Server(运行在远程服务器框上,我的域帐户具有完整的系统pipe理员权限)时,出现以下错误:

Microsoft OLE DB Provider for SQL Server (0x80040E4D) Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. 

这表明在身份validation堆栈中出了问题,出于某种原因,当我使用来自Firefox的Windows身份validation进行身份validation时,IIS不会作为已validation的帐户运行。

使用Google Chrome时,这也可以正常工作。

有什么build议么?

如Pontus Gagge所述 ,IIS需要将Kerberos票证传递给SQL server。 这足以让我的Google-Fu朝着正确的方向发展。

Firefox支持Kerberos,但是,您必须告诉它信任哪些域来发送Kerberos令牌。

  1. 打开Firefox
  2. 在地址栏中键入:about:config
  3. Firefox3.x及更高版本要求您同意您将谨慎行事。
  4. 加载配置页面后,在过滤器框中输入:network.negotiate-auth
  5. 通过双击该行修改network.negotiate-auth.trusted-uris并输入yourdomain.com
  6. 可以用逗号分隔多个域名,比如yourdomain.com,yourotherdomain.com

注意:这与gbn的解决方案不同 ,它只是配置firefox,不会提示您在登录时输入域帐户的详细信息。

此外,如果您已经尝试在当前的Firefox会话中通过堆栈进行身份验证,则需要重新启动Firefox以使其工作。

  1. 打开Firefox
  2. 在地址栏中键入:about:config
  3. Firefox3.x及更高版本要求您同意您将谨慎行事。
  4. 加载配置页面后,在过滤器框中键入:network.automatic
  5. 通过双击该行修改network.automatic-ntlm-auth.trusted-uris并输入http://www.replacewithyoursite.com
  6. 可以通过逗号分隔多个网站,例如http : //www.replacewithyoursite.com,http://www.replacewithyourintranetsite.com

我也使用IEtab插件的Intranet网站

IIS需要将Kerberos票证传递给SQL server以使此方案正常工作。 MSIE正在提取工作站会话票据,而Firefox正在协商自己的身份验证(而不是Kerberos)。

看看这个密集的博客文章作为了解需要什么的起点。 我不确定FF是否支持MS-Kerberos。

请注意,即使获取MSIE-> IIS-> SQL server身份验证可能会非常棘手,如果您有错误的版本或信任配置…