Delphi LDAP / Active Directory クライアント
ユーザーが Windows ドメインのパスワードでサインインできるようにします。暗号化された接続で Active Directory、OpenLDAP、あるいは任意の LDAP v3 ディレクトリに対して資格情報を検証し、権限を決めるグループを読み取ります。
ユーザーが Windows ドメインのパスワードでサインインできるようにします。暗号化された接続で Active Directory、OpenLDAP、あるいは任意の LDAP v3 ディレクトリに対して資格情報を検証し、権限を決めるグループを読み取ります。
ユーザーの認証、ディレクトリの検索、入れ子になった Active Directory のグループを含むグループメンバーシップの解決のために設計された LDAP v3 クライアントです。
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 の4種類です。
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) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。 | 開く | |
| ブログ — Delphi でパスキー、SAML SSO、LDAP、TOTP 2FA によるログインを実現する 6つの認証コンポーネントが1つの Delphi アプリケーションでどう連携するかを解説します。 | 開く |