验证对LDAP在JNDI / Java的当前用户(Authenticate on LDAP with

2019-07-29 20:20发布

我想我会找到更多关于这个话题,但我没有。

我必须写一个Java应用程序,它检查其鸥特定用户是其一部分。

但是,随着服务器进行身份验证,我不能要求输入用户名和密码,也无法将其存储在源(或其他文件)。

是否有使用JNDI和Java的方式与谁是当前登录的用户进行身份验证?

Answer 1:

所有你能做的就是检查是否存在使用同一用户名比当前登录您的Java应用程序的用户的一些用户。 您将无法检查别的没有密码。 要做到这一点,你需要有权限列出其他用户的一些LDAP用户的用户名和密码。 然后你就可以查询用户的LDAP。

这是改编自我用的东西的例子,它会检查针对Active Directory,也许这将需要一些变化:

boolean userFound = user_exits("searchUser",
        "searchPassword",
        "(sAMAccountName={USERNAME})",
        "ldap://ldap.mydomain.com",
        "OU=MYOU,dc=mydomain,dc=com");

private boolean user_exits(String searchUser, String searchPassword,
        String filter, String url, String baseDn) throws NamingException {
DirContext ctx = null;
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, searchUser);
env.put(Context.SECURITY_CREDENTIALS, searchPassword);

try {
    ctx = new InitialDirContext(env);
        String[] attributeFilter = {};
        SearchControls sc = new SearchControls();
        sc.setReturningAttributes(attributeFilter);
        sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

        NamingEnumeration<SearchResult> results = ctx.search(baseDn, filter, sc);
        return results.hasMore();

    } catch (NamingException e) {
        throw e;
    } finally {
        if (ctx != null) {
            try {
                ctx.close();
            } catch (NamingException e) {}
        }
    }       
}


Answer 2:

如果LDAP客户端有一个现有的连接,使用who am i? 延长请求,或authorization identity request control ,以确定现有连接的AUTHID - LDAP兼容服务器和UnboundID LDAP SDK将支持这两种方法。 在who am i? 扩展请求可以在任何时候使用的连接上(假设验证标识具有使用扩展请求许可),但authorization identity request control只能连接到一个绑定请求。

使用的who am i? 延长请求和所述authorization identity request control中演示AuthDemo.java 。

也可以看看

  • 帐户的目录中的数据库状态
  • 授权身份请求控制
  • 我是谁? 扩展请求


Answer 3:

因为它似乎没有真正解决这个问题,我现在跟在脚本/工具开始要求登录信息,并在需要时使用它。



文章来源: Authenticate on LDAP with current user in JNDI/Java