我正在尝试使用Kerberos进行身份验证运行tomcat JNDIRealm(authentication =“GSSAPI”)。
然而,我得到了这个:
SEVERE: Catalina.start: LifecycleException: Exception opening directory server connection: javax.naming.AuthenticationException: GSSAPI [Root exception is javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Attempt to obtain new INITIATE credentials failed! (null)) ]]
我在server.xml中有这个:
<Realm className="org.apache.catalina.realm.JNDIRealm" authentication="GSSAPI" connectionName="CN=XXX User,OU=XXXGenericAccounts,\ DC=xxx,DC=com" connectionPassword="blah" connectionURL="ldap://blah.xxx.com:389" alternateURL="ldap://blah.xxx.com:389" roleBase="OU=XXXGroups,DC=xxx,DC=com" roleName="cn" roleSearch="member={0}" roleSubtree="true" userBase="OU=XXXUsers,DC=xxx,DC=com" userSearch="sAMAccountName={0}" userSubtree="true"/>
知道我在这里缺少什么吗?
答案 0 :(得分:1)
错误表示Kerberos设置不正确。
您需要使用-D或System.setProperty()
,
java.security.krb5.realm : Default realm, like EXAMPLE.COM
java.security.krb5.kdc : KDC hostname, like ad.example.com
答案 1 :(得分:1)
jorel:
除了定义realm / KDC的初始问题之外,您收到的NamingException在错误消息中描述---您的LDAP服务器“blah.xxx.com”不允许匿名绑定,并且tomcat试图在没有绑定的情况下运行搜索。
如果您希望使用用户的凭据搜索LDAP,则问题在于它不会将凭据转发到LDAP。我还不熟悉这些东西在Java中是如何工作的,但是有几个可能的原因:
如果您尝试使用connectionName DN作为bindDN进行搜索,请检查LDAP服务器上的故障 - 即。 “凭据无效”(用户/通过不正确)或ACL问题。
答案 2 :(得分:1)
您需要通过系统属性传递: