将NTLM Active Directory用户数据检索到没有IIS的Rails

我相信我们可以允许Firefox将NTLM数据发送到SharePoint站点进行自动身份validation,我认为这对IIS来说是可行的。

我想用内部Rails站点做同样的事情。

有没有人知道我可以通过Apache / mongrel设置validationNTLM类型的用户信息(当然,它已经在Active Directory域内的Windows机器上运行)?

我假设你已经解决了你需要发送哪些HTTP头,以便让firefox和IE发送回NTLM身份validation的东西,并且只需要在服务器端处理它?

您可以使用某些ruby的win32库来访问处理NTLM的底层Windows身份validation函数。

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

如果没有COM组件,您可能能够在其中一个库中找到可以为您调用本机win32方法的内容。

如果你找不到,你必须写一个ruby C扩展。 我在linux上完成了这个,并且扩展ruby非常简单,但你可能会发现微软认证API有点痛苦。

希望能让你开始走上正轨:-)

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

在那里你还可以找到如何在Firefox中启用自动NTLM身份validation – 在位置字段中输入“about:config”,然后搜索“network.automatic-ntlm-auth.trusted-uris”。 在那里,您可以输入要使用自动NTLM身份validation的服务器。

一些额外的信息,以防任何人偶然发现这一点。

我想做一些我认为应该非常简单的事情 – 从运行在Mongrel / Windows上的Rails应用程序(实际上是InstantRails)中使用NTLM提取用户窗口用户名。 编写基本代码后,管理各种握手操作(使用http://rubyforge.org/projects/rubyntlm/上的优秀NTLMRuby库)并让它在Firefox中运行得非常好,我发现IE无法正常工作有点沮丧。

Mongrel在type1 / 2/3消息交换期间不支持keep-alives(至少在本地,我相信有一个hack / fix for it),IE要求和Firefox没有。

因此,针对远程NTLM服务(例如,Sharepoint或其他网站)对在Windows上运行的Rails服务器进行身份validation是相当直接的,但是对于在Windows上运行的Rails服务器而不是使用Mongrel来validationIE浏览器。 IIS可能是一个选项,可能是使用FastCGI的基本Apache。 前者感觉有点笨拙而后者不会像杂种一样快。

您还可以使用Apache ntlm模块 ,该模块应使用经过身份validation的用户的用户名将标头向前传递到您的应用程序。 该模块看起来有点旧,但建议一些其他模块可能适合您的需求。

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

你可以使用这里描述的方法( http://blog.rayapps.com/2008/12/02/ntlm-windows-domain-authentication-for-rails-application/ )。 但是,mod_ntlm用于UNIX / Linux机器上的Windows身份validation。 mod_auth_sspi是你在windows下使用apache进行winNT身份validation所需要的。

这个特殊项目看起来很有前景,正在寻找贡献者:

  • 使用NTLM进行透明身份validation的机架中间件 。

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

看看华夫cookies 。 它使用Win32 API在Windows上为Java服务器提供SSO。 有许多实现的filter(servlet,tomcat阀,弹簧安全)。