我正在尝试在我们的一个内部站点上实施 NTLM 身份验证,并且一切正常。我没有的一个难题是如何从 NTLM 获取信息并使用 Active Directory 进行身份验证。
有一个很好的描述 NTLM和用于密码的加密,我用来实现这个,但我不确定如何验证用户的密码是否有效。
我正在使用 ColdFusion,但可以使用任何语言(Java、Python、PHP 等)解决这个问题。
编辑:
我在 Redhat Enterprise Linux 上使用 ColdFusion。不幸的是,我们不能使用 IIS 来管理它,而是必须为此编写或使用第三方工具。
更新-我得到了这个工作,这就是我所做的
请注意,以下方法仅适用于 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>
现在所有匹配的 URL/admin/*
都需要 NTLM 身份验证。