繁体   English   中英

ASP.NET中的Active Directory身份验证

[英]Active Directory authentication in ASP.NET

我正在尝试实现活动目录身份验证,但是却遇到了类似的异常

System.Runtime.InteropServices.COMException was caught
  Message=Unknown error (0x80005000)
  Source=System.DirectoryServices
  ErrorCode=-2147463168
  StackTrace:
       at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
       at System.DirectoryServices.DirectoryEntry.Bind()
       at System.DirectoryServices.DirectoryEntry.get_AdsObject()
       at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
       at System.DirectoryServices.DirectorySearcher.FindOne()
       at ConsoleApplication1.ADAuthentication.AuthenticateADUsers(String userNameWithDomain, String password) in C:\Users\awadhendrat\documents\visual studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 83
       at ConsoleApplication1.Program.Main(String[] args) in C:\Users\awadhendrat\documents\visual studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 23
  InnerException: 

我不知道我在想什么。 以下代码是我为实现AD身份验证编写的。

public bool AuthenticateADUsers(string userNameWithDomain, string password)
        {
            DirectoryEntry objDirectoryEntry = null;
            DirectorySearcher objDirectorySearcher = null;

            try
            {
                objDirectoryEntry = new DirectoryEntry("https://ab.hotels.com/", userNameWithDomain, password, AuthenticationTypes.Delegation);
                objDirectorySearcher = new DirectorySearcher(objDirectoryEntry);
                objDirectorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", userNameWithDomain.Substring(0, userNameWithDomain.IndexOf('@')));
                objDirectorySearcher.PropertiesToLoad.Add("msRTCSIP-PrimaryUserAddress");
                var result = objDirectorySearcher.FindOne();
                if (result != null)
                    return true;
                else
                    return false;                           
            }
            catch
            {
                throw;
            }
        }

我已经做了一些谷歌,但没有得到帮助。 在这里,就像他们在哪里写LDAP:// somedomain /一样,我几乎没有困惑,但是在这里,我拥有https://somedomain.com,另一个困惑是我的测试应用程序位于一个域上,而提供的域位于另一服务器上。

当我打开由客户端提供的用于AD身份验证的链接时,它将打开Open Office Web Access。

我不怎么解决这个问题。

谢谢。

根据此答案 (以及我编写的用于测试此代码的一些快速代码),这是一个权限问题(可能与您对AD路径使用https URL,检查此代码以构建DirectoryEntry或您正在执行以下操作有关)使用您要验证的同一用户进行完整的AD搜索)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM