将NTLM Active Directory用户数据检索到不带IIS的Rails中

时间:2020-03-06 14:53:38  来源:igfitidea点击:

我相信我们可以允许Firefox将NTLM数据发送到SharePoint网站以进行自动身份验证,并且我认为这对于IIS是可行的。

我想在内部的Rails网站上做同样的事情。

有谁知道我可以通过Apache /杂种程序身份验证NTLM类型的用户信息的方式(当然,前提是该信息已经在Active Directory域内的Windows框中运行)?

解决方案

我假设我们已经确定了需要发送哪些HTTP标头才能使firefox和IE发送回NTLM身份验证内容,并且只需要在服务器端进行处理即可?

我们可以使用ruby的win32库来访问处理NTLM的基础Windows身份验证功能。

我建议阻力最小的路径可能是查看是否有一个COM组件可以为我们进行身份验证,如果可以,请使用Win32OLE ruby​​库使用它。

如果没有COM组件,则可以在那些可以为我们调用本机win32方法的其他库之一中找到某些内容。

如果找不到,则必须编写ruby C扩展。我已经在Linux上做到了这一点,并且扩展ruby非常简单,但是我们可能会发现Microsoft身份验证API有点痛苦。

希望能让我们开始正确的道路:-)

我们还可以使用Apache ntlm模块,该模块应使用经过身份验证的用户名将标头向前传递给应用程序。该模块看起来有些陈旧,但会建议一些其他适合我们需求的模块。

我创建了有关如何在Linux上为Apache安装修补的mod_ntlm模块以及如何将NTLM身份验证的用户名传递给Rails以及如何从中创建Rails会话的教程。因此,我们不需要Windows服务器即可运行Rails应用程序。

我们还可以在其中找到如何在Firefox中启用自动NTLM身份验证的步骤,在位置字段中输入" about:config",然后搜索" network.automatic-ntlm-auth.trusted-uris"。在这里,我们可以输入要使用自动NTLM身份验证的服务器。

我知道一个老问题,但是我遇到了这个问题,希望找到类似的答案。

我们可以使用此处描述的方法(http://blog.rayapps.com/2008/12/02/ntlm-windows-domain-authentication-for-rails-application/)。但是mod_ntlm用于UNIX / linux计算机上的Windows身份验证。在Windows下从Apache进行winNT身份验证需要使用mod_auth_sspi。

以防万一有人偶然发现这一点。

我想做一些我想应该很简单的事情,从运行在Mongrel / Windows上的Rails应用程序中使用NTLM提取用户的Windows用户名(实际上是InstantRails)。编写了基本的代码来管理各种握手操作(使用http://rubyforge.org/projects/rubyntlm/上的NTLMRuby库),并使其在Firefox中完美地工作,我为发现IE无法正常工作而感到沮丧。

Mongrel在type1 / 2/3消息交换期间不支持保持活动状态(至少在本机上,我相信它有一个hack /修复程序),IE要求这样做,而Firefox则没有。

因此,相对于远程NTLM服务(例如,Sharepoint或者其他网站)对Windows上运行的Rails服务器进行身份验证是相当简单的方法,但对Mongrel而言,针对Windows上运行的Rails服务器对IE浏览器进行身份验证就不那么容易了。 IIS是一个选择,带有FastCGI的基本Apache可能是一个选择。前者有点笨拙,而后者则不会像Mongrel一样快。

这个特别的项目看起来很有希望,正在寻找贡献者:

  • 机架中间件,用于使用NTLM进行透明身份验证。

我还没有尝试过。目前,我计划实施Raimonds的解决方案,因为它似乎已经取得了很大的成功。

查看华夫饼。它使用Win32 API在Windows上向Java服务器提供SSO。有许多已实现的过滤器(servlet,tomcat阀门,弹簧安全性)。