17
7

More than 3 years have passed since last update.

OmniAuth【google-oauth2】のログイン時のエラーJWT::InvalidIatErrorについて

Posted at

状況

Railsでomniauth-google-oauth2を利用してログイン認証を行っていた際に、以下エラー「JWT::InvalidIatError」が発生した。
その解決方法の備忘録になります。

スクリーンショット 2019-12-05 16.43.39.png

解決策

結論

config/initializers/devise.rbに以下を追記する。
(Deviseを実装していた)

変更前
  config.omniauth :google_oauth2, ENV['GOOGLE_APP_ID'], ENV['GOOGLE_APP_SECRET'], name: :google
変更後
  config.omniauth :google_oauth2, ENV['GOOGLE_APP_ID'], ENV['GOOGLE_APP_SECRET'], name: :google, skip_jwt: true

原因

セッショントークン生成時にOSの時間のずれがあり、JWT(ジョット)のデコーディング時にエラーが発生している。
omniauth-google-oauth2の公式ドキュメントにも以下の記述がありました。

skip_jwt: Skip JWT processing. This is for users who are >seeing JWT decoding errors with the iat field. Always try >adjusting the leeway before disabling JWT processing.

原因確認中に遠回りしたこと

まず、エラーの原因はOSの時間のずれであり、時間設定を変更すれば解決するという情報を発見したため、時間設定を変更しようと考えたが、それでは解決できませんでした。

Railsではシステムや環境変数で設定されている日時を
Time.nowで取得ができます。
それとは別にapplication.rbにデフォルトのタイムゾーンを設定でき、
その日時はTime.zone.nowで取得ができます。

現在日時を取得してみると、以下の通り

irb(main):001:0> Time.now
=> 2019-12-05 17:16:52 +0900
irb(main):002:0> Time.zone.now
=> Thu, 05 Dec 2019 08:16:57 UTC +00:00
irb(main):003:0> 

Time.zone.nowではUTC(協定世界時:Coordinated universal time)になっているということは、RailsではデフォルトではUTC設定になっています。
こちらを日本時間(JST)に変更することにしました。

config/application.rb
    config.time_zone = 'Tokyo'
    config.active_record.default_timezone = :local

上記コードを追加し、JSTにて日時取得できるようになりました。

irb(main):001:0> Time.now
=> 2019-12-05 17:31:29 +0900
irb(main):002:0> Time.zone.now
=> Thu, 05 Dec 2019 17:31:33 JST +09:00
irb(main):003:0> 

しかし、エラーは解決されませんでした。今回のエラーでは関係がない模様。。。

◆参考URL
Qiita、githubのissueを参考にしました。

https://github.com/zquestz/omniauth-google-oauth2/issues/195
https://qiita.com/sutoh/items/b7d23990abb9c5083daa
https://qiita.com/takuchan9104/items/1b588e125f8a1e0c7605

17
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
7