ldap 인증의 일반적인 절차

2743 단어 LDAP 인증
데이터베이스를 이용하여 검증하는 것과 유사하게 LDAP에서도 로그인 이름과 비밀번호를 이용하여 검증한다. LDAP에서는 사용자 비밀번호를 저장하는 속성password를 정의하고 로그인 이름은 메일 주소를 많이 사용한다.그러면 LDAP로 인증을 올바르게 하려면 어떻게 해야 합니까? 다음은 올바르고 통용되는 절차입니다. 1.클라이언트로부터 로그인 이름과 비밀번호를 얻습니다.이곳의 로그인 이름과 비밀번호가 처음에는 사용되지 않았음을 주의하세요.2. 먼저 익명으로 LDAP 서버에 연결합니다. 만약 LDAP 서버가 익명 연결을 사용하지 않았다면 기본 사용자를 제공할 것입니다. 이 사용자로 연결을 하면 됩니다.3. 이전에 입력한 로그인 이름은 여기에서 유용합니다. 마지막 귀속이 성공한 후에 검색을 실행해야 합니다. 필터는 로그인 이름으로 구성되어 있습니다. 예를 들어 "(| (uid=$login) (mail=$login)"는 로그인 이름입니다.검색이 끝난 후에 결과에 대한 판단이 필요합니다. 만약에 하나의 entry만 되돌려준다면 이것은 이 사용자 정보를 포함하는 entry입니다. 이 entry의 DN을 얻어 다음에 사용할 수 있습니다.만약 되돌아오는 것이 한 개가 아니거나 돌아오지 않았다면 사용자 이름 입력이 틀렸다는 것을 설명할 수 있습니다. 검증을 끝내고 오류 정보를 되돌려야 합니다.4. 이 단계까지 진행할 수 있다면 상응하는 사용자를 사용하고 이전 단계에서 사용자 정보가 있는 entry의 DN을 얻었다는 것을 설명합니다. 이 DN과 첫 번째 단계에서 얻은 패스워드로 LDAP 서버를 다시 연결해야 합니다.5. 이전 단계를 실행하면 검증의 주요 과정이 끝납니다. 만약 성공적으로 귀속될 수 있다면 검증이 성공했고 안 된다면 비밀번호 오류 정보를 되돌려야 합니다.
이 5가지 단계는 LDAP 기반의 "2회 바인딩"검증 방법입니다.
<span style="font-size:18px;">bool checkResult = false;
                try
                {
                    string username = Request.Params.Get("username");
                    string userpwd = Request.Params.Get("userpwd");
                    string strLADPath = "LDAP://OU= ,DC=HOLD,DC=Company,DC=COM";
                   
                    DirectoryEntry objEntry = new DirectoryEntry(strLADPath);
                    objEntry.AuthenticationType = AuthenticationTypes.None;

                    DirectorySearcher deSearch = new DirectorySearcher(objEntry);
                    // 
                    deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
                    deSearch.SearchScope = SearchScope.Subtree;
                    //find the first instance 
                    SearchResult results = deSearch.FindOne();
                    //check username & userpwd
                    if (null != results)
                    {
                        DirectoryEntry objUserEntry = new DirectoryEntry(results.Path, username, userpwd);
                        if (null != objUserEntry && null != objUserEntry.Properties
                            && objUserEntry.Properties.Contains("cn"))
                        {
                            checkResult = true;
                        }
                    }

                    Response.Write(" :" + checkResult.ToString());
                }
                catch (System.Exception ex)
                {
                    Response.Write(" "+ex.StackTrace);
                    Response.Write(" :" + checkResult.ToString());
                }</span>

좋은 웹페이지 즐겨찾기