簡體   English   中英

使用LDAP和Java進行用戶身份驗證

[英]User authentication using LDAP and Java

我正在嘗試使用LDAP對用戶進行身份驗證。 但是,密碼是在LDAP中散列的SSHA。 當我向ldap發送明文密碼時,如何驗證uid和密碼。 這是我的代碼

Properties initialProperties=new Properties();
    initialProperties.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    initialProperties.put(Context.PROVIDER_URL,"ldap://localhost:10389");
    initialProperties.put(Context.SECURITY_AUTHENTICATION,"simple");
    initialProperties.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=system");
    initialProperties.put(Context.SECURITY_CREDENTIALS,"secret");

    NamingEnumeration<?> results = null;

    try
    {
        DirContext ctx = new InitialDirContext(initialProperties);
        System.out.println(ctx+"222 success");
        SearchControls controls = new SearchControls();
        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);

        String filter = "(&(objectClass=inetOrgPerson)(uid=" + uID + ")(userPassword="+pwd+")";
        results = ctx.search("", filter, controls);
        if (results.hasMore()) {
            System.out.println("User found");
            return true;
          } else {
            System.out.println("User not found");
            return false;
          }

    }
    catch (Exception e)
    {
        return false;
    }

sysout總是找不到用戶,因為它無法將明文密碼與ssha哈希密碼相匹配? 如何在發送到ldap之前將密碼轉換為SSHA?這是解決此問題的正確方法嗎?

您應該使用ContextSource.getContext(principal, credentials)來驗證用戶。

獲取使用提供的主體和憑據進行身份驗證的DirContext實例。 通常用於普通認證目的。 請注意,此方法永遠不會使用本機Java LDAP池,即使此實例已配置為執行此操作。 這是為了強制目標目錄中的密碼更改盡快生效。

出於安全原因,密碼是經過哈希處理的,您應始終遵從LDAP服務器對用戶進行身份驗證,這是其中一個主要用途。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM