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

时间:2008-09-29 20:11:21

标签: ruby-on-rails active-directory ntlm

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

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

有没有人知道我可以通过Apache / mongrel设置验证NTLM类型的用户信息(当然,它已经在Active Directory域的Windows框中运行)?

7 个答案:

答案 0 :(得分:10)

我在Linux上为Apache创建了tutorial on how to install patched mod_ntlm module以及如何将经过NTLM身份验证的用户名传递给Rails以及如何从中创建Rails会话。因此,您不需要Windows服务器来运行Rails应用程序。

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

答案 1 :(得分:4)

有些额外的信息,以防万一有人偶然发现。

我想做一些我认为应该非常简单的事情 - 使用运行在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服务器进行身份验证是相当直接的,但是针对运行在Windows上的Rails服务器而不是使用Mongrel来验证IE浏览器。 IIS可能是一个选项,可能是基本的Apache与FastCGI。前者感觉有点笨拙而后者不会像Mongrel那么快。

答案 2 :(得分:2)

我假设您已经确定了需要发送哪些HTTP头,以便让firefox和IE发回NTLM身份验证的东西,并且只需要在服务器端处理它?<​​/ p >

您可以使用某些ruby的win32 libraries来访问处理NTLM的基础Windows身份验证函数。

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

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

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

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

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

答案 6 :(得分:0)

结帐Waffle。它使用Win32 API在Windows上为Java服务器提供SSO。有许多已实现的过滤器(servlet,tomcat valve,spring-security)。