与 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 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用ng build而不是ng serve时运行webpack?