2015-07-10 7 views
6

Ich versuche, einen Nutzer über seinen Google-Account sicher anzumelden. Ich bin in der Phase, dass ich die Benutzer-ID und oAuthToken mit this Cordova-Plugin abrufen.Wie überprüfe ich die Integrität eines Google-Tokens?

Jetzt bin ich an dem Punkt, wo ich diese Anmeldeinformationen an meinen Server senden muss und dann auf der Serverseite die Integrität des Tokens validieren. Im Wesentlichen versuche ich this Teil des Prozesses durchzuführen.

Ich bin verwirrt, welches Token ich versuchen sollte, mit dem Google Client API zu überprüfen. Sollte ich die Benutzer-ID oder das oAuthToken verwenden?

Die Dokumentation erwähnt die Validierung der Benutzer-ID, aber ich finde das seltsam. Würde das nicht bedeuten, dass, wenn jemand meine Benutzer-ID bekommt, sie in meinen Server einbrechen können? Die Benutzer-ID ändert sich nie (korrigiere mich, wenn ich hier falsch liege), so dass es unsicher erscheint, dies zu bestätigen. Wäre es nicht sinnvoller, das abgelaufene oAuthToken zu validieren? Oder läuft die Benutzer-ID auch ab?

Jeder Rat wäre willkommen.

Danke,

Fido

Edit:

Für interessierte niemanden. Meine Verwirrung entstand, weil ich drei Tokens, die die Google API zurückgeben kann, nicht vollständig verstanden habe: userId, oAuthToken und idToken. Kurz: Die Benutzer-ID wird mit den meisten API-Aufrufen zurückgegeben, die den Benutzer identifizieren. Dies scheint konstant zu sein. Das oAuthToken in meinem Fall wurde zurückgegeben, als ich auf die Google API als Android-Client zugegriffen habe. Die TokenId wird zurückgegeben, wenn auf die API als Webclient zugegriffen wird. Diejenigen, die eine serverseitige Validierung unter Verwendung eines mobil abgerufenen Tokens durchführen möchten, sollten auf die API als Webclient zugreifen. Das zurückgegebene Token kann dann serverseitig unter Verwendung eines Codes validiert werden, der der unten akzeptierten Antwort ähnlich ist.

Antwort

6

Sie müssen das IdToken validieren, nie senden Sie die Benutzer-Id in einer offenen Zeile. Das IdToken läuft schnell ab und ist für Brute-Force-Identitätswechselangriffe praktisch unüberwindbar.

dieses PHP-Schnipsel eine HTTP-Anforderung empfängt, die mit idtoken= beginnt, überprüft Ihr Token Serverside und gibt entweder die komplette Array oder Benutzer E-Mail:

<?php 
$inputRaw = file_get_contents('php://input'); 
$idToken= substr($inputRaw,8); 
$fp = fopen('twoStepOutput.txt', 'a'); 

$url = 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token='.$idToken; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 
$json = json_decode($response, true); 
curl_close($ch); 

$userEmail = $json["email"]; 
$clientId = $json["azp"]; 
//fwrite($fp, date("YmdHis")."\r\n$idToken\r\n"); 
fwrite($fp, date("YmdHis")."\r\n"); 
fwrite($fp, "email Confirmed by GOOGLE:[$userEmail]\r\n"); 
//print_r($json); // returns array console readable 
print_r($clientId); // returns google client id for verification (without transfering user data) 
fclose($fp); 
?> 

nur, wenn Sie in Zweifel sind, das ist, was ein IdToken wie folgt aussieht:

eypZCI6OiJSUzI1JhbGciNiIsImtIjk4MzQxMzgyMWJmMzhiNTJlM4OTI2YTllMTc0YTc5MWMwNGMifQ.eyJpc3MiOi3VizExYJhY2NvdW50cy5nb29nbGUuY29tIiwicmEIjoiMTAzNDUyNjAwODM5NzY3MjU2MDE0IiwiYXpwIjoiMTA3OTMxMTEyNTc1OS1lYWJhbWV0b2ZldjIwY28zbGQ5b2o1YWQwMzFuZG9nMC5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImVtYWlsIjoidG9ueWdpbGJyQGdtYWlsLmNvbSIsImF0X2hhc2giOiJaSkhxbUZHcnR5Y29kdEhhOGJvMEYWY1NTk2NzUsImV4cCVBIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjEwNzkzMTExMjU3NTkt1ldG9mZXYyMGNvM2xkOW9qNWFkMDMxbmRvZzAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJpYXQiOjE0MzZWFiI6MTQzNjU2MzI3NSwibmFtZSI6IlRvbnkgR2lsIiwicGljdHVyZSI6Imh0dHBzOi8vbGg0Lmdvb2dsZXVzZXJjb250ZW50LmNvbS8tQVREckRSbF9UdFEvQUFBQUFBQUFBQUkvQUFBQUFBQUFBRncvOVdDQnZkYlpUTEEvczk2LWMvcGhvdG8uanBnIiwiZ2l2ZW5fbmFtZSI6IlRvbnkiLCJmYW1pbHlfbmFtZSI6IkdpbCIsImxvY2FsZSI6ImVuIn0.L4peW11TD0bDOlvYKNY60ieZ1sbZfW9gEImcuxVA5f9U_4N49Io1CFXoGKmEPR_ij4q38tF2drPMOKijQePwlrxDui37ubzAdVkuksCJUobzjD1_eccF_8GldP5Y1_XsU8xrZeEnfabfiYpr-VwoLzIeNNUdy9SUbUWjMHNcvf4dGFMzE_SONHr57igjHK3rGkbvLo-UduFngm3e-EL0YR2zOKOVj1Qs8g8_qpWgkn8XABTme1thmuU8OfC-HaF9_B2Zk2UCsnOu4ApiYZk3DPIKgeX6AF11kYnzgvciYheWeddly0foT4G00C7w_wgtd-LSRw0XZltec_MPMa2QSA

+1

Sie für die Klärung @ tony-gil danken. Ich habe die falsche Art der Validierung verwendet. Ich habe einen Andoird Client benutzt, aber da meine App cordova ist, sollte es ein Web Client sein. Aus diesem Grund war ich zwischen userId, oAuthToken und tokenId verwirrt. Alle 3 unterscheiden sich von denen, die später erscheinen, indem Sie einen Web-Client auf der Google Developer Console erstellen. –

+0

tks für die upvote und die Auswahl der Antwort @Fido! :) –

+2

versucht, dies mit Google php Client-API für mehrere Stunden zu tun, ohne Glück. Dies hat zum ersten Mal geklappt! +1 –

Verwandte Themen