有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

身份验证使用JNDI/Java中的当前用户在LDAP上进行身份验证

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

我必须编写一个java应用程序来检查特定用户所属的ou

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

JNDI和Java是否有办法向当前登录的用户进行身份验证


共 (3) 个答案

  1. # 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) {}
            }
        }       
    }
    
  2. # 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中演示

    另见

  3. # 3 楼答案

    由于似乎没有真正的解决方案,我现在开始在脚本/工具开始时请求登录信息,并在需要时使用它