Start · Sprachen · PHP · Referenz · ldap_exop_whoami

ldap_exop_whoami

Funktion

Führt eine erweiterte LDAP-WHOAMI-Operation (RFC 4532) durch und gibt die Autorisierungs-ID des aktuell authentifizierten Benutzers zurück.

seit PHP 7.2.0 Kategorie: misc

Signatur

ldap_exop_whoami(LDAP\Connection $ldap): string|false

Beschreibung

ldap_exop_whoami() ist eine Hilfsfunktion für die erweiterte LDAP-Operation WHOAMI gemäß RFC 4532. Sie sendet eine WHOAMI-Anfrage an den verbundenen LDAP-Server und erhält die Autorisierungs-ID (Authorization Identity) des aktuell authentifizierten Benutzers der Verbindung zurück.

Die zurückgegebene Autorisierungs-ID ist typischerweise in der Form dn:cn=Benutzer,dc=example,dc=com oder u:username codiert. Bei einer anonymen Verbindung gibt der Server in der Regel einen leeren String zurück.

Diese Funktion ist besonders nützlich, um nach einem ldap_bind()-Aufruf zu verifizieren, mit welchem Benutzerkontext die aktuelle Verbindung tatsächlich arbeitet. Das hilft bei der Fehlersuche und zur Absicherung, dass die Authentifizierung mit den erwarteten Credentials erfolgt ist.

Intern ruft diese Funktion ldap_exop() mit dem OID 1.3.6.1.4.1.4203.1.11.3 auf. Für fortgeschrittene Anwendungsfälle (z. B. mit Request-Daten oder direktem Zugriff auf die Antwort) kann ldap_exop() direkt verwendet werden.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindungsressource, wie sie von ldap_connect() zurückgegeben wird. Die Verbindung sollte bereits über ldap_bind() authentifiziert sein.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die Autorisierungs-ID des aktuell gebundenen Benutzers als String zurück (z. B. dn:cn=admin,dc=example,dc=com) oder einen leeren String bei anonymer Verbindung. Bei einem Fehler wird false zurückgegeben.

Beispiele

Aktuelle Autorisierungs-ID nach ldap_bind() abfragen

<?php
$ldap = ldap_connect('ldap://ldap.example.com');
if (!$ldap) {
    die('Verbindung fehlgeschlagen.');
}

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);

$bindDn = 'cn=admin,dc=example,dc=com';
$bindPw = 'geheimesPasswort';

if (!ldap_bind($ldap, $bindDn, $bindPw)) {
    die('Bind fehlgeschlagen: ' . ldap_error($ldap));
}

$whoami = ldap_exop_whoami($ldap);
if ($whoami === false) {
    echo 'WHOAMI-Operation fehlgeschlagen: ' . ldap_error($ldap);
} else {
    echo 'Angemeldet als: ' . $whoami . PHP_EOL;
    // z. B.: Angemeldet als: dn:cn=admin,dc=example,dc=com
}

ldap_unbind($ldap);
?>
Angemeldet als: dn:cn=admin,dc=example,dc=com

Anonyme Verbindung prüfen

<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);

// Anonymer Bind (kein DN, kein Passwort)
ldap_bind($ldap);

$whoami = ldap_exop_whoami($ldap);
if ($whoami === '') {
    echo 'Verbindung ist anonym (nicht authentifiziert).' . PHP_EOL;
} elseif ($whoami === false) {
    echo 'Fehler bei der WHOAMI-Abfrage.' . PHP_EOL;
} else {
    echo 'Angemeldet als: ' . $whoami . PHP_EOL;
}

ldap_unbind($ldap);
?>
Verbindung ist anonym (nicht authentifiziert).

// Wichtig · Fallstricke

Serverunterstützung: Nicht alle LDAP-Server unterstützen die erweiterte WHOAMI-Operation. OpenLDAP ab Version 2.1 und Active Directory unterstützen sie in der Regel, ältere oder nicht standardkonforme Server möglicherweise nicht. Prüfe in dem Fall die Fehlermeldung mit ldap_error().

LDAP v3 erforderlich: Die erweiterte Operation setzt LDAPv3 voraus. Stelle sicher, dass ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3) vor dem Bind gesetzt wird, andernfalls schlägt die Funktion fehl.

PHP-Klassen-Objekt: Ab PHP 8.1 erwartet die Funktion ein LDAP\Connection-Objekt statt einer veralteten resource. Die bisherige resource-Schreibweise ist ab PHP 8.1 deprecated.