C# 无法在 LDAP 中加载正确的用户属性
C# failed to load right user attribute in LDAP
我无法使用以下代码从 LDAP 检索正确的用户属性:
string login = "UID=" + txtUsername.Text + ",DC=example,DC=com";
string password = txtPwd.Text;
string domain = txtDomain.Text;
int port = Convert.ToInt32(txtPort.Text);
string searchBase = "DC=example,DC=com";
string searchFilter = "(objectclass=person)";
LdapConnection conn = new LdapConnection();
try
{
conn.Connect(domain, port);
conn.Bind(login, password);
HashSet<string> users = new HashSet<string>();
LdapSearchResults searchResults = conn.Search(searchBase,
LdapConnection.SCOPE_SUB,
searchFilter,
null,
false);
while (searchResults.hasMore())
{
var nextEntry = searchResults.next();
nextEntry.getAttributeSet();
var attr = nextEntry.getAttribute("cn");
if (attr == null)
{
users.Add(nextEntry.getAttribute("mail").StringValue);
}
else
{
users.Add(attr.StringValue);
}
Session["Name"] = users.First();
Response.Redirect("~/default.aspx");
}
}
catch (LdapException ex)
{
lblErr.Visible = true;
lblErr.Text = "Error authenticating: " + ex.LdapErrorMessage;
return;
}
catch (Exception ex)
{
lblErr.Visible = true;
lblErr.Text = "Error authenticating: " + ex.Message;
}
finally
{
conn.Disconnect();
}
例如,我想获取名为 Albert Einstein 的用户的属性,但无论我输入什么用户名,我总是获取 Isaac Newton 的属性
我正在使用这个参考:
我正在使用 ForumSYS 的 public LDAP 服务器,域应该是 ldap.forumsys.com
,端口是 389
当您说“不管我输入什么用户名”时,您指的是 txtUsername.Text
吗?因为您仅使用它来进行身份验证,而不是进行搜索。您正在搜索目录中的每个用户,因为您将过滤器设置为 (objectclass=person)
.
如果您只想查找一位用户,请将过滤器设置为仅查找该用户。例如:
string searchFilter = "(cn=Albert Einstein)";
我无法使用以下代码从 LDAP 检索正确的用户属性:
string login = "UID=" + txtUsername.Text + ",DC=example,DC=com";
string password = txtPwd.Text;
string domain = txtDomain.Text;
int port = Convert.ToInt32(txtPort.Text);
string searchBase = "DC=example,DC=com";
string searchFilter = "(objectclass=person)";
LdapConnection conn = new LdapConnection();
try
{
conn.Connect(domain, port);
conn.Bind(login, password);
HashSet<string> users = new HashSet<string>();
LdapSearchResults searchResults = conn.Search(searchBase,
LdapConnection.SCOPE_SUB,
searchFilter,
null,
false);
while (searchResults.hasMore())
{
var nextEntry = searchResults.next();
nextEntry.getAttributeSet();
var attr = nextEntry.getAttribute("cn");
if (attr == null)
{
users.Add(nextEntry.getAttribute("mail").StringValue);
}
else
{
users.Add(attr.StringValue);
}
Session["Name"] = users.First();
Response.Redirect("~/default.aspx");
}
}
catch (LdapException ex)
{
lblErr.Visible = true;
lblErr.Text = "Error authenticating: " + ex.LdapErrorMessage;
return;
}
catch (Exception ex)
{
lblErr.Visible = true;
lblErr.Text = "Error authenticating: " + ex.Message;
}
finally
{
conn.Disconnect();
}
例如,我想获取名为 Albert Einstein 的用户的属性,但无论我输入什么用户名,我总是获取 Isaac Newton 的属性
我正在使用这个参考:
我正在使用 ForumSYS 的 public LDAP 服务器,域应该是 ldap.forumsys.com
,端口是 389
当您说“不管我输入什么用户名”时,您指的是 txtUsername.Text
吗?因为您仅使用它来进行身份验证,而不是进行搜索。您正在搜索目录中的每个用户,因为您将过滤器设置为 (objectclass=person)
.
如果您只想查找一位用户,请将过滤器设置为仅查找该用户。例如:
string searchFilter = "(cn=Albert Einstein)";