列表,
我实际上已经广泛搜索过这个主题,并且a)我不知道如何配置某些内容和/或b)我不太明白JNDI Realm究竟应该做什么。我正在使用Tomcat 7.0.32和jdk 1.7.0_15。
这是我想要做的。我与使用PKI用户证书的客户合作。用户证书有一个类似“Joe Smith”的cn。我需要做的是在LDAP中查找此CN并获取用户ID,这可能类似于“jsmith23”,并在请求标头中填充Principal用户。原因是我在Tomcat中部署了一个专门调用getRemoteUser()的应用程序,并且必须正确填充此id(例如“jsmith23”)。此应用程序有点像另一个第三方工具的Web适配器,因此再次检查LDAP。但是,它必须是此用户ID。
我尝试了很多东西,但似乎无法通过LDAP查找。在我的server.xml中,它看起来如下所示:
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="c:/tomcat7/pki/keystore.jks" keystorePass="changeit"
truststoreFile="c:/tomcat7/pki/cacerts.jks" truststorePass="changeit" />
<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
connectionURL="ldap://servername:3268"
allRolesMode="authOnly"
connectionName="cn=DC Services,OU=Generic,OU=Users,OU=Managed Objects,DC=domain,DC=com"
connectionPassword="mypassword"
userBase="DC=domain,DC=com"
userSubtree="true"
userSearch="cn={0}"
userRoleName="memberOf" />
我的应用程序的web.xml文件如下所示:
<security-constraint>
<web-resource-collection>
<web-resource-name>ArcGIS Web Adapter</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>ArcGIS Web Adapter</realm-name>
</login-config>
<security-role>
<role-name>*</role-name>
</security-role>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
我遇到的问题是,无论我尝试什么,我都会收到此错误:
消息无法使用提供的凭据进行身份验证 description此请求需要HTTP身份验证。
它提示我提供证书,所以我知道这可以通过。 localhost日志文件显示:
FINE:Realm.authenticate()返回false
但是,我知道我正在正确连接,因为如果我更改密码,我根本无法访问该网站。
我想我的一个问题是JNDI领域设置的结果是什么。如果它在LDAP中查找用户名的CN,那么什么?这是否假设提供进入我的Web应用程序所需的身份验证?如果我将所有内容更改为BASIC并使用用户名/密码进行身份验证,则可以完美运行。但是使用CLIENT-CERT并使用LDAP查找,我似乎无法实现我所需要的。
我需要一个根据其证书CN查找用户ID的进程,然后在http请求中填充Principal用户,以便稍后调用getTemoteUser()正常工作。
任何帮助都将不胜感激。
答案 0 :(得分:1)
问题是org.apache.catalina.realm.JNDIRealm
需要用户名和密码。使用CLIENT-CERT
进行身份验证时,org.apache.catalina.realm.RealmBase
可以使用证书中的DN
作为用户名,但无法获取JNDIRealm
所需的密码
答案 1 :(得分:0)
您好我有一个在Tomcat 6.0.18中工作的设置,但它在Tomcat 6.0.37上有类似的问题。在此处查看我的帖子Tomcat 6.0.37 can not retrieve username from LDAP以比较您的配置。希望有所帮助。如果你的Tomcat版本有效,请告诉我......