FlaskでGoogleログインを導入する方法!OAuth2×外部認証を初心者でもわかりやすく解説
生徒
「FlaskでGoogleログインをつけたいのですが、どうやって始めたらいいのか全然わかりません。パスワードを自分で管理するのも怖いです……。」
先生
「そんなときに便利なのがOAuth2という仕組みですよ。Googleのアカウントで安全にログインできる方法です。」
生徒
「Googleのアカウントでログインできる仕組みって、どうやって動いているんですか?難しそうに感じます。」
先生
「実は仕組みを知るとそんなに難しくありません。これからFlaskでGoogleログインを導入する流れを順番に解説していきましょう!」
1. Googleログインとは?
Googleログインは、ユーザーが自分のGoogleアカウントを使って、他のWebアプリにログインできる仕組みです。FlaskのようなWebフレームワークでログイン機能を作るとき、パスワードを自分で保存する必要がなくなるため、安全性がとても高まります。
たとえば、あなたが作ったFlaskアプリで「メールアドレス」と「パスワード」を保存するとします。しかし、初心者が安全な保存方法を間違えると情報流出の危険があります。Googleログインを使えば、Flaskアプリはパスワードに触れず、Googleが本人確認をしてくれます。
初心者にもわかりやすい例として、次のように考えると理解しやすいです。
例え:ホテルに宿泊するとき、あなたが身分証明書のコピーをホテルに預ける必要はありません。身分証明書を見せて本人確認をしてもらうだけで大丈夫です。Googleログインでも同じで、Googleがあなたの本人確認を代わりに行い、Flaskのアプリは確認結果だけを受け取ります。
2. OAuth2とは?Googleログインの仕組みを支える技術
GoogleログインはOAuth2という仕組みを利用しています。OAuth2はインターネットで広く使われている認証方式で、ユーザーのパスワードをサイトに渡さずにログインできるようにする技術です。
OAuth2では、Googleが本人確認をしたあとに「この人は本人です」と示すデータ(アクセストークン)をFlaskアプリに返します。アクセストークンは、本人確認の証明書のようなものと考えるとわかりやすいです。
この仕組みによって、Flaskアプリは安全にユーザーを識別できます。
3. FlaskでGoogleログインを導入する流れ
FlaskでGoogleログインを導入するためには、次のような流れで処理が進みます。初心者でも理解しやすいように簡潔にまとめています。
- ユーザーが「Googleでログイン」ボタンを押す。
- FlaskアプリがユーザーをGoogleのログイン画面へ案内する。
- ユーザーがGoogleでログインする。
- GoogleがFlaskアプリへ「この人は本人です」という情報を返す。
- Flaskアプリがログイン済みとしてユーザー情報を保存する。
この流れを理解しておくと、コードの意味がよりよくわかるようになります。
4. FlaskでGoogleログインの準備
Googleログインを実装するためには、いくつかの準備が必要です。まずはGoogle Cloudで「OAuth2の認証情報」を作成し、FlaskアプリがGoogleと通信できるようにします。
さらに、Flask側ではOAuth2を簡単に扱えるライブラリとしてAuthlibを利用します。
pip install flask authlib
5. FlaskでGoogleログインを実装するサンプルコード
以下のコードは、FlaskでGoogleログインを導入する基本的なサンプルです。Google Cloudで取得したクライアントIDとクライアントシークレットを自分の値に置き換えて使います。
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="YOUR_CLIENT_ID",
client_secret="YOUR_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と通信するための設定。Googleのサイトへ案内したり、ユーザー情報を受け取る準備をします。
- /login → Googleのログイン画面へジャンプさせる処理です。
- /authorize → ログイン後にGoogleから戻ってくる場所。ここでユーザー情報を受け取ります。
- session["user"] → Flaskが用意する「セッション」にユーザー情報を保存し、ログイン状態を維持します。
セッションとは、ユーザーがアプリを使っているあいだだけ情報を覚えておく箱のようなものです。
7. Googleログイン実装時の注意点
Googleログインを使うと便利ですが、安全に利用するためには次の点に気をつける必要があります。
- secret_keyを絶対に外部に公開しないこと
- GoogleのクライアントID・シークレットも大切に管理すること
- HTTPSを使用すること(Googleログインでは安全な通信が必須です)
- Google Cloudで設定したURLとFlaskのURLが一致しているか確認すること
これらを守ることで、Flaskアプリの安全性が高まり、安心してGoogleログインを利用できます。