使用IIS,Firefox和SQL Server进行集成Windows身份验证

时间:2009-04-09 07:48:08

标签: sql-server windows iis firefox authentication

我的localhost上有一个在IIS上运行的网站。此网站的目录安全性设置为仅允许集成Windows身份验证。它是Intranet的一部分,需要通过我们的域帐户进行身份验证。

然后我在连接字符串中使用Integrated Security = SSPI连接到SQL Server。

这适用于Microsoft Internet Explorer,当我登录到域时它会自动验证我,我可以看到logon_user是我的域帐户,SQL Server连接字符串工作正常。

然而,当我使用Firefox登录时,情况就不同了。

首先,我被提示进行身份验证,这很好并且正确,因为Firefox未配置为足以信任localhost足以自动发送凭据(事实上,我知道如何引入此信任,这不是问题) 。我然后登录,再次没问题,只要我输入域名帐户详细信息一切正常。实际上,一两个调试语句显示logon_user仍然是我的域帐户,一切都很好。

但是,当我连接到SQL Server(在远程服务器上运行,我的域帐户具有完全sysadmin权限)时,我收到以下错误:

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

这表明身份验证堆栈中出现了问题,由于某些原因,当我使用来自firefox的Windows身份验证进行身份验证时,IIS未作为经过身份验证的帐户运行。

使用谷歌浏览器时也可以正常使用。

有什么建议吗?

3 个答案:

答案 0 :(得分:28)

<{3>}作为notedPontus 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
  7. 注意: gbnsolution相同,只是将firefox配置为不提示您输入域帐户详细信息登录。

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

答案 1 :(得分:5)

  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.comhttp://www.replacewithyourintranetsite.com
  7. 我还为Intranet站点使用IEtab附加组件

答案 2 :(得分:5)

IIS需要将Kerberos票证传递给SQL Server才能使此方案生效。 MSIE正在拿起工作站会话票,而Firefox正在协商自己的身份验证(而不是Kerberos)。

查看例如this dense blog post作为了解所需内容的起点。我不确定FF是否支持MS-Kerberos。

请注意,如果您的版本或信任配置错误,即使获得MSIE-&gt; IIS-&gt; SQL Server身份验证也很棘手......