我正在尝试在我们的一个内部网站上实现NTLM身份验证,一切正常。 我没有的一个难题是如何从NTLM获取信息并使用Active Directory进行身份验证。

有一个很好的描述NTLM用于密码加密 ,我用来实现这一点,但我不知道如何验证用户的密码是否有效。

我正在使用ColdFusion,但是这个问题的解决方案可以是任何语言(Java,Python,PHP等)。

编辑:

我在Redhat Enterprise Linux上使用ColdFusion。 不幸的是,我们不能使用IIS来管理它,而是必须为此编写或使用第三方工具。


更新 - 我得到了这个工作,这就是我做的

从samba.org使用了JCIFS库。

请注意,以下方法仅适用于NTLMv1,并且不适用于NTLMv2。 如果您无法使用NTLMv1,您可以尝试Jespa ,它支持NTLMv2但不是开源,或者您可以使用Kerberos / SPNEGO。

这是我的web.xml:

<web-app>
    <display-name>Ntlm</display-name>

    <filter>
        <filter-name>NtlmHttpFilter</filter-name>
        <filter-class>jcifs.http.NtlmHttpFilter</filter-class>

        <init-param>
            <param-name>jcifs.http.domainController</param-name>
            <param-value>dc01.corp.example.com</param-value>
        </init-param>
        <init-param>
            <param-name>jcifs.smb.client.domain</param-name>
            <param-value>CORP.EXAMPLE.COM</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>NtlmHttpFilter</filter-name>
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
</web-app>

现在所有匹配/admin/* URL都需要NTLM身份验证。

===============>>#1 票数:19

你真正要问的是:有没有办法验证IE和其他HTTP客户端在进行单点登录(SSO)时提交的“WWW-Authenticate:NTLM”令牌。 SSO是用户在执行Ctrl-Alt-Del时“单次”输入密码的时间,工作站会记住并根据需要使用它来透明地访问其他资源,而不会再次提示用户输入密码。

请注意,Kerberos(如NTLM)也可用于实现SSO身份验证。 当呈现“WWW-Authenticate:Negotiate”标题时,IE和其他浏览器将发送SPNEGO包装的Kerberos和/或NTLM标记。 稍后会详细介绍,但首先我会回答问题。

验证NTLMSSP密码“响应”的唯一方法(如IE和其他浏览器提交的“WWW-Authenticate:NTLM”标头中编码的那些)是使用Active Directory域的NETLOGON服务进行NetrLogonSamLogon(Ex)DCERPC调用控制器,它是目标帐户的权限,或者具有对目标帐户的权限的“信任”。 此外,为了正确保护NETLOGON通信,应使用安全通道加密,并且从Windows Server 2008开始需要加密。

毋庸置疑,实现必要的NETLOGON服务调用的软件包非常少。 我唯一知道的是:

  1. Windows(当然)

  2. Samba - Samba是一套用于UNIX的软件程序,它实现了许多Windows协议,包括必要的NETLOGON服务调用。 实际上,Samba 3有一个特殊的守护进程,称为“winbind”,其他程序如PAM和Apache模块可以(和做)接口。 在Red Hat系统上,您可以执行yum install samba-winbindyum install mod_auth_ntlm_winbind 但这是最容易的部分 - 设置这些东西是另一回事。

  3. Jespa - Jespa( http://www.ioplex.com/jespa.html )是一个100%的Java库,它实现了所有必要的NETLOGON服务调用。 它还提供了标准Java接口的实现,用于以各种方式验证客户端,例如使用HTTP Servlet过滤器,SASL服务器,JAAS LoginModule等。

请注意,有许多NTLM身份验证接受器未实现必要的NETLOGON服务调用,而是执行其他最终导致某种情况或其他情况失败的情况。 例如,多年来,在Java中执行此操作的方法是使用名为JCIFS的项目中的NTLM HTTP身份验证Servlet过滤器。 但是,Filter使用了一种中间人技术,这种技术一直是造成长期“打嗝”的原因,更重要的是,它不支持NTLMv2。 出于这些原因和其他原因,计划将其从JCIFS中删除。 有几个项目无意中受到了这个项目的启发,现在也同样注定要失败。 在Java论坛中发布了许多代码片段,它们解码标头令牌并拔出域名和用户名,但实际上并没有真正验证密码响应。 可以这么说,如果你使用其中一个代码碎片,你可以随身携带你的裤子。

正如我之前提到的,NTLM只是Windows安全支持提供商(SSP)中的一个。 还有Digest SSP,Kerberos SSP等。但是Negotiate SSP,也称为SPNEGO,通常是MS在其自己的协议客户端中使用的提供者。 Negotiate SSP实际上只是协商NTLM SSP或Kerberos SSP。 请注意,只有在服务器和客户端都在目标域中具有帐户并且客户端可以充分与域控制器通信以获取Kerberos票证时,才能使用Kerberos。 如果不满足这些条件,则直接使用NTLM SSP。 因此,NTLM绝不是过时的。

最后,有些人提到使用LDAP“简单绑定”作为make-shift密码验证服务。 LDAP实际上并不是设计为身份验证服务,因此效率不高。 使用LDAP也无法实现SSO。 SSO需要NTLM或SPNEGO。 如果你能找到一个NETLOGON或SPNEGO接受器,你应该使用它。

麦克风

===============>>#2 票数:2

据我了解。
NTLM是IIS内置的身份验证方法之一。 如果主机在所述活动目录的域中注册,则它应该是自动的。 需要注意的一点是用户名应该是两种格式之一。

  • 域\\用户名
  • username@domain.tld

如果您尝试使用不同的活动目录,则应使用表单样式身份验证和某些LDAP代码。

如果您尝试使用IIS集成身份验证执行Intranet No Zero Login

  • 域需要在IEx浏览器中列为可信站点
  • 或使用网址使用netbios名称而不是DNS名称。
  • 因为它在firefox中工作,请阅读此处

===============>>#3 票数:2

Apache的ModNTLM源代码可以为您提供正确的指针。

如果可能,您应该考虑使用Kerberos 它允许您针对AD验证Apache,它是比NTLM更活跃的项目空间。

===============>>#4 票数:1

您可以通过在Firefox中执行以下步骤来解析Firefox身份验证弹出窗口:

  1. 打开Mozilla Firefox
  2. 在地址栏中输入about:config
  3. 在Search texfield中输入network.automatic-ntlm-auth.trusted-uris
  4. 双击首选项名称并将服务器名称中的键作为字符串值
  5. 关闭标签
  6. 重启Firefox。

===============>>#5 票数:1

看看华夫饼干 它使用Win32 API为Java服务器实现SSO。 有servlet,tomcat阀门,弹簧安全和其他过滤器。

===============>>#6 票数:0

嗯,我不确定你要完成什么。

通常在内部站点上实现NTLM就像在IIS中的网站属性的“目录安全性”选项卡中的“身份验证和访问控制”中取消选中“启用匿名访问”一样简单。 如果清除,则Web应用程序用户将看到弹出的NTLM对话框。

您无需编写任何与Active Directory连接的代码。 IIS负责您的身份验证。

你能更具体地了解你想做什么吗?

===============>>#7 票数:0

我假设你想要获得一些针对LDAP帐户设置的属性 - 角色 - 部门等。

for coldfusion检查出来http://www.adobe.com/devnet/server_archive/articles/integrating_cf_apps_w_ms_active_directory.html

以及cfldap标签http://livedocs.adobe.com/coldfusion/6.1/htmldocs/tags-p69.htm#wp1100581

至于其他语言 - 其他语言将使用相应的API来完成

  ask by community wiki translate from so

未解决问题?本站智能推荐:

2回复

使用Angular2的NTLM身份验证

在我的客户端Web应用程序中,我需要使用ntlm协议向服务器进行身份验证。 在使用Angular1时,通过$ http服务获取请求,浏览器(chrome,edge)通过提示用户输入用户名/密码来执行NTLM身份验证的所有3个步骤。 但是,对于Angular2,使用Angular2随附的h
1回复

NTLM身份验证无效字符

我有个问题。 当我尝试访问Web应用程序时出现此错误 NTLM TlRMTVNTUAACAAAAAAAAAAAACgAAAABggAAAAICAgAAAAAAAAAAAAAAAA == \\ n的响应标头“ WWW-Authenticate”值包含无效字符,正在中止请求 我读
1回复

在使用WISE打包安装程序编写的自定义应用程序包中遇到Kerberos和/或NTLM身份验证失败

我们在自定义应用程序包中遇到Kerberos和/或NTLM身份验证失败,或者使用WISE打包安装程序为Windows 7设计。 在Windows 7上,它们工作正常,但它们现在在Windows 10上失败。它们在使用Microsoft SCCM工具在Windows 10上安装期间都失败,并且在
1回复

如何在IIS中为OPTIONS请求禁用NTLM身份验证

据我了解,OPTIONS请求必须未经身份验证才能处理。 我将Web应用程序托管在IIS 7.x和8.x中,并且使用NTLM和Kerberos身份验证(这是Intranet应用程序)。 在Windows身份验证的情况下,如何在IIS中禁用对OPTIONS请求的身份验证?
1回复

Active Directory和NTLM身份验证

我正在写一个用于管理AD用户的IIS应用程序。 为此,我已经将站点配置为使用Negotiate AuthenticationProvider,并且一切正常。 我想知道NTLM是否适合与Active Directory进行操作(例如创建用户帐户)? 还是AD仅接受Kerberos身份验证
1回复

Python无法通过ntlm进行身份验证

我正在尝试解析我的Intranet上的站点,并在按如下所示进行身份验证时收到一条错误消息,要求进行身份验证,这已经完成。 为什么我仍然收到此401错误? 提前致谢! http_error_default中的文件“ C:\\ Python27 \\ lib \\ urllib2.
1回复

Apache HTTP Client 4.2.5 NTLM集成身份验证

任何人都可以向我解释在Java中通过Apache HTTP客户端调用某些URI时如何(如果可能)设置集成的NTLM身份验证? 我在提供NTCredentials时已成功使用它,但我还需要能够使用Java应用程序运行的任何用户调用其他Web资源。 这适用于HTTPUrlConnection(它
1回复

Java,客户端NTLM身份验证

我负责构建应用程序运行状况监视系统,其中一项要求是检查我们各种Java服务是否正常运行以及反向代理是否正常运行。 反向代理是一个.NET应用程序,用于获取用户的广告组,并将其通过标头传递给我们的应用程序,以进行监视/安全保护。 显然,草率的dink输入和输出流http请求是不够的,但是我
3回复

使用Java使用Active Directory进行NTLM身份验证

我正在阅读这篇文章 ,在它的帮助下,我能够找到访问我的JSP页面的机器的用户名,域名和主机名,但我仍然无法理解如何验证用户。 因为在我访问JSP页面并尝试输入正确的用户名但密码错误的Firefox中,它会对用户进行身份验证。 因此,主要关注的是如何使用NTLM协议对用户进行身份验证,即,
2回复

您使用哪种Sharepoint身份验证方法,为什么?

Kerberos,NTLM,表单,基于声明的使用活动目录? 经历了分析用于Sharepoint扩展使用哪种身份验证方法的艰难过程,我必须坦白地说我对哪种最佳用例感到困惑。 它将用作Intranet和Extranet,并且想知道其他人正在使用哪种身份验证方法,以及为什么他们选择使用的身份验