繁体   English   中英

如何使用keytab在LDAP服务器中进行身份验证

[英]How to authenticate in LDAP server using keytab

有没有一种方法可以使用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文件的正确方法是什么呢?

是的,您可以,而且效果很好。 看看我的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();

确保您具有一个配置为条目MyAlternativeEntryNamelogin.conf ,其外观如下:

MyAlternativeEntryName {
        com.sun.security.auth.module.Krb5LoginModule required doNotPrompt=true
        principal="myprincipal@EXAMPLE.COM"
        useKeyTab=true keyTab="/path/to/krb5.keytab" storeKey=true;
};

简而言之,不可能做到这一点-授权由LDAP完成,而keytab处理身份验证。 只能使用基于LDAP的方法来创建LdapContext。 键表及其作为方法和上下文的调用属于Kerberos协议(这是一种不同的协议)。 尽管两者在当今市场上的主要目录服务系统(例如Active Directory,OpenLDAP,Red Hat IDM)上通常一起使用,但是就使用键表使用LdapContext而言,您不能重叠。 密钥表通常用于身份验证方法中,而授权方法通常属于LDAP(组或属性)。 如果要使用密钥表文件进行基于Java的身份验证,请查看以下内容: 为Java客户端创建密钥表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM