当前位置:  开发笔记 > 编程语言 > 正文

如何在Active Directory中使用NTLM身份验证

如何解决《如何在ActiveDirectory中使用NTLM身份验证》经验,为你挑选了1个好方法。

我正在尝试在我们的一个内部网站上实现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:


    Ntlm

    
        NtlmHttpFilter
        jcifs.http.NtlmHttpFilter

        
            jcifs.http.domainController
            dc01.corp.example.com
        
        
            jcifs.smb.client.domain
            CORP.EXAMPLE.COM
        
    

    
        NtlmHttpFilter
        /admin/*
    

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



1> user8134..:

你真正要问的是:有没有办法验证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服务调用的软件包非常少.我唯一知道的是:

    Windows(当然)

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

    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接受器,你应该使用它.

麦克风

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有