LoginSignup
4

More than 5 years have passed since last update.

Deviseとomniauth-google-oauth2でrefresh_tokenが発行される条件を調べてみた

Posted at

1.本記事の概要

Deviseomniauth-google-oauthを使ってGoogle認証機能を実現する際に、Googleからrefresh_tokenが発行される設定と発行されない設定をまとめてみたもの。

2.調べた理由

Google APIを利用するときに必要となるaccess_tokenは、どの設定でも発行されることから、access_tokenの期限が切れる都度認証画面にアクセスしてaccess_tokenを得るようなシステムにすれば、Google APIは問題なく利用できる。
しかし、refresh_tokenを使ってaccess_tokenを発行させる方法はシステム側で処理が可能であり、この方法だとユーザーに余計な操作をさせずに済むことから、そのために必要となるrefresh_tokenが発行される条件を調べた。

3.調査の前提条件

次の2つの作業を、4.の表に示した組み合わせをテストする前に毎回行った。

  • ログイン前に、データベースに保存しているユーザー情報を削除する。
  • ログイン前に「Googleアカウント情報 → ログインとセキュリティ → 接続済みのアプリとサイト → アカウントに接続されているアプリ」を開いて、テスト用プログラムの接続許可を取り消す。 capture.png

4.問題となる設定とその結果

omniauth.rbに設定するpromptaccess_typeの2つで、この設定の組み合わせにより、refresh_tokenが発行されたりされなかったりする。
それぞれの設定の組み合わせによる結果は以下の表のとおりで、いずれの設定でも、access_tokenは発行される。

prompt: 設定せず prompt: none prompt: consent prompt: select_account
access_type: online 発行されない 認証画面が表示されない 発行されない 発行されない
access_type: offline 発行される 認証画面が表示されない 発行される 発行される

5.まとめ

promptのデフォルトは上記の表の「設定せず」で、access_typeのデフォルトは「offline」であることから、特段の設定を加えなければ、refresh_tokenは発行されるはず。

5.その他参考

refresh_tokenを使ってaccess_tokenを得る方法は、以下のサイトに掲載されている。
google-api-ruby-clientを用いて、Google Calendarにアクセスしてイベントを取得する - Qiita
Google APIのAccess Tokenをお手軽に取得する - Qiita
OAuth2.0によるGoogle+ APIのアクセス方法

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
4