gpt4 book ai didi

c# - 无法使用 C# 和 LdapConnection 对 Apache DS 进行身份验证?

转载 作者:行者123 更新时间:2023-11-30 17:44:50 26 4
gpt4 key购买 nike

问题

我安装并配置了运行 ldap 的 ApacheDS 服务器。这对我自学 ldap 来说是一个巨大的进步。但是,以下 C# 控制台代码返回以下错误:

System.DirectoryServices.Protocols.LdapException {"The supplied credential is invalid"}

我的代码是使用此示例代码来验证示例用户。

代码

程序.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SampleLdapAuthentication
{
class Program
{
static void Main(string[] args)
{
RunLdap run = new RunLdap("localhost", "organization", 635, "hderp", "spaceballs1234");
bool result = run.ValidateCredentials();
if(result)
{
Console.WriteLine("Authentication Succeeded");
}
else
{
Console.WriteLine("Authentication Failed");
}
}
}
}

示例LdapAuthentication.cs

using System;
using System.Collections.Generic;
using System.DirectoryServices.Protocols;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace SampleLdapAuthentication
{
public class RunLdap
{

private static string _domainController;
private static string _domain;
private static int _port;
private static string _userName;
private static string _userPassword;



//Constructor. Takes the domain controller, domain, port, username, and password and then calls Ldap Method to run authentication
public RunLdap(string domainController, string domain, int port, string userName, string userPassword)
{
_domainController = domainController;
_domain = null;
_port = port;
_userName = userName;
_userPassword = userPassword;
}



public bool ValidateCredentials()
{


LdapDirectoryIdentifier ldi = new LdapDirectoryIdentifier(_domainController, _port);
NetworkCredential networkCredential = new NetworkCredential(_userName, _userPassword, _domain);

try
{
//We use using so we dispose the object as soon as it goes out of scope
using (LdapConnection connection = new LdapConnection(ldi))
{

//connection.SessionOptions.SecureSocketLayer = true;
connection.AuthType = AuthType.Kerberos;
connection.Bind(networkCredential);

//Not sure what this is doing


}
return true;

}
catch(LdapException ldapException)
{
return false;
}


return false;



}//End of ValidateCredentials

}
}

LDAP 服务器详细信息

Attribute Description

Gui Tree

enter image description here

注意事项

以下是我在做的事情中值得注意的:

  • 我按照本教程创建了服务器和 DIT .
  • 据我了解,ApacheDS 现在支持开箱即用的 keberos,所以我的身份验证类型应该没问题。即,AuthType
  • connection.Bind() 方法失败

我在想,我输入凭据的方式可能有问题,但我的 C# 代码没有问题。这就是我包含服务器 AD 信息的原因。我是 LDAP 的新手,并使用它来验证用户身份,因此非常感谢您的帮助。

最佳答案

您没有使用用户的专有名称。当您创建 NetworkCredential 对象时,您应该使用用户的专有名称,在这种情况下,cn=Herp Derp,ou=users,o=organization 而不是hderp。如果没有 oou 值,LDAP 不知道去哪里寻找 hderp

关于c# - 无法使用 C# 和 LdapConnection 对 Apache DS 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28930446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com