リフレッシュトークンとアクセストークンを作成し node.js で Google API を使用していたところ、 expiry_date が過ぎているのにレスポンスが返ってくるという自身が想定した挙動と異なる振る舞いに出会いました。気になって調べてみたので、ここにメモを残します。
気になること
node.js で Google API 実行用の token ファイルを生成したのですが、ファイル内にある expiry_date の期日を超過しても token ファイルが更新されないし API のレスポンスもエラーにならないという、自身が想定した挙動と異なる振る舞いに出会いました。
挙動
処理の流れは以下のとおりです。
- Google API Consoleから OAuth 2.0 認証情報を取得
- Google 承認サーバーからアクセス トークンを取得
- ユーザーによって付与されたアクセス権の範囲を調べる
- アクセス トークンを API に送信
- 必要に応じてアクセス トークンを更新
わかったこと
新しく token を発行しても、古い token は有効であり続ける(使われないと6ヶ月後に失効)。古い tokenを無効化するには明示的に Revoke する必要がある。
refresh tokenが無効化されるケース
- ユーザーがアクセス権を削除した場合
- refresh token を6か月間使用しない
- token の scope に Gmail が含まれている状態でユーザがパスワードを変更した場合
- 発行された refresh token(有効なもの)の数が制限を超えた場合
- プロジェクトの設定が外部ユーザへ開放されていて、かつ Testing 状態の場合は refresh token は7日間で失効
わからないこと
- expiry_date の期日はどのような意味なのか
- ローカルにあるトークンファイルは更新されるのか?
参考
stack overflow
同じようなケースが記載されておりました。
stackoverflow.com
Qiita
同じようなケースが記載されておりました。
qiita.com
github
リフレッシュトークンの処理について説明が記載されてました。
github.com