Edited at

Token must be a short-lived token (60 minutes) and in a reasonable timeframe.

More than 1 year has passed since last update.


環境

VirtualBox 5.2.8

Vagrant 2.0.2

Ubuntu 16.04

Bigquery (gem) 0.5.0


エラー

↑の環境でBigqueryにクエリを投げると

Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values and use a clock with skew to account for clock differences between systems.

というエラーが出た


原因

ホストマシンのrtcとvmの時間がずれていることが原因っぽい

Ubuntuだとtimedatectlで時間を確認することできる


ホストマシンのrtcとVMの時間があっていないとき

      Local time: 木 2018-06-14 10:34:03 JST

Universal time: 木 2018-06-14 01:34:03 UTC
RTC time: 水 2018-06-13 10:59:15
Time zone: Asia/Tokyo (JST, +0900)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no

Local time と RTC time がずれていることがわかる

また、NTP(機器間の時間を同期するプロトコル)のステータスがnoになっている


ホストマシンのrtcとVMの時間があっているとき

   Local time: 木 2018-06-14 10:50:28 JST

Universal time: 木 2018-06-14 01:50:28 UTC
RTC time: 木 2018-06-14 01:50:28
Time zone: Asia/Tokyo (JST, +0900)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

Local time と RTC time があっていることがわかる(それぞれJSTとUTCで表示されているので数字は違う)

また、NTP(機器間の時間を同期するプロトコル)のステータスがyesになっている


解決法

config.vm.provider 'virtualbox' do |vb|

vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end

上のコードは、マシン間の時間のズレが1000ms(1s)より大きくなったら

時間を同期するようにvirtualboxを設定している


参考

virtual machine - How to sync time on host wake-up within VirtualBox? - Stack Overflow