Webentwicklungs-Forum
12.06.13 02:35:06, 1999 Aufrufe
Twitter: OAuth using PHP without Curl von
erstes Resümee: OAuth ist umständlich.
nachdem die ganzen von Twitter genannten OAuth-Authentifizierungs-Scripte auf GitHub alle Abhängig von Curl sind, wir hier aber die PHP-Extension meines Wissens nicht installiert haben, brauchte ich eine andere Lösung.
Ich habe daher OAuth für Application-Auth-Only integriert.
Das Verfahren funktioniert folgendermaßen:
Der Nutzer erstellt einen ConsumerKey(zur Identifizierung) und ein ConsumerSecret (als Passwort), dies wird mit einem HTTP-POST-Request über eine HTTP-BASIC-Authentifizierung an den Server gesendet. Wichtig: alles über SSL, d.h. OpenSSL sollte als PHP-Erweiterung installiert sein. Als Rückmeldung des Requests bekommt man einen JSON-String zurück, der ein access_token enthält, dies nennt man auch Bearer-Token und wird bei jedem folgenden HTTP-GET-Request als HTTP-Header mitgesendet. Durch dieses Token erfolgt die Authentifizierung.
Der Code unten soll die Funktionalität etwas verdeutlichen.
Den ConsumerKey und das ConsumerSecret bekommt man unter https://dev.twitter.com/apps. Hier kann man sich eine neue App erstellen, die via OAuth Zugriff auf die REST-Services von Twitter bekommt.<?php
$consumerKey = ""; // hier consumerKey einfügen
$consumerSecret = ""; // hier consumerSecret einfügen
$authContext = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => "Authorization: Basic " . base64_encode(($consumerKey).':'.($consumerSecret)) . "\r\n".
"Content-type: application/x-www-form-urlencoded;charset=UTF-8\r\n".
"Content-Length: 29\r\n".
"\r\n".
"grant_type=client_credentials",
),
));
$authResponse = file_get_contents("https://api.twitter.com/oauth2/token", false, $authContext);
$decodedAuth = json_decode($authResponse, true);
$bearerToken = $decodedAuth["access_token"];
$context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'header' => "Authorization: Bearer " . $bearerToken . "\r\n".
"\r\n".
"grant_type=client_credentials",
),
));
$encodedData = file_get_contents('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=activevb&count='.$maxItems, false, $context);
Ich hoffe, euch hilft das, um selbst via PHP die eine oder andere Abfrage durchzuführen.
Das ganze Konzept habe ich noch an einen Caching-Mechanismus gebunden, damit Twitter nicht übermäßig mit Abfragen zugebombt wird.
Mich hat diese umständliche und unnötige Umstellung auf die O-Authentifizierung fast eine Stunde Debuggen gekostet.
Soviel mehr an Sicherheit bringt die umständliche Implementierung aus meiner Sicht leider einfach nicht.
Es lässt sich lediglich leichter für Twitter tracken, welcher Nutzer welche Informationen von wo abgräbt, aber ein echter Mehrwert entsteht für den Nutzer dadurch leider nicht.
Gruß
Reiner
1. -> Manchmal muss man Lügen, um die Wahrheit zu sagen... 2. -> Use http://www.google.de to help google to their way to world-domination. 3. -> Programmierer SIND faule Menschen und wer's Cloud wird selig.
Alle Beiträge
Dieser Thread wurde von Henrik Ilgen gesperrt
Dies hat folgende Gründe:
Dieser Thread wurde wiederholt Ziel von Spambots.Sollte noch Redebedarf zum Thema bestehen, erstellt bitte einen neuen Thread.
