Authentication Tomcat 6-使用加密密码通过active directory进行身份验证

Authentication Tomcat 6-使用加密密码通过active directory进行身份验证,authentication,tomcat,encryption,active-directory,digest,Authentication,Tomcat,Encryption,Active Directory,Digest,我正在尝试使用active directory用户连接到tomcat。 密码为纯文本时,如下所示: <Realm className="org.apache.catalina.realm.JNDIRealm" connectionURL="ldap://localhost:389" connectionName="user_name" connectionPassword="password" userBase="OU=blabla,DC=aaa,DC=co

我正在尝试使用active directory用户连接到tomcat。 密码为纯文本时,如下所示:

<Realm className="org.apache.catalina.realm.JNDIRealm"   
connectionURL="ldap://localhost:389"     
connectionName="user_name" 
connectionPassword="password"       
userBase="OU=blabla,DC=aaa,DC=com"       
userSubtree="true"      
userSearch="(sAMAccountName={0})"   
userRoleName="memberOf" 
roleBase="OU=blabla,DC=aaa,DC=com"   
roleName="cn"    
roleSubtree="true"         
roleSearch="(member={0})"        />
身份验证正常。但是,我的配置文件中不需要密码

我尝试了以下方法:

<Realm className="org.apache.catalina.realm.JNDIRealm"   
connectionURL="ldap://localhost:389"    
digest="MD5" 
connectionName="user_name"  
connectionPassword="encrypted_password"        
userBase="OU=blabla,DC=aaa,DC=com"       
userSubtree="true"      
userSearch="(sAMAccountName={0})"  
userRoleName="memberOf"
roleBase="OU=blabla,DC=aaa,DC=com"   
roleName="cn"   
roleSubtree="true"       
roleSearch="(member={0})"        /> 
但是身份验证失败了。 我没有找到任何解决办法。 我真的很感激任何帮助


谢谢你

我认为你唯一的选择是子类JNDIRealm并创建一个新属性,该属性将具有某种加密的连接密码。密码不能散列,例如您指定的MD5,因为散列是无法撤消散列的一种方式,Tomcat需要原始未散列形式的密码来验证AD安装


如果您在JNDIRealm子类中使用可逆加密,那么当Tomcat需要密码时,您可以解密密码并将其传递。

帮您的用户一个忙,不要使用基本身份验证。使用SPNEGO和AD:我按照你的建议做了。我为JNDIrealm创建了一个子类,它覆盖getConnectionPassword。它获取加密密码并对其进行解密。我现在可以连接了。但现在,情况发生了变化,当我尝试使用用户登录时,身份验证失败。我检查了源代码,没有看到getConnectionPassword和getUserPassword之间的连接。我将非常感谢你的帮助。我不能在没有看到具体设置的情况下使用用户登录我不知道我还能得到多少帮助。。。我不知道具体的广告配置,例如。。。但我会说,在这种情况下,我喜欢拿出Wireshark,看看Tomcat和广告服务器之间的通信或尝试,看看到底发生了什么。试试看,也许?另外,尝试将adCompat=true添加到领域配置中。。。它对Active Directory和其他LDAP的作用略有不同。