はじめに
Google APIのOAuth認証時に毎回refresh_tokenを発行したい場合があると思います。
refresh_tokenは、下記の条件以外で2回目のOAuth認証時に受け取ることができません。受け取れない理由は、すでに発行したrefresh_tokenを再利用することを想定しいてるからです。
- ユーザーが アプリのアクセスを取り消しました。
- 更新トークンは6ヶ月間使用されていません。
- ユーザーがパスワードを変更し、更新トークンにGmailスコープが含まれています。
- ユーザーアカウントが、付与されたアクセストークンの最大数を超えました。
結論
リクエストの認証パラメータにprompt=consent
を設定します。
このパラメータを設定することでOAuth認証時に毎回同意画面
が表示され、ユーザーが許可ボタンを押下すると、refresh_tokenを取得することができます。
こんな感じのリクエストです↓
https://accounts.google.com/o/oauth2/auth
?client_id=hogehoge
&redirect_uri=http://localhost
&scope=https://www.googleapis.com/auth/drive
&response_type=code
&access_type=offline
&prompt=consent
promptは、2回目の同意画面の関して制限できるオプションです。
■promptの設定可能な値
値 | 説明 |
---|---|
none | 認証画面や同意画面を表示しないでください。他の値と一緒に指定してはなりません。 |
consent | ユーザーに同意を求めます。 |
select_account | アカウントを選択するようにユーザーに促します。 |