Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SPNEGO(Kerberos TGT)进行身份验证时更改LDAP属性_Java_Ldap_Kerberos_Spnego - Fatal编程技术网

Java 使用SPNEGO(Kerberos TGT)进行身份验证时更改LDAP属性

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);

因此,我成功地使用SPNEGO进行了身份验证,并使用来自KDC的TGT获取了主体名称。但是我一直在讨论如何在LDAP中通过使用TGT令牌、DN(可分辨名称)和主体名称来更新该用户的属性

我看到的示例与以下类似:

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中,因为用户没有更改属性的权限。我不知道为什么它给出的是身份验证错误而不是权限错误。不过还是要谢谢你的回答:)