使用 LDAP 对 Active Directory 实施单点登录的步骤是什么?

What are the steps to implement single sign on against Active Directory using LDAP?

我需要在我的 C++ 应用程序中根据 Active Directory 对用户进行身份验证。我知道我需要绑定到某些东西并使用用户的专有名称和密码进行身份验证。这个专有名称通常很长,带有逗号并包含用户名。

假设用户在我的应用程序的用户名和密码框中输入了一些内容。如何找到要绑定的专有名称?我必须为它写一个搜索查询吗?

您需要:

  1. 根据用户在表单中输入的内容在 AD 中搜索用户的 DN,通常是电子邮件地址或用户 ID 或其他唯一的内容。除非 AD 支持匿名搜索,否则您需要使用有权执行此搜索的管理员 account/password 绑定到它。这是通过 LDAP 过滤器表达式完成的,这是您需要查找的主题。

  2. When/if 您已找到它,使用该条目的 DN 和表单中的密码重新绑定到 AD。

如果任何一步失败,则登录失败,不要告诉用户是哪一步,即不要告诉他'no such user'或'wrong password',只告诉他'bad credentials' 或类似的两种情况。否则你就是在向攻击者泄露信息。