Start · Sprachen · PHP · Referenz · oauth_get_sbs

oauth_get_sbs

Funktion

Erzeugt den OAuth Signature Base String (SBS) aus HTTP-Methode, URI und Anfrage-Parametern.

seit PHP 1.0.0 Kategorie: http

Signatur

oauth_get_sbs(string $http_method, string $uri, array $request_parameters): string|false

Beschreibung

oauth_get_sbs() ist eine prozedurale Hilfsfunktion der PECL-OAuth-Erweiterung. Sie berechnet den sogenannten Signature Base String, der bei der OAuth 1.0-Authentifizierung die Grundlage für die Erzeugung der kryptografischen Signatur bildet.

Der Signature Base String setzt sich aus drei Teilen zusammen: der HTTP-Methode (z. B. GET oder POST), der normalisierten Basis-URI und einer prozentkodiert zusammengesetzten Liste aller sortierten Anfrage-Parameter. Die Funktion übernimmt das korrekte Normalisieren, Sortieren und Kodieren dieser Bestandteile nach OAuth-Spezifikation (RFC 5849).

Die Funktion ist dann sinnvoll, wenn man den SBS zur Fehlerdiagnose, für eigene Signatur-Implementierungen oder für Tests außerhalb des vollständigen OAuth-Flows benötigt. Im normalen Betrieb mit der OAuth-Klasse wird der SBS intern erzeugt.

Zu beachten ist, dass oauth_get_sbs() nur dann verfügbar ist, wenn die PECL-Erweiterung oauth installiert und geladen ist.

Parameter

Name Typ Default Beschreibung
$http_method Pflicht string Die HTTP-Methode der Anfrage, z. B. GET, POST oder PUT. Groß-/Kleinschreibung ist relevant; gemäß OAuth-Spezifikation wird die Methode großgeschrieben.
$uri Pflicht string Die vollständige Basis-URI der Anfrage, z. B. https://api.example.com/resource. Query-Parameter sollten nicht in der URI enthalten sein, sondern über request_parameters übergeben werden.
$request_parameters Pflicht array Ein assoziatives Array aller OAuth- und Anfrage-Parameter (Schlüssel => Wert), die in den Signature Base String einfließen sollen, z. B. oauth_consumer_key, oauth_nonce, oauth_timestamp usw.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den fertig zusammengesetzten, prozentkodieren Signature Base String als string zurück. Bei einem Fehler (z. B. ungültige Parameter) wird false zurückgegeben.

Beispiele

Einfachen Signature Base String erzeugen

<?php
// Voraussetzung: PECL-OAuth-Erweiterung ist installiert

$method = 'GET';
$uri    = 'https://api.example.com/v1/resource';
$params = [
    'oauth_consumer_key'     => 'abc123',
    'oauth_nonce'            => 'random_nonce_xyz',
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_timestamp'        => '1700000000',
    'oauth_version'          => '1.0',
    'custom_param'           => 'my_value',
];

$sbs = oauth_get_sbs($method, $uri, $params);

if ($sbs !== false) {
    echo $sbs . PHP_EOL;
} else {
    echo 'Fehler beim Erzeugen des Signature Base Strings.' . PHP_EOL;
}
GET&https%3A%2F%2Fapi.example.com%2Fv1%2Fresource&custom_param%3Dmy_value%26oauth_consumer_key%3Dabc123%26oauth_nonce%3Drandom_nonce_xyz%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1700000000%26oauth_version%3D1.0

SBS zur Diagnose einer fehlschlagenden OAuth-Signatur verwenden

<?php
// Debugging: manuellen SBS mit dem vom Server erwarteten SBS vergleichen

$method = 'POST';
$uri    = 'https://api.example.com/oauth/request_token';
$params = [
    'oauth_callback'         => 'https://myapp.example.com/callback',
    'oauth_consumer_key'     => 'my_consumer_key',
    'oauth_nonce'            => 'abc987',
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_timestamp'        => '1700001234',
    'oauth_version'          => '1.0',
];

$sbs = oauth_get_sbs($method, $uri, $params);

if ($sbs !== false) {
    echo 'Signature Base String:' . PHP_EOL;
    echo $sbs . PHP_EOL;

    // Signatur manuell mit HMAC-SHA1 berechnen (Consumer Secret & Token Secret)
    $consumer_secret = 'my_consumer_secret';
    $token_secret    = ''; // leer beim Request-Token-Schritt
    $signing_key     = rawurlencode($consumer_secret) . '&' . rawurlencode($token_secret);

    $signature = base64_encode(hash_hmac('sha1', $sbs, $signing_key, true));
    echo 'Berechnete Signatur: ' . $signature . PHP_EOL;
} else {
    echo 'SBS konnte nicht erzeugt werden.' . PHP_EOL;
}

// Wichtig · Fallstricke

Sicherheitshinweis: Der Signature Base String ist nicht geheim, enthält aber alle sicherheitsrelevanten Parameter. Der tatsächlich geheime Teil ist der Signing Key (Consumer Secret + Token Secret), der niemals übertragen oder geloggt werden sollte.

PECL-Abhängigkeit: Diese Funktion ist keine PHP-Kernfunktion, sondern Teil der PECL-Erweiterung oauth. Sie muss zunächst installiert werden (pecl install oauth) und in der php.ini aktiviert sein (extension=oauth).

OAuth 2.0: Diese Funktion ist ausschließlich für OAuth 1.0 / 1.0a relevant. OAuth 2.0 verwendet kein Signature-Base-String-Konzept.