在我開始之前,我已經訪問Unknown Error (0x80005000) with LDAPS Connection並更改我的代碼,雖然它確實解決了這個問題,似乎它有神祕地回來。錯誤0x80005000與LdapConnection和LDAPS
這裏的好東西:
public static bool Authenticate(string username, string password, string domain)
{
bool authentic = false;
try
{
LdapConnection con = new LdapConnection(
new LdapDirectoryIdentifier(Host, Port));
if (IsSSL)
{
con.SessionOptions.SecureSocketLayer = true;
con.SessionOptions.VerifyServerCertificate = ServerCallback;
}
con.Credential = new NetworkCredential(username, password);
con.AuthType = AuthType.Basic;
con.Bind();
authentic = true;
}
catch (LdapException)
{
return false;
}
catch (DirectoryServicesCOMException)
{ }
return authentic;
}
public static bool IsSSL
{
get
{
return ConnectionString.ToLower().Contains("ldaps");
}
}
public static string ConnectionString
{
get
{
if (string.IsNullOrEmpty(_connectionString))
_connectionString = CompleteConfiguration.GetLDAPConnectionString();
return _connectionString;
}
set { _connectionString = value; }
}
public static int Port
{
get
{
var x = new Uri(ConnectionString);
int port = 0;
if (x.Port != -1)
{
port = x.Port;
}
else
{
port = x.OriginalString.ToLower().Contains("ldaps")
? 636
: 389;
}
return port;
}
}
public static string Host
{
get
{
var x = new Uri(ConnectionString);
return x.Host;
}
}
private static bool ServerCallback(LdapConnection connection, X509Certificate certificate)
{
return true;
}
這裏是壞的東西: 當我嘗試驗證的應用程序,我碰到下面的錯誤,更確切地說,這是由con.Bind()觸發線:
[收到COMException(0x80005000):未知的錯誤(0x80005000)] System.DirectoryServices.DirectoryEntry.Bind(布爾throwIfFail)378094 System.DirectoryServices.DirectoryEntry.Bind()36 System.DirectoryServices.DirectoryEntry。 get_NativeOb ject()+31 Complete.Authentication.GCAuthentication.Authenticate(String username,String password,String domain)in c:\ Builds \ 6 \ Idealink.Open.Pancanal \ Panama Canal \ Sources \ Idealink.Open \ Complete.Authentication \ GCAuthentication.cs:27 c:\ Builds \ 6 \ Idealink.Open.Pancanal \ Panama Canal \ Sources \ Idealink中的Complete.Authentication.AuthenticationFactory.ValidateUserLdap(String username,String password,String domain,Boolean isValid,String usernameWithDomain)。打開\ Complete.Authentication \ AuthenticationFactory.cs:93
這是相當混亂,因爲它似乎有些用戶帳戶工作,而其他人不。但是,當我將上述代碼放置在獨立的測試環境中時,無論我使用哪個帳戶,它都會成功。當我將它放回到帶有ASP.NET和IIS的Windows 2008 R2服務器上時,它將失敗,如上所述。儘管失敗是一致的 - 賬戶始終失敗或成功,從這個角度來看,沒有任何隨機性。
必須使用LDAPS和NOT LDAP訪問LDAP服務器,這就是爲什麼我們不能使用DirectoryEntry對象 - LDAP服務器由客戶端控制,因此無法以任何方式重新配置或更改。我們只是想在Web表單上捕獲用戶名/密碼,然後在LDAP服務器上使用BIND來檢查憑證。
我們正在使用.NET 3.5,目前無法升級,因此我恭敬地問,如果您的主要建議和參數要升級,請暫緩您的貢獻。
謝謝,希望你能幫助
Karell,怎麼是一個非常好的網站您連接到LDAP,您可以顯示LDAP連接字符串,例如LDAP:// ... – MethodMan
示例'使用(DirectoryEntry de = new DirectoryEntry())de.Path =「LDAP:// yourSite/rootDSE」; de.Username = @「domain \ Karell」; de。密碼=「密碼」;}' – MethodMan
肯定的事情:LDAPS:// ServerAddress/OU = Users,DC = domain,DC = com - 我們沒有在用戶名上指定域名(從來沒有問題, 「工作」賬戶)。 –