Flask-Dance × Google OAuth のスコープ設定と警告回避

Flask

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.profileuserinfo.email はユーザー情報取得に必要
  • 短縮形スコープは内部で変換されるだけだが、警告を避けるため完全形式を使う

関連エラーへの対応

もし同時に InsecureTransportError が出ている場合、ローカル開発では以下も必要です。

import os
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'  # 開発環境のみ

まとめ

Flask-DanceのGoogle OAuth実装時に出るスコープ警告は、完全スコープ形式を使うことで回避できます。将来のAPI変更にも備え、明示的に指定しておくことをおすすめします。

コメント

タイトルとURLをコピーしました