【问题标题】:Retrieve NTLM Active Directory user data to Rails w/o IIS在没有 IIS 的情况下将 NTLM Active Directory 用户数据检索到 Rails
【发布时间】:2008-09-29 20:11:20
【问题描述】:

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

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

有谁知道我可以通过 Apache/mongrel 设置验证 NTLM 类型用户信息的方式(当然前提是它已经在 Active Directory 域内的 Windows 机器上运行)?

【问题讨论】:

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


    【解决方案1】:

    我为 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 身份验证的服务器。

    【讨论】:

      【解决方案2】:

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

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

      Mongrel 在 type1/2/3 消息交换期间不支持 keep-alives(至少在本机上,我相信它有一个 hack/fix),IE 需要,而 Firefox 没有。

      因此,针对远程 NTLM 服务(例如,Sharepoint 或其他网站)对运行在 Windows 上的 Rails 服务器进行身份验证是相当简单的,但针对在 Windows 上运行的 Rails 服务器验证 IE 浏览器的身份并没有使用 Mongrel 那么多。 IIS 将是一个选项,可能是带有 FastCGI 的基本 Apache。前者感觉有点笨重,后者不会像 Mongrel 那样快。

      【讨论】:

        【解决方案3】:

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

        您可以使用一些 ruby​​ 的 win32 libraries 来访问处理 NTLM 的底层 Windows 身份验证功能。

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

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

        如果找不到,则必须编写一个 ruby​​ C 扩展。我在 linux 上做过,扩展 ruby​​ 很容易,但你可能会发现 microsoft authentication API 有点痛苦。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            您可以使用此处描述的方法 (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 身份验证所需要的。

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                【解决方案7】:

                查看Waffle。它使用 Win32 API 在 Windows 上向 Java 服务器提供 SSO。有许多实现的过滤器(servlet、tomcat Valve、spring-security)。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-10-08
                  相关资源
                  最近更新 更多