Start · Sprachen · PHP · Referenz · OAuthException

OAuthException

Klasse

Ausnahme, die bei Fehlern in der OAuth-Erweiterung ausgelöst wird und zusätzliche OAuth-spezifische Fehlerinformationen bereitstellt.

seit PHP 1.0.0 Kategorie: error

Signatur

class OAuthException extends Exception

Beschreibung

OAuthException ist die zentrale Ausnahme-Klasse der PHP-OAuth-Erweiterung (pecl/oauth). Sie wird ausgelöst, wenn OAuth-spezifische Fehler auftreten, etwa bei fehlgeschlagenen Autorisierungsanfragen, ungültigen Tokens oder Netzwerkproblemen während der OAuth-Kommunikation mit einem Dienstanbieter.

Die Klasse erweitert die eingebaute Exception-Klasse und ergänzt sie um zwei zusätzliche öffentliche Eigenschaften: $lastResponse enthält die letzte HTTP-Antwort des Servers (als Rohtext), und $debugInfo enthält Debug-Informationen zur fehlgeschlagenen Anfrage. Diese Informationen sind besonders hilfreich bei der Fehlersuche in OAuth-Flows.

In der Praxis sollte jede Verwendung von OAuth-Methoden wie OAuth::getRequestToken(), OAuth::getAccessToken() oder OAuth::fetch() in einem try/catch-Block eingeschlossen werden, der OAuthException gezielt abfängt, um OAuth-Fehler sauber behandeln zu können.

Wichtig: Die OAuth-Erweiterung muss über PECL installiert sein (pecl install oauth). Ab OAuth 2.0 wird häufig auf eigenständige Bibliotheken wie league/oauth2-client gesetzt, da die PECL-Erweiterung primär OAuth 1.0(a) abdeckt.

Beispiele

OAuthException beim Request-Token-Abruf abfangen

<?php
$consumer_key    = 'mein_consumer_key';
$consumer_secret = 'mein_consumer_secret';

$oauth = new OAuth($consumer_key, $consumer_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();

try {
    $request_token_info = $oauth->getRequestToken('https://api.beispiel.de/oauth/request_token');
    echo 'Request Token: ' . $request_token_info['oauth_token'] . PHP_EOL;
} catch (OAuthException $e) {
    echo 'OAuth-Fehler: ' . $e->getMessage() . PHP_EOL;
    echo 'HTTP-Code: '   . $e->getCode()    . PHP_EOL;
    echo 'Letzte Antwort: ' . $e->lastResponse . PHP_EOL;
    echo 'Debug-Info: '  . print_r($e->debugInfo, true) . PHP_EOL;
}
OAuth-Fehler: Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect) HTTP-Code: 401 Letzte Antwort: oauth_problem=consumer_key_unknown

Vollständiger OAuth-1.0a-Ablauf mit Fehlerbehandlung

<?php
$oauth = new OAuth(
    'consumer_key',
    'consumer_secret',
    OAUTH_SIG_METHOD_HMACSHA1,
    OAUTH_AUTH_TYPE_AUTHORIZATION
);

try {
    // Schritt 1: Request Token holen
    $rt = $oauth->getRequestToken('https://api.beispiel.de/oauth/request_token');
    echo 'Request Token erhalten: ' . $rt['oauth_token'] . PHP_EOL;

    // Schritt 2: Access Token holen (nach Nutzerauthorisierung)
    $oauth->setToken($rt['oauth_token'], $rt['oauth_token_secret']);
    $at = $oauth->getAccessToken('https://api.beispiel.de/oauth/access_token');
    echo 'Access Token erhalten: ' . $at['oauth_token'] . PHP_EOL;

    // Schritt 3: Geschützte Ressource abrufen
    $oauth->setToken($at['oauth_token'], $at['oauth_token_secret']);
    $oauth->fetch('https://api.beispiel.de/v1/user/profile');
    $response = json_decode($oauth->getLastResponse(), true);
    echo 'Nutzername: ' . $response['username'] . PHP_EOL;

} catch (OAuthException $e) {
    // Gezieltes Abfangen von OAuth-Fehlern
    error_log('OAuthException: ' . $e->getMessage());
    error_log('Letzte Serverantwort: ' . $e->lastResponse);
    // Fehler für Nutzer aufbereiten
    echo 'Die Verbindung zum Dienst ist fehlgeschlagen. Bitte erneut versuchen.';
} catch (Exception $e) {
    // Allgemeine Fehler separat behandeln
    error_log('Unerwarteter Fehler: ' . $e->getMessage());
    echo 'Ein unerwarteter Fehler ist aufgetreten.';
}

// Wichtig · Fallstricke

Zusätzliche Eigenschaften: Im Gegensatz zur Standard-Exception stellt OAuthException zwei öffentliche Eigenschaften bereit:

  • $lastResponse (string): Der Rohtext der letzten HTTP-Antwort vom Server. Kann null sein, wenn gar keine Antwort empfangen wurde.
  • $debugInfo (array|null): Enthält ausführliche Debug-Informationen, ist aber nur befüllt, wenn zuvor OAuth::enableDebug() aufgerufen wurde.

Sicherheitshinweis: Die in $lastResponse und $debugInfo enthaltenen Daten können sensible Informationen wie Token-Werte oder Server-Details enthalten. Diese Daten sollten niemals ungefiltert an den Nutzer ausgegeben werden, sondern ausschließlich ins Server-Log geschrieben werden.

Erweiterung: Die PECL-OAuth-Erweiterung muss separat installiert sein. Prüfen Sie mit extension_loaded('oauth'), ob sie verfügbar ist. Die Erweiterung unterstützt primär OAuth 1.0 und 1.0a; für OAuth 2.0 sind andere Lösungen empfohlen.