2013-07-13 15 views
8

Ich mache meine eigene Google OAUTH Implementierung in PHP-Projekt. Alles funktioniert gut, es sei denn, ich versuche zu überprüfen JWT erhalten nach der Zugriff Token Anfrage (https://accounts.google.com/o/oauth2/token).Google OAuth JWT Unterschrift Verifikation

Für JWT-Decodierung verwende ich firebase/php-jwt Klasse.

Es dekodiert perfekt, aber wenn ich $verify Option (decode() Methode 3-RD Arg) einschalten bekomme ich: Signature verification failed Ausnahme geworfen.

Meine Vermutung ist, dass, wenn ich einen falschen Schlüssel an die decode() Methode übergeben. Es wird später für die Funktion hash_hmac() verwendet, wenn die Signatur erzeugt wird.

Meine Frage ist also: Welchen Schlüssel sollte ich genau für die Signaturprüfung an den Google OAuth JWT Kontext übergeben?

Antwort

9

Von https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken der empfohlene Ansatz:

„Wir empfehlen, dass Sie von https://www.googleapis.com/oauth2/v1/certs Googles öffentlichen Schlüssel abrufen und die Validierung vor Ort durchführen

Da Google seine öffentlichen Schlüssel ändert sich nur selten (in der Größenordnung von einmal pro. (Tag), können Sie sie zwischenspeichern und in den allermeisten Fällen die lokale Validierung viel effizienter durchführen als mit dem TokenInfo-Endpunkt. Dazu müssen Zertifikate abgerufen und analysiert werden, und die entsprechenden Crypto-Aufrufe müssen die Signatur überprüfen sind gut debuggte Bibliotheken, die in einer Vielzahl von Sprachen verfügbar sind, um dies zu erreichen seine."

+0

Beachten Sie, dass ich zwei Google-Zertifikate zurückgeben musste und eine Überprüfung mit jedem Versuch/Catch versuchen musste. –