簡體   English   中英

在c#ASP.Net網站中使用Active Directory帳戶自動登錄

[英]Auto Signin with Active Directory Account in c# ASP.Net Website

我們有一個網站,可以作為員工的內聯網和外部人員的互聯網。 我們所有的員工帳戶都在Active Directory中。 因此,當內部員工瀏覽URL時(例如http://app.abc.com ),他們應該使用他們的AD帳戶自動登錄。

但是,對於外部用戶,他們必須使用他們的用戶名和密碼。 我可以通過查找數據庫並進行身份驗證來輕松完成此部分。

我想知道如何自動登錄AD用戶進入網站。

您將使用Windows身份驗證提供程序來使用Windows身份驗證(這是AD身份驗證)。

http://msdn.microsoft.com/en-us/library/907hb5w9.aspx

但是,你所說的是混合模式認證......這有點棘手。 但它包含在這里: http//msdn.microsoft.com/en-us/library/ms972958.aspx和這里http://www.15seconds.com/issue/050203.htm

public bool Authenticate(string userName, string passwd)
        {
            //Domain .
            string domain = "YOUR_DOMAIN_NAME";
            string domainAndUsername = domain + @"\" + userName;
            //Path of Active Directory Entry e.g. path="LDAP://DC=onecity,DC=corp,DC=fabrikam,DC=com"; 
            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();
        }

暫無
暫無

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

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