Flask-Dance × Google OAuth をローカル環境で動かす方法(HTTP対応)
はじめに
Flask-Danceを使ってGoogle OAuth認証を実装すると、ローカル開発時に次のようなエラーが出ることがあります。
oauthlib.oauth2.rfc6749.errors.InsecureTransportError: (insecure_transport) OAuth 2 MUST utilize https.
これはOAuth 2.0仕様でHTTPS必須と定められているため、HTTPで動かすローカル環境では認証がブロックされてしまうことが原因です。本記事では、この制限を開発環境限定で回避する方法を紹介します。
エラーの原因
- OAuthlib(Flask-Dance内部のライブラリ)がHTTP通信を拒否している
- 本番ではセキュリティのためHTTPS必須だが、開発ではHTTPが一般的

読者
本番じゃないし、開発中くらいHTTPで動かしたいな…

ごりら
それなら環境変数を使ってHTTPを許可する方法があるぞ。ただし開発限定な!
開発環境でHTTPを許可する方法
Flaskアプリの起動前に以下を設定します。
方法1: Pythonコードに直接追加
import os
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' # 開発環境のみ許可
from flask import Flask
from flask_dance.contrib.google import make_google_blueprint, google
方法2: 環境変数で設定
export OAUTHLIB_INSECURE_TRANSPORT=1
flask run
本番環境で使ってはいけない理由
- HTTP通信は平文で送信されるため、アクセストークンや認証コードが盗まれる危険がある
- 本番では必ずHTTPS(SSL/TLS)を利用する
HTTPSで開発する代替案
flask run --cert=cert.pem --key=key.pemで自己署名証明書を使う- ngrokなどのトンネリングサービスでHTTPSアクセスする
- Docker+nginxでHTTPS対応環境を構築
まとめ
Flask-DanceのGoogle OAuth認証は、仕様上HTTPS必須ですが、開発環境限定でOAUTHLIB_INSECURE_TRANSPORTを設定すればHTTPでも動かせます。ただし本番環境では必ずHTTPSを使い、セキュリティを確保しましょう。


コメント