2013-07-13 22 views
8

Sto realizzando la mia google oauth implementazione nel progetto PHP. Tutto funziona correttamente, a meno che non provi a verificare JWT dopo la richiesta di accesso allo token (https://accounts.google.com/o/oauth2/token).Google OAuth Verifica della firma JWT

Per la decodifica JWT utilizzo la classe firebase/php-jwt.

Decodifica perfettamente, ma se accendo l'opzione $verify (decode() metodo 3-rd arg) ottengo: Signature verification failed eccezione generata.

La mia ipotesi è che, se passo una chiave errata al metodo decode(). Viene utilizzato in seguito per la funzione hash_hmac() al termine della generazione della firma.

Quindi la mia domanda è: quale chiave devo passare esattamente per la verifica della firma nel contesto JWT di Google OAuth?

risposta

9

Da https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken l'approccio raccomandato:

"si consiglia di recuperare le chiavi pubbliche di Google da https://www.googleapis.com/oauth2/v1/certs ed eseguire la convalida a livello locale

Dal momento che Google cambia le sue chiavi pubbliche solo raramente (nell'ordine di una volta per. giorno), è possibile memorizzarli nella cache e, nella stragrande maggioranza dei casi, eseguire la convalida locale in modo molto più efficiente rispetto all'utilizzo dell'endpoint TokenInfo. Ciò richiede il recupero e l'analisi dei certificati e l'esecuzione delle chiamate crittografiche appropriate per verificare la firma. sono librerie ben debug disponibili in un'ampia varietà di lingue per realizzare t il suo."

+0

Si noti che sono stati restituiti due certificati Google e che era necessario tentare una verifica con ciascuno in un tentativo/cattura. –