10

PHP プロジェクトで独自の Google oauth 実装を作成しています。アクセス トークンリクエスト ( https://accounts.google.com/o/oauth2/tokenJWT )の後に受信を確認しようとしない限り、すべて正常に動作します。

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

それは完全にデコードされますが、$verifyオプション (decode()メソッド 3 番目の引数) をオンにすると、Signature verification failed例外がスローされます。

私の推測では、decode()メソッドに間違ったキーを渡した場合です。後でhash_hmac()署名が生成されたときに機能に使用されます。

私の質問は、Google OAuth JWT コンテキストに署名検証のために正確にどのキーを渡す必要があるかということです。

4

1 に答える 1

11

https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtokenから推奨されるアプローチ:

「 https://www.googleapis.com/oauth2/v1/certsから Google の公開鍵を取得し、ローカルで検証を実行することをお勧めします。

Google は公開鍵を頻繁に (1 日に 1 回程度) しか変更しないため、公開鍵をキャッシュして、ほとんどの場合、TokenInfo エンドポイントを使用するよりもはるかに効率的にローカル検証を実行できます。これには、証明書を取得して解析し、適切な暗号呼び出しを行って署名を確認する必要があります。幸いなことに、これを実現するために、さまざまな言語で利用できる十分にデバッグされたライブラリがあります。」

于 2013-07-15T01:20:40.287 に答える