是否有可能使用keytab文件创建LdapContext而不是直接提供凭据?所以我们假设我目前有这样的代码
Hashtable<String,String> env=new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,LDAP_PROVIDER_URL);
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,LDAP_PRINCIPAL);
env.put(Context.SECURITY_CREDENTIALS,LDAP_CREDENTIALS);
LdapContext ctx = new InitialLdapContext(env,null);
因此,您可以看到我手动指定用户名和密码。那么指定keytab文件的正确方法是什么?
答案 0 :(得分:2)
是的,你可以,而且效果很好。看看我的DirContextSource库,它将为您完成所有艰苦的工作:
DirContextSource.Builder builder = new DirContextSource.Builder("ldap://hostname");
builder.gssApiAuth("MyAlternativeEntryName");
DirContextSource contextSource = builder.build();
// try and catch block omitted for the sake of brevity,
// handle NamingException appropriately
DirContext context = contextSource.getDirContext();
// Perform operations
context.close();
确保您为login.conf
配置了条目MyAlternativeEntryName
,如下所示:
MyAlternativeEntryName {
com.sun.security.auth.module.Krb5LoginModule required doNotPrompt=true
principal="myprincipal@EXAMPLE.COM"
useKeyTab=true keyTab="/path/to/krb5.keytab" storeKey=true;
};
答案 1 :(得分:1)
简而言之,不可能这样做 - 授权由LDAP完成,而keytab处理身份验证。只能使用基于LDAP的方法创建LdapContext。 Keytabs及其作为方法和上下文的调用属于Kerberos协议,这是一种不同的协议。虽然两者通常在当今市场上的主要目录服务系统上一起使用(例如Active Directory,OpenLDAP,Red Hat IDM),但在使用密钥表的LdapContext方面,您不能重叠。 Keytabs通常用于身份验证方法,而授权方法通常属于LDAP(组或属性)。如果要使用keytab文件进行基于Java的身份验证,请查看以下内容:Creating a keytab for java clients