Wie Sie OAuth zur Autorisierung verwenden
Kommentare

3. Autorisierung durch den Benutzer (Schritt 2)
Jetzt brauchen Sie eine Webseite, auf der die Benutzer Ihrer Webanwendung der Autorisierung zustimmen können, und zwar am oben schon angegebenen URL /autorisierung.php.

3. Autorisierung durch den Benutzer (Schritt 2)

Jetzt brauchen Sie eine Webseite, auf der die Benutzer Ihrer Webanwendung der Autorisierung zustimmen können, und zwar am oben schon angegebenen URL /autorisierung.php. Temporary Credentials dürfen nur einmal verwendet werden. Bevor Sie die Autorisierung überhaupt starten, müssen Sie daher prüfen, ob die übergebenen Temporary Credentials überhaupt verwendbar sind.

Am einfachsten geht das, wenn Sie in der Datenbank mit den Request Token in einer Spalte die Benutzer-ID speichern. Dann müssen Sie jetzt nur prüfen, ob im Eintrag des übergebenen Request Token eine Benutzer-ID eingetragen ist oder nicht. Ist eine eingetragen, wurde das Token bereits verwendet und die Autorisierung kann abgebrochen werden. Andernfalls bitten Sie den Benutzer nun um seine Autorisierung.

Machen Sie sich dabei bewusst, dass der Benutzer dabei ist, einer Drittanwendung außerhalb Ihrer Kontrolle Zugriff auf seine Daten zu gewähren beziehungsweise ihr erlaubt, in seinem Namen Aktionen durchzuführen. Bedenken Sie auch, welche Folgen das haben kann. Stellen Sie sicher, dass der Benutzer korrekt authentifiziert ist, führen Sie gegebenenfalls eine erneute Authentifizierung durch.

Wenn der Benutzer seine Autorisierung erteilt hat, müssen Sie das durch Eintragen seiner Benutzer-ID in der Tabelle mit den Temporary Credentials protokollieren. Außerdem müssen Sie nun einen Prüfcode (Verification Code) erzeugen, der ebenfalls zusammen mit den Temporary Credentials gespeichert wird.

Dafür reicht in der Regel etwas Einfaches wie substr(sha1(rand()), 0, 6) aus. Hat der Consumer einen Callback URL, schicken Sie den Benutzer dorthin zurück und übergeben dabei den Prüfcode als Parameter, bei einer Übertragung „out of band, geben Sie den Prüfcode auf der Webseite aus, damit der Benutzer ihn an den Consumer übermitteln kann. Lehnt der Benutzer die Autorisierung ab, können Sie die zu den verwendeten Temporary Credentials gehörende Zeile in der Datenbank löschen, da sie ja nicht erneut verwendet werden dürfen.

4. Der Endpunkt für die Anforderung der Token Credentials

Nachdem der Benutzer die Temporary Credentials autorisiert hat, muss der Consumer sie gegen Token Credentials austauschen. Dazu sendet er seinen Consumer Key und sein Consumer Secret, die Temporary Credentials (Request Token und Request Secret) und den Prüfcode an die Webanwendung.

Es wird wieder der gleiche Constructor-Code wie in Schritt 2 verwendet (Listing 2). Der Code zum Prüfen des Prüfcodes und zum Erzeugen der Token Credentials kann wie in Listing 5 aussehen. Die Tabelle zur Speicherung der Token Credentials könnte wie in Tabelle 3 aussehen.

Listing 5

// Da Token und Secret Binärdaten sind, müssen sie z.B. in Hex umgewandelt
// oder URL-kodiert werden:
$access_token = bin2hex($this->provider->generateToken(8));
$access_token_secret = bin2hex($this->provider->generateToken(16));

// Jetzt muss aus der Tabelle mit den Temporary Credentials die Zeile mit dem 
// übergebenen Request Token und Verification Code geholt werden.
// Aus dieser Zeile wird die Benutzer-ID benötigt, und durch die AND-Verknüpfung
// wird gleichzeitig geprüft, ob der Prüfcode korrekt ist
// Auch hier gilt wieder: Vorsicht, SQL-Injection-Gefahr!
$sql = 'SELECT * FROM outh_request_tokens WHERE request_token = '.$request_token.' AND verifier = '.$verifier;
...
// Danach kann diese Zeile gelöscht werden, da sie nicht mehr benötigt wird
...
// Jetzt können die neuen Token Credentials (Access Token und Access Secret)
// zusammen mit der zugehörigen Benutzer-ID gespeichert werden
$sql = 'INSERT INTO oauth_access_tokens SET access_token = '.$access_token 
   . ', access_token_secret = '.$access_token_secret
   . ', consumer_key = '.$consumer_key '
   . ', user_id = '.$user_id';
...

// Jetzt müssen dem Consumer noch die Token Credentials mitgeteilt werden:
echo "oauth_token=".$access_token.'&oauth_token_secret='.$access_token_secret;
Field Type Null Key Default Extra
id int NO PRI NULL auto_increment
consumer_key varchar(30) NO NULL
access_token varchar(8) NO NULL
access_token_secret varchar(32) NO NULL
verifi varchar(20) NO NULL
user_id int NO NULL
created Timestamp NO CURRENT_TIMESTAMP

Tabelle 3: Die Tabelle für die Token Credentials

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -