Signatur
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
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;
}
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.