Flask-Dance × Google OAuth のスコープ設定と警告回避
はじめに
Flask-DanceでGoogle OAuthを実装する際、次のような警告が出ることがあります。
Warning: Scope has changed from "email profile" to "openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email".
これは短縮形スコープを指定した場合にGoogle側で完全スコープに変換されることによるものです。本記事では、この警告の原因と回避方法を解説します。
原因
- Google OAuthの短縮形
"email"/"profile"は非推奨になりつつある - 内部的に完全形式へ変換され、その際に警告が出る
- 動作はするが、将来の互換性や明示性のため完全スコープを推奨
修正版スコープ指定例
from flask_dance.contrib.google import make_google_blueprint
google_bp = make_google_blueprint(
client_id="GOOGLE_CLIENT_ID",
client_secret="GOOGLE_CLIENT_SECRET",
scope=[
"openid",
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/userinfo.email"
],
redirect_to="index"
)
ポイント
openidはOIDC準拠でIDトークン取得に推奨userinfo.profileとuserinfo.emailはユーザー情報取得に必要- 短縮形スコープは内部で変換されるだけだが、警告を避けるため完全形式を使う
関連エラーへの対応
もし同時に InsecureTransportError が出ている場合、ローカル開発では以下も必要です。
import os
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' # 開発環境のみ
まとめ
Flask-DanceのGoogle OAuth実装時に出るスコープ警告は、完全スコープ形式を使うことで回避できます。将来のAPI変更にも備え、明示的に指定しておくことをおすすめします。


コメント