一位用户无法从我们的应用程序连接 LDAP 服务器
One user is not able to connect LDAP server from our application
我有一个内置于 ASP.Net 3.0 并升级到 4.7 .Net Framework 并部署在 Web 服务器上的应用程序。
在应用程序的登录页面中,我通过 WebAPI 通过 LDAP 验证用户凭据。
每个人都可以登录应用程序,但只有一个用户的 LDAP 身份验证失败。该用户能够通过其他应用程序连接到 LDAP。他能够访问那些也通过同一 LDAP 域对他进行身份验证的应用程序。
当我们与 AD 团队核实时,他们找不到该用户的任何日志,因此怀疑 LDAP 服务器本身没有被该用户击中。
我们正在使用以下代码连接到 LDAP 服务器。
public static bool IsActiveDirectoryLoginValid(string username, string password, out string errorMessage)
{
bool authenticated = false;
string _activeDirectoryDomain = "domain controller name";
try
{
directoryEntry = new DirectoryEntry(string.Format("LDAP://{0}", _activeDirectoryDomain), username, password);
DirectorySearcher ds = new DirectorySearcher(directoryEntry);
ds.FindOne();
authenticated = directoryEntry.NativeObject != null;
errorMessage = !authenticated ? "Unable to authenticate user with provided username and password!" : null;
}
catch(Exception ex)
{
Logger.Error("ActiveDirectoryAuthenticationHelper : IsActiveDirectoryLoginValid " + username, ex);
errorMessage = ex.Message;
authenticated = false; // most commonly user name/ password incorrect
}
return authenticated;
}
如果密码中包含“#”符号,从 MVC 发送到 WebAPI 的密码将被截断。我们更正了它,问题得到了解决。
此外,正如 Fredrik 所建议的那样,NativeObject 会检查用户是否有权读取活动目录信息。我删除了 NativeObject 并使用 FindOne() 方法进行搜索。
我有一个内置于 ASP.Net 3.0 并升级到 4.7 .Net Framework 并部署在 Web 服务器上的应用程序。 在应用程序的登录页面中,我通过 WebAPI 通过 LDAP 验证用户凭据。
每个人都可以登录应用程序,但只有一个用户的 LDAP 身份验证失败。该用户能够通过其他应用程序连接到 LDAP。他能够访问那些也通过同一 LDAP 域对他进行身份验证的应用程序。
当我们与 AD 团队核实时,他们找不到该用户的任何日志,因此怀疑 LDAP 服务器本身没有被该用户击中。
我们正在使用以下代码连接到 LDAP 服务器。
public static bool IsActiveDirectoryLoginValid(string username, string password, out string errorMessage)
{
bool authenticated = false;
string _activeDirectoryDomain = "domain controller name";
try
{
directoryEntry = new DirectoryEntry(string.Format("LDAP://{0}", _activeDirectoryDomain), username, password);
DirectorySearcher ds = new DirectorySearcher(directoryEntry);
ds.FindOne();
authenticated = directoryEntry.NativeObject != null;
errorMessage = !authenticated ? "Unable to authenticate user with provided username and password!" : null;
}
catch(Exception ex)
{
Logger.Error("ActiveDirectoryAuthenticationHelper : IsActiveDirectoryLoginValid " + username, ex);
errorMessage = ex.Message;
authenticated = false; // most commonly user name/ password incorrect
}
return authenticated;
}
如果密码中包含“#”符号,从 MVC 发送到 WebAPI 的密码将被截断。我们更正了它,问题得到了解决。
此外,正如 Fredrik 所建议的那样,NativeObject 会检查用户是否有权读取活动目录信息。我删除了 NativeObject 并使用 FindOne() 方法进行搜索。