【问题标题】:How to authenticate in LDAP server using keytab如何使用 keytab 在 LDAP 服务器中进行身份验证
【发布时间】:2018-01-15 12:21:08
【问题描述】:

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

【问题讨论】:

  • 我会在这个问题中添加 kerberos 和 gssapi 标签

标签: java ldap jndi kerberos gssapi


【解决方案1】:

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

【讨论】:

  • 谢谢,我已经采用了这种方法,并且无需在主题内手动创建 GSSCredential 也可以工作,但很高兴了解高级方法
  • @T-Heron 谢谢,我的工作量非常/非常糟糕,以至于我的大部分业余活动都很短。
【解决方案2】:

简而言之,这是不可能的——授权由 LDAP 完成,而 keytab 处理身份验证。只能使用基于 LDAP 的方法创建 LdapContext。 Keytabs 及其作为方法和上下文的调用属于 Kerberos 协议,这是一个不同的协议。虽然两者在当今市场上的主要目录服务系统(例如 Active Directory、OpenLDAP、Red Hat IDM)上通常一起使用,但在使用密钥表的 LdapContext 方面不能重叠。密钥表通常用于身份验证方法,而授权方法更通常属于 LDAP(组或属性)。如果您想使用 keytab 文件进行基于 Java 的身份验证,请查看:Creating a keytab for java clients

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2014-07-29
    • 2019-12-25
    • 2016-12-06
    相关资源
    最近更新 更多