簡體   English   中英

使用用戶名的 Java LDAP 身份驗證

[英]Java LDAP authentication with username

好吧,這讓我發瘋了。 我正在嘗試使用 Java 創建一個 LDAP 身份驗證,如果我在 SECURITY_PRINCIPAL 中使用我的名字和姓氏,一切都很好。 這是我的代碼:

 try {
    Hashtable<String, String> ldapEnv = new Hashtable<String, String>();
    ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    ldapEnv.put(Context.PROVIDER_URL,  "LDAP://myldap.mydomain.com:389");
    ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
    ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=FirstName LastName" + ",ou=Users");    
    ldapEnv.put(Context.SECURITY_CREDENTIALS, "password");

    DirContext ldapContext = new InitialLdapContext(ldapEnv, null);
    }
    catch (Exception e) {
      System.out.println(" bind error: " + e);
      e.printStackTrace();
   }

問題是它不適用於我的用戶名。 如果我嘗試:

ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=myusername" + ",ou=Users");

或者

ldapEnv.put(Context.SECURITY_PRINCIPAL, "uid=myusername" + ",ou=Users");

我總是得到[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1 ]

出於某種原因,這似乎只適用於我的名字和姓氏。 我檢查了廣告,我的 sAMAccountName 是我正確的用戶名。 不知道為什么會這樣。 其他人有這樣的問題嗎? 我可以將其他內容傳遞給 Context.SECURITY_PRINCIPAL 嗎? 我試過ldapEnv.put(Context. , "sAMAccountName=myusername" + ",ou=Users"); 但它也失敗了......有人可以幫忙嗎?

EJP,感謝您的意見。 您確實是正確的,但我正在尋找一些簡單的東西 - 只需將用戶名和密碼傳遞給 AD 並查看它是否經過身份驗證。我應該在我的第一篇文章中更具體。 你的建議會奏效,但我認為這要簡單得多:

            Hashtable props = new Hashtable();
            String principalName = "username@mydomain.com";
            props.put(Context.SECURITY_PRINCIPAL, principalName);
            props.put(Context.SECURITY_CREDENTIALS, "mypassword");
            DirContext context;

                //try to authenticate
            try {

                   context = com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance("LDAP://myldap.mydomain.com:389" + '/', props);
                   context.close();                    
            }

這樣我就不關心DN了。 只需傳遞用戶名@域和瞧 - 就像一個魅力:) 再次感謝!

沒有其DN包含UIDCN=username的條目。 您必須提供一個存在的條目,而不僅僅是任意屬性字符串。 通常的技術是綁定為管理員用戶,搜索具有該UID的用戶或他提供給您的登錄系統的任何內容,檢索該用戶的DN ,然后嘗試使用用戶提供的密碼綁定為該DN

暫無
暫無

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

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