2013-07-13 24 views
8

私はPHPプロジェクトで自分のgoogle oauth実装を作成しています。 アクセストークンリクエスト(https://accounts.google.com/o/oauth2/token)の後にJWTが受信されたことを確認しようとしない限り、すべて正常に動作します。Google OAuth JWT署名検証

JWTデコードでは、私はfirebase/php-jwtクラスを使用しています。

完全にデコードしますが、$verifyオプション(decode()メソッド3-arg arg)をオンにすると、Signature verification failed例外がスローされます。

decode()メソッドに間違ったキーを渡すと、私の推測通りです。後でhash_hmac()のシグネチャが生成されたときに使用されます。

私の質問は、Google OAuth JWTの文脈に署名検証のためにどのような鍵を渡す必要がありますか?

答えて

9

推奨されるアプローチhttps://developers.google.com/accounts/docs/OAuth2Login#validatinganidtokenから:「私たちは、あなたがhttps://www.googleapis.com/oauth2/v1/certsからGoogleの公開鍵を取得し、ローカルで検証を行うことをお勧めします

Googleがあたり一回のオーダー(まれにしかその公開鍵を変更するので、トークン情報のエンドポイントを使用するよりも効率的にローカル検証を実行することができます。これには、証明書の取得と解析、および適切な暗号呼び出しによるシグネチャのチェックが必要です。 tを達成するために多種多様な言語で利用できるよくデバッグされたライブラリです彼の。

+0

私は2つのGoogle証明書が返され、try/catchでベリファイを試みる必要があることに注意してください。 –