Open2

GoogleのOAuth2認証でリフレッシュトークンが取得でいない場合の対処

yamadashyyamadashy

書くほどでもないが、ハマる人が減るよう。

結論

Google の OAuth 実装で access_type を offline にしている場合、 prompt に force を指定しないとリフレッシュトークンが得られない場合があります。

具体的には、 再同意プロンプト で同意された場合のみリフレッシュトークンが得られます。

prompt を指定しない場合は auto 指定となり、こちら側で再同意のタイミングが図れません。

yamadashyyamadashy

参考

ドキュメントには prompt に concent を指定すると再同意が出るぐらいし書かれてません。
そもそも concent というオプションが古く、offline の場合の仕様についての記載がありません。
https://developers.google.com/identity/protocols/oauth2/web-server#creatingclient

関連する issue があり、皆さんドキュメントに情報が書かれていないことに腹を立てている様子です。
https://github.com/googleapis/google-api-python-client/issues/213