Java 使用SPNEGO(Kerberos TGT)进行身份验证时更改LDAP属性
因此,我成功地使用SPNEGO进行了身份验证,并使用来自KDC的TGT获取了主体名称。但是我一直在讨论如何在LDAP中通过使用TGT令牌、DN(可分辨名称)和主体名称来更新该用户的属性 我看到的示例与以下类似:Java 使用SPNEGO(Kerberos TGT)进行身份验证时更改LDAP属性,java,ldap,kerberos,spnego,Java,Ldap,Kerberos,Spnego,因此,我成功地使用SPNEGO进行了身份验证,并使用来自KDC的TGT获取了主体名称。但是我一直在讨论如何在LDAP中通过使用TGT令牌、DN(可分辨名称)和主体名称来更新该用户的属性 我看到的示例与以下类似: private static void performJndiOperation(String[] args) { // Set up environment for creating initial context Hashtable env = new Hashtable(11);
private static void performJndiOperation(String[] args) {
// Set up environment for creating initial context
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
// Must use fully qualified hostname
env.put(Context.PROVIDER_URL, "ldap://ldap.jnditutorial.org:389/o=JndiTutorial");
// Request the use of the "GSSAPI" SASL mechanism
// Authenticate by using already established Kerberos credentials
env.put(Context.SECURITY_AUTHENTICATION, "GSSAPI");
try {
/* Create initial context */
DirContext ctx = new InitialDirContext(env);
// do something useful with ctx
...
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
但我得到一个无效凭据的例外:
javax.naming.AuthenticationException: GSSAPI [Root exception is javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Invalid option setting in ticket request.)]]
你知道我做错了什么吗?
非常感谢您的帮助检查您的
krb5.conf
查看可更新的
和可代理的
,并使用这些选项。它实际上应该可以解决您的问题。您是否对该错误消息进行过任何研究,例如检查?要尝试的几个调试标志(由)=>-Dsun.security.krb5.debug=true提供)
加上-Dsun.security.spnego.debug=true加上我个人最喜欢的-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext
是的,我做了很多研究,我有所有这些标志。我发现问题出在active directory中,因为用户没有更改属性的权限。我不知道为什么它给出的是身份验证错误而不是权限错误。不过还是要谢谢你的回答:)