【Firebase Authentication】JWT認証で未来のタイムスタンプが使われていると怒られた…。

2020年3月24日

今回は個人開発しているWEBアプリを久しぶりに手をつけたときに出たエラーの話です。そのアプリではSSOログインをFirebase AuthenticationのJWT認証で行うようにしましたが、クライアント(Vue.js)でFirebaseからJWTを取得後、サーバー(Golang)にてJWTの検証を行う際にエラーが発生しました。

※JWT認証に関しては詳細を記載するとそれだけでこの記事が長くなりすぎるので、詳細は記載しません。

環境情報

結局言語に依存したエラーではなかったですが、使用していたgolangのsdkとnpmのパッケージ名だけ記載しておきます。

firebase-admin-go: v3.9.0
https://github.com/firebase/firebase-admin-go

firebase: v7.10.0
https://www.npmjs.com/package/firebase

エラー発生時はローカルのWindows PCにてアプリを動かし、認証とJWTの発行自体はFirebaseにて行っていました。

未来のタイムスタンプが使われている?

こんなエラーがでていました。

ID token issued at future timestamp: 1583933914

意味は未来のタイムスタンプ使っているのダメとのことです。なぜ起きているか検討もつかなかったのでエラーメッセージでぐぐってみることに。

こちらのStackOverFlowに.NET Frameworkでは未来日のタイムスタンプでエラーとなってしまう事象に関してヒットしました。こちらの対策として5分間の猶予を持たせるみたいな修正がSDK側にされたとの記載がありました。しかし、記事内にあったプルリクの日付を見ると結構前だったんじょで、他の言語のSDKといえど同様の修正が行われていそうでした。ですので、今回の事象には当てはまらないような気がしました。

原因はすごくしょぼいことでした

結論、ローカルPCの時計がずれていた!!

しょぼすぎて恥ずかしいです…。PCの時計が10分ほど本来の時刻から遅れていたため、JWTに含まれるタイムスタンプが未来日となってしまいました。

皆さんもPCの時計ずれにはお気をつけください。