GoogleでOAuth 2.0 クライアント IDを払い出してJavascriptとPHPで実装しようとしたところ、認証できない状態に陥ったので備忘録として記事を残すことにします。
GoogleのOAuth 2.0はネット上に記事は多くないものの、実装にチャレンジする人であればほぼそのまま使えるであろう明確なものが多いので悩むこともないかなと思っていました。
実際、 Javascript 側に関しては特に問題ありませんでした。
サーバサイドに関してもgoogle-api-php-clientをロードできる状態であれば迷うことはないかなと思います。
しかし今回、サーバサイドでid_tokenを確認しようとしたところ、認証できない事態に遭遇しました。
結論から言えばサーバ側の時刻を比較的厳密に同期しておく必要があるということでした。
サーバ側でトークンを確認(verifyIdToken)すると、
[iat]:発行時刻
[exp]:有効期限
が戻されるんですが、 有効期限をライブラリ側でサーバの時刻と比較することで期限切れを判定しています。
発行時刻と有効期限の間は3,600秒(1時間)となっているのでこれ以上だと有効期限切れと判断されます。
当たり前と言えば当たり前なんですが、特にエラーが起きるわけでも原因が返されるわけでもないので一度ハマると面倒かもしれません。
今後は開発環境でアレ素直にNTPサーバと同期しようと思いました。