Signatur
Beschreibung
ZookeeperAuthenticationException ist eine spezialisierte Ausnahmeklasse, die von der ZooKeeper-PHP-Erweiterung ausgelöst wird, wenn die Authentifizierung gegenüber einem ZooKeeper-Server fehlschlägt. Sie erweitert ZookeeperException und signalisiert damit spezifisch sicherheitsrelevante Verbindungsprobleme.
Typische Ursachen für diese Ausnahme sind falsche oder fehlende Zugangsdaten (z. B. ein ungültiges Passwort oder ein nicht vorhandener Benutzer), ein abgelaufenes Authentifizierungsschema oder eine fehlende Berechtigung für die gewählte Auth-Methode (z. B. digest, kerberos).
Da ZooKeeper-Knoten mit ACLs (Access Control Lists) gesichert werden können, ist es wichtig, diese Ausnahme von anderen Verbindungsfehlern (ZookeeperConnectionException) zu unterscheiden. So kann der Code gezielt auf Authentifizierungsprobleme reagieren, etwa durch Erneuerung von Zugangsdaten oder durch ein aussagekräftiges Fehler-Logging.
- Klasse befindet sich in der PECL-Erweiterung
php-zookeeper. - Erbt alle Methoden von
ExceptionwiegetMessage(),getCode()undgetTrace().
Beispiele
Authentifizierungsfehler beim ZooKeeper-Verbindungsaufbau abfangen
<?php
try {
$zk = new Zookeeper('zookeeper.example.com:2181');
// Falsche Zugangsdaten setzen
$zk->addAuth('digest', 'invaliduser:wrongpassword');
// Versuch, einen gesicherten Knoten zu lesen
$data = $zk->get('/secured/node');
echo 'Daten: ' . $data;
} catch (ZookeeperAuthenticationException $e) {
// Gezielt auf Authentifizierungsprobleme reagieren
error_log('ZooKeeper-Authentifizierungsfehler: ' . $e->getMessage());
echo 'Zugriff verweigert: Ungültige Zugangsdaten. (Code: ' . $e->getCode() . ')';
} catch (ZookeeperException $e) {
// Alle anderen ZooKeeper-Fehler
error_log('ZooKeeper-Fehler: ' . $e->getMessage());
echo 'Ein ZooKeeper-Fehler ist aufgetreten.';
}
Unterschiedliche ZooKeeper-Ausnahmen hierarchisch behandeln
<?php
function verbindeZooKeeper(string $host, string $schema, string $credentials): ?Zookeeper {
try {
$zk = new Zookeeper($host);
$zk->addAuth($schema, $credentials);
return $zk;
} catch (ZookeeperAuthenticationException $e) {
// Nur bei Auth-Fehler: Zugangsdaten erneuern oder Admin benachrichtigen
echo 'Authentifizierung fehlgeschlagen – bitte Zugangsdaten prüfen: '
. $e->getMessage() . PHP_EOL;
return null;
} catch (ZookeeperConnectionException $e) {
echo 'Verbindungsfehler: ' . $e->getMessage() . PHP_EOL;
return null;
} catch (ZookeeperException $e) {
echo 'Allgemeiner ZooKeeper-Fehler: ' . $e->getMessage() . PHP_EOL;
return null;
}
}
$zk = verbindeZooKeeper('zookeeper.example.com:2181', 'digest', 'admin:geheim');
if ($zk !== null) {
echo 'Erfolgreich verbunden.' . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Zugangsdaten für ZooKeeper sollten niemals im Klartext in Log-Dateien oder Fehlermeldungen erscheinen. Fangen Sie ZookeeperAuthenticationException stets ab und geben Sie in Produktionsumgebungen nur generische Fehlermeldungen an den Endnutzer aus.
Die Fehlercodes der ZooKeeper-Erweiterung entsprechen den nativen ZooKeeper-C-Client-Codes. Der typische Code für einen Authentifizierungsfehler ist -115 (ZAUTHFAILED). Prüfen Sie getCode(), falls eine differenzierte Behandlung einzelner Fehlerzustände nötig ist.
Die Klasse erfordert die PECL-Erweiterung php-zookeeper (mindestens Version 0.2.0) sowie eine laufende ZooKeeper-Instanz.