Delphi LDAP 与 Active Directory 客户端
让用户使用其 Windows 域密码登录。通过加密连接对照 Active Directory、OpenLDAP 或任意 LDAP v3 目录验证凭据,并读取决定用户权限的组。
让用户使用其 Windows 域密码登录。通过加密连接对照 Active Directory、OpenLDAP 或任意 LDAP v3 目录验证凭据,并读取决定用户权限的组。
一个 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 后端和服务提供目录登录能力,安全细节由组件为您处理。
Security 可选择 ldapsecLDAPS(端口 636 上的隐式 TLS)或 ldapsecStartTLS(端口 389 上的升级连接)。如果服务器拒绝 StartTLS,连接会被关闭,客户端绝不会回退为明文。TLSOptions 用于控制证书验证。
AuthenticationMode 将输入的用户名转换为绑定名:ldapamUPN(user@UPNSuffix)、ldapamDownLevel(Domain\user)、ldapamSearchThenBind(服务绑定加 UserSearchFilter)或 ldapamDN。
GetUserGroups 返回直接的 memberOf 值,若传入 aNested,则会通过 Active Directory 的 LDAP_MATCHING_RULE_IN_CHAIN 规则返回经由其他组间接到达的每一个组。
Search 自动使用 Simple Paged Results(PageSize,默认 500),遵循 SizeLimit 和 TimeLimit,并将条目与引用返回到 TsgcLDAPEntries 列表中。
Bind 在不联系服务器的情况下拒绝带空密码的 DN,从而堵上 RFC 4513 中的未认证绑定漏洞。WhoAmI、LastResultCode 和 LastErrorMessage 会准确告诉您当前绑定的身份以及调用失败的原因。
每个公共方法都经过串行化处理,因此单个 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 应用中协同工作。 | 打开 |