我正在开发一个Web应用程序,可以根据Active Directory服务器对用户进行身份验证。现在,如果我在该AD服务器所在的域中从开发PC运行我的代码,则我的代码可以平稳运行。我们需要使用VPN从完全不同的网络中运行代码,而此处的开发PC不在该AD中。尝试访问AD服务器时出现以下错误。



我的VPN运行正常。我可以使用此VPN访问远程桌面。我知道需要一些调整才能解决问题,但找不到它。我经过以下链接,但找不到任何解决方案。

  • Domain Authentication from .NET Client over VPN
  • How do I get the Current User identity for a VPN user in a Windows forms app?

  • 以下是我在web.config中的设置
    <appSettings>
       <add key="LDAPPath" value="LDAP://DC=MYSERVER,DC=COM" />
       <add key="ADGroupName" value="Analyst"/>
    </appSettings>
    

    这是我的代码
    public class LdapAuthentication
    {
        private string _path;
        private string _filterAttribute;
    
        public LdapAuthentication()
        {
            _path = System.Configuration.ConfigurationManager.AppSettings["LDAPPath"].ToString();
        }
    
        public bool IsAuthenticated(string username, string pwd)
        {
            try
            {
                DirectoryEntry entry = new DirectoryEntry(_path, username, pwd);
    
                entry.Path = _path;
                entry.Username = username;
                entry.Password = pwd;
    
                // 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)
            {
                throw new Exception("Error authenticating user. " + ex.Message);
            }
    
            return true;
        }
    }
    

    任何帮助,将不胜感激。谢谢你。

    最佳答案

    我有一个类似的问题,但更为简单。我成功使用了以下代码:

    private bool DoLogin(string userName, string password)
    {
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DomainName.com")) {
            bool isValid = pc.ValidateCredentials(userName, password);
            if (isValid) {
                // authenticated
                ...
                return true;
            }
            else {
                // invalid credentials
                ...
                return false;
            }
        }
    }
    

    在域名末尾使用“.com”对于使它对我有用很重要。没有它,我得到的症状与您描述的相同。

    关于c# - 在C#中使用VPN进行Active Directory身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18954421/

    10-14 05:13