Flask-Dance × Google OAuth をローカル環境で動かす方法(HTTP対応)

Flask

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で開発する代替案

  1. flask run --cert=cert.pem --key=key.pem で自己署名証明書を使う
  2. ngrokなどのトンネリングサービスでHTTPSアクセスする
  3. Docker+nginxでHTTPS対応環境を構築

まとめ

Flask-DanceのGoogle OAuth認証は、仕様上HTTPS必須ですが、開発環境限定でOAUTHLIB_INSECURE_TRANSPORTを設定すればHTTPでも動かせます。ただし本番環境では必ずHTTPSを使い、セキュリティを確保しましょう。

コメント

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