与 IIS、Firefox 和 SQL Server 集成的 Windows 身份验证

Posted

技术标签:

【中文标题】与 IIS、Firefox 和 SQL Server 集成的 Windows 身份验证【英文标题】:Integrated Windows Authentication with IIS, Firefox and SQL Server 【发布时间】:2009-04-09 07:48:07 【问题描述】:

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

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

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

但是,当我使用 Firefox 登录时,情况有所不同。

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

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

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

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

这在使用谷歌浏览器时也可以正常工作。

有什么建议吗?

【问题讨论】:

您是否在同一台机器上运行 SQL 和 IIS? 不,SQL Server 位于远程安全服务器上。 【参考方案1】:

AS noted by Pontus Gagge,IIS 需要将 Kerberos 票证传递给 SQL Server。这足以让我的 Google-fu 朝着正确的方向前进。

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

    打开火狐 在地址栏输入:about:config Firefox3.x 及更高版本要求您同意谨慎行事。 配置页面加载后,在过滤框中输入:network.negotiate-auth 修改network.negotiate-auth.trusted-uris,双击行并输入yourdomain.com 可以添加多个域,用逗号分隔,例如 yourdomain.com、yourotherdomain.com

注意:与gbn 的solution 相同,后者只是将firefox 配置为不提示您在登录时输入域帐户详细信息。

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

【讨论】:

作为记录,在使用 localhost 作为域的 Firefox Developer Edition 中进行这些更改后,我仍然遇到问题。我还必须在下面执行 gbn 的解决方案才能通过“登录失败...”消息。这是在最终起作用的两个地方添加 URI 的组合。我确认删除一个或另一个会导致问题再次出现。 对不起,我说得太早了。仔细检查后,我发现我唯一需要设置的是 network.automatic-ntlm-auth.trusted-uris。【参考方案2】:
    打开火狐 在地址栏输入:about:config Firefox3.x 及更高版本要求您同意谨慎行事。 配置页面加载后,在过滤框中输入:network.automatic 通过双击行修改network.automatic-ntlm-auth.trusted-uris并输入http://www.replacewithyoursite.com 可以添加多个站点,用逗号分隔它们,例如http://www.replacewithyoursite.com、http://www.replacewithyourintranetsite.com

我还为 Intranet 站点使用 IEtab 插件

【讨论】:

我知道如何做到这一点,我顺便避开了它,这不是问题。事实上,当我通过身份验证时,它不会将其传递给 SQL Server。【参考方案3】:

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

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

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

【讨论】:

以上是关于与 IIS、Firefox 和 SQL Server 集成的 Windows 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

sql serve基础

如何在使用ng build而不是ng serve时运行webpack?

ASP.NET MVC + IIS7 + FireFox:URL 中的斜杠

关于数据库 Oracle 和 SQL Serve

SQL Serve 日志体系结构

sql serve数据库基础入门