2011-02-28 6 views
3

우리는 직원들을위한 인트라넷과 외부 사람들을위한 인터넷으로 사용할 수있는 웹 사이트를 가지고 있습니다. 모든 직원 계정은 Active Directory에 있습니다. 따라서 내부 직원이 URL을 검색하면 (예 : http://app.abc.com) AD 계정을 사용하여 자동으로 로그인해야합니다.C# ASP.Net 웹 사이트의 Active Directory 계정이있는 자동 로그인

그러나 외부 사용자의 경우 사용자 이름과 비밀번호를 사용해야합니다. 나는 데이터베이스를보고 인증을함으로써이 부분을 쉽게 할 수 있었다.

나는 광고 사용자가 웹 사이트에 자동으로 로그인 할 수있는 방법을 알고 싶습니다.

답변

0
public bool Authenticate(string userName, string passwd) 
     { 
      //Domain . 
      string domain = "YOUR_DOMAIN_NAME"; 
      string domainAndUsername = domain + @"\" + userName; 
      DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, passwd); 

      try 
      { 
       //Bind to the native AdsObject to force authentication. 
       object obj = entry.NativeObject; 

       DirectorySearcher search = new DirectorySearcher(entry); 

       search.Filter = "(SAMAccountName=" + userName + ")"; 
       search.PropertiesToLoad.Add("cn"); 
       SearchResult result = search.FindOne(); 

       if (null == result) 
       { 
        return false; 
       } 

       //Update the new path to the user in the directory. 
       _path = result.Path; 
       _filterAttribute = (string)result.Properties["cn"][0]; 
      } 
      catch (Exception ex) 
      { 

       PageLogger.AddToLogError("AUTH_ERROR", ex); 
       return false; 

      } 

      return true; 
     } 

     private string GetGroups() 
     { 
      DirectorySearcher search = new DirectorySearcher(_path); 
      search.Filter = "(cn=" + _filterAttribute + ")"; 
      search.PropertiesToLoad.Add("memberOf"); 
      StringBuilder groupNames = new StringBuilder(); 

      try 
      { 
       SearchResult result = search.FindOne(); 
       int propertyCount = result.Properties["memberOf"].Count; 
       string dn; 
       int equalsIndex, commaIndex; 

       for (int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++) 
       { 
        dn = (string)result.Properties["memberOf"][propertyCounter]; 
        equalsIndex = dn.IndexOf("=", 1); 
        commaIndex = dn.IndexOf(",", 1); 
        if (-1 == equalsIndex) 
        { 
         return null; 
        } 
        groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)); 
        groupNames.Append("|"); 
       } 
      } 
      catch (Exception ex) 
      { 
       throw new Exception("Error obtaining group names. " + ex.Message); 
      } 
      return groupNames.ToString(); 
     } 
관련 문제