Delphi LDAP 与 Active Directory 客户端

让用户使用其 Windows 域密码登录。通过加密连接对照 Active Directory、OpenLDAP 或任意 LDAP v3 目录验证凭据,并读取决定用户权限的组。

TsgcLDAPClient

一个 LDAP v3 客户端,用于验证用户身份、搜索目录并解析组成员关系,包括嵌套的 Active Directory 组。

组件类

TsgcLDAPClient(单元 sgcAuth_LDAP_Client

平台

Windows, macOS, Linux, iOS, Android

版本

Enterprise 和 All-Access,以及 sgcAuth 软件包。sgcWebSockets .NET 中同样提供。

连接、验证身份、读取组

将 Host 指向域控制器,选择 LDAPS 或 StartTLS,在 BindDN / Password 中设置服务账号,然后使用用户输入的内容调用 Authenticate。

uses
  sgcAuth_LDAP_Classes, sgcAuth_LDAP_Client;

var
  LDAP: TsgcLDAPClient;
  vUserDN: string;
  oGroups: TStringList;
begin
  LDAP := TsgcLDAPClient.Create(nil);
  LDAP.Host := 'dc01.corp.example.com';
  LDAP.Security := ldapsecLDAPS; // 隐式 TLS,端口 636
  LDAP.BindDN := 'CN=svc-login,OU=Service,DC=corp,DC=example,DC=com';
  LDAP.Password := 'service-password';
  LDAP.BaseDN := 'DC=corp,DC=example,DC=com';
  // 先用 UserSearchFilter 查找用户,再以该 DN 绑定
  LDAP.AuthenticationMode := ldapamSearchThenBind;
  LDAP.Connect;

  if LDAP.Authenticate(edtUser.Text, edtPassword.Text, vUserDN) then
  begin
    oGroups := TStringList.Create;
    try
      // True:通过 LDAP_MATCHING_RULE_IN_CHAIN 获取嵌套组
      LDAP.GetUserGroups(vUserDN, oGroups, True);
    finally
      oGroups.Free;
    end;
  end
  else
    ShowMessage(LDAP.LastErrorMessage);
end;
// uses: sgcAuth_LDAP_Classes, sgcAuth_LDAP_Client
TsgcLDAPClient *LDAP = new TsgcLDAPClient(this);
LDAP->Host = "dc01.corp.example.com";
LDAP->Security = ldapsecLDAPS;
LDAP->BindDN = "CN=svc-login,OU=Service,DC=corp,DC=example,DC=com";
LDAP->Password = "service-password";
LDAP->BaseDN = "DC=corp,DC=example,DC=com";
LDAP->AuthenticationMode = ldapamSearchThenBind;
LDAP->Connect();

String UserDN;
if (LDAP->Authenticate(edtUser->Text, edtPassword->Text, UserDN))
{
  TStringList *Groups = new TStringList();
  LDAP->GetUserGroups(UserDN, Groups, true);
  delete Groups;
}

内部功能

为桌面应用、Web 后端和服务提供目录登录能力,安全细节由组件为您处理。

LDAPS 与 StartTLS

Security 可选择 ldapsecLDAPS(端口 636 上的隐式 TLS)或 ldapsecStartTLS(端口 389 上的升级连接)。如果服务器拒绝 StartTLS,连接会被关闭,客户端绝不会回退为明文。TLSOptions 用于控制证书验证。

四种登录模式

AuthenticationMode 将输入的用户名转换为绑定名:ldapamUPN(user@UPNSuffix)、ldapamDownLevelDomain\user)、ldapamSearchThenBind(服务绑定加 UserSearchFilter)或 ldapamDN

嵌套组

GetUserGroups 返回直接的 memberOf 值,若传入 aNested,则会通过 Active Directory 的 LDAP_MATCHING_RULE_IN_CHAIN 规则返回经由其他组间接到达的每一个组。

分页搜索

Search 自动使用 Simple Paged Results(PageSize,默认 500),遵循 SizeLimitTimeLimit,并将条目与引用返回到 TsgcLDAPEntries 列表中。

安全绑定

Bind 在不联系服务器的情况下拒绝带空密码的 DN,从而堵上 RFC 4513 中的未认证绑定漏洞。WhoAmILastResultCodeLastErrorMessage 会准确告诉您当前绑定的身份以及调用失败的原因。

一个实例,多个线程

每个公共方法都经过串行化处理,因此单个 TsgcLDAPClient 实例即可为多线程 HTTP 或 WebSocket 服务器的登录请求提供服务。

规范与参考

本组件所实现标准的权威来源。

文档与演示

直达组件参考,获取可立即运行的演示项目,并下载试用版。

在线帮助:TsgcLDAPClient 本组件的完整属性、方法和事件参考。
演示项目:Demos\26.Authentication\05.LDAP_ActiveDirectory 通过 LDAPS 或 StartTLS 连接,在每种模式下完成身份验证,搜索并列出嵌套组。随 sgcWebSockets 包一起提供,请从下方下载试用版。
技术文档 (PDF) 仅涵盖本组件的功能、快速入门、Delphi 和 C++ Builder 代码示例及主要参考来源。
用户手册 (PDF) 涵盖库中每个组件的综合手册。
博客:使用通行密钥、SAML SSO、LDAP 和 TOTP 2FA 登录 Delphi 六个身份验证组件如何在一个 Delphi 应用中协同工作。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好使用 Active Directory 登录了吗?

下载免费试用版,让 Delphi 用户使用他们已有的目录进行身份验证。