FlaskでOAuth2認証を完全解説!初心者でも理解できる安全なログインの仕組み
生徒
「Flaskでログイン機能を作りたいんですが、パスワードを自分で管理するのは少し不安です。他の方法ってありますか?」
先生
「Flaskでは、OAuth2という仕組みを使って、安全で便利なログイン機能をつくれます。例えばGoogleやTwitterでログインする仕組みです。」
生徒
「SNSのアカウントでログインできる仕組みって、どう動いているんですか?」
先生
「では、まずOAuth2の基本から、初心者でも確実に理解できるように説明していきましょう!」
1. OAuth2認証とは?初心者向けにやさしく解説
OAuth2(オーオースツー)は、インターネットでよく使われている認証(本人確認)の仕組みです。これは、あなたが作るFlaskアプリがパスワードを扱わずに、安全にログインしてもらうための方法です。
例えば、Googleでログインできるサイトを見たことがあると思います。そのとき、あなたのパスワードをサイトに教える必要はありません。Googleが「この人は本人だよ」と証明してくれる仕組みがOAuth2です。
初心者にもわかりやすく例えると、次のようなイメージです。
例え:図書館で本を借りるとき、あなたは図書館に「免許証のコピー」を渡しませんよね。かわりに本物の免許証を係員に見せて、係員が本人確認してくれます。OAuth2では、GoogleやTwitterが「係員」の役割をしてくれるのです。
2. OAuth2が使われる理由(初心者が知るべきポイント)
FlaskアプリでOAuth2がよく使われる理由は次のとおりです。
- パスワードを自分で保存しなくてよい
- 安全性が高い
- ユーザーがログインしやすい
- Google・Twitterなど多くのサービスに対応
特に「パスワードを保存しなくてよい」のは重要です。プログラミング初心者がパスワード管理をすると、セキュリティ事故につながりやすいため、OAuth2を利用することで安全な仕組みを簡単に作れます。
3. FlaskでOAuth2を使うときの流れ
FlaskアプリでOAuth2認証を行うときの全体の流れを、できるだけシンプルに説明します。
- ユーザーが「Googleでログイン」ボタンを押す
- FlaskアプリがGoogleのログイン画面に案内する
- ユーザーがGoogleでログインする
- Googleが「本人確認OK」という証明をFlaskに返す
- Flaskがユーザーをログイン済みにする
この証明書のようなデータが「アクセストークン」と呼ばれます。初心者は、アクセストークン=本人確認ができたという証明データと覚えておけばOKです。
4. FlaskでOAuth2を使う準備(Authlibを利用)
FlaskでOAuth2を使うときに便利なライブラリがAuthlib(オースリブ)です。これはOAuth2を簡単に扱うための拡張機能で、Flaskとの相性もとても良いです。
まずはインストールが必要です。
pip install authlib flask
5. FlaskでGoogleログインを実装するコード例
以下は、OAuth2を使ってGoogleログインをするもっとも基本的なサンプルです。設定値は実際のGoogle Cloudの情報に置き換えてください。
from flask import Flask, redirect, url_for, session
from authlib.integrations.flask_client import OAuth
app = Flask(__name__)
app.secret_key = "your_secret_key"
oauth = OAuth(app)
google = oauth.register(
name="google",
client_id="GOOGLE_CLIENT_ID",
client_secret="GOOGLE_CLIENT_SECRET",
access_token_url="https://oauth2.googleapis.com/token",
authorize_url="https://accounts.google.com/o/oauth2/auth",
api_base_url="https://www.googleapis.com/oauth2/v1/",
userinfo_endpoint="https://openidconnect.googleapis.com/v1/userinfo",
client_kwargs={"scope": "openid email profile"},
)
@app.route("/")
def index():
return '<a href="/login">Googleでログイン</a>'
@app.route("/login")
def login():
redirect_uri = url_for("authorize", _external=True)
return google.authorize_redirect(redirect_uri)
@app.route("/authorize")
def authorize():
token = google.authorize_access_token()
user = google.get("userinfo").json()
session["user"] = user
return f"ログインしました: {user['email']}"
if __name__ == "__main__":
app.run(debug=True)
6. コードの流れを初心者向けに解説
このコードが行っていることを、できるだけかんたんに説明します。
- oauth.register:Googleと通信するための設定
- /login:Googleのログイン画面に案内するページ
- /authorize:ログイン後に戻ってくる場所
- session["user"]:ログインしたユーザー情報を保存
セッションとは、ユーザーがログインしている間だけ情報を持っておく箱のようなものです。
7. FlaskでOAuth2を利用するときの注意点
OAuth2は便利ですが、次の点には注意が必要です。
- secret_keyは絶対に公開しない
- GoogleのクライアントID・シークレットも秘密にする
- HTTPSを使うのが基本
- テスト環境と本番環境でURLをきちんと設定する
これらを守ることで、Flaskアプリのセキュリティが高まり、安心してOAuth2を利用できます。