FlaskでOAuth2認可を実装しよう!初心者でもわかる安全なログイン認証の基本
生徒
「Webアプリで他のサービスのアカウントを使ってログインさせる方法ってあるんですか?」
先生
「はい、それにはOAuth2という仕組みを使うと便利です。たとえばGoogleやLINE、Facebookなどのアカウントを使ったログインがそれですね。」
生徒
「それって安全なんですか?それに難しそう…」
先生
「とても安全ですよ。しかも、Flaskを使えば初心者でも意外と簡単にOAuth2認可を実装できます。一緒に仕組みから学んでいきましょう!」
1. OAuth2認可とは?初心者にもわかる簡単な説明
OAuth2(オーオース・ツー)とは、他のサービスのアカウントを使ってログインする仕組みです。たとえば、あなたが「Googleアカウントでログイン」ボタンを見たことがあるなら、それはOAuth2を使っています。
OAuth2は「認証(にんしょう)」と「認可(にんか)」を分けて考えるのが特徴です。
- 認証:この人が本当に本人かどうかを確認する。
- 認可:この人がこの操作をしてもいいかを確認する。
OAuth2は他人の家に入る前に、その家の持ち主が「この人にはリビングだけ見せてもいいよ」と許可する仕組みに似ています。
2. FlaskとOAuth2の関係とは?
Flask(フラスク)はPythonで作られたWebアプリケーションのフレームワークです。とても軽量で、初心者にも扱いやすいのが特徴です。
Flaskを使うと、Webサイトを簡単に作れるだけでなく、OAuth2を使ったログイン機能やAPIアクセスも実装できます。
OAuth2をFlaskで使うには、「Authlib(オースリブ)」という便利なライブラリを使うのが一般的です。
3. OAuth2を使ったログインの流れを図でイメージしよう
OAuth2の仕組みは少し複雑なので、駅の改札のようなイメージで考えると分かりやすいです。
- ユーザーが「ログイン」ボタンをクリック。
- 外部サービス(Googleなど)のログインページに移動。
- ユーザーがログインして「許可」ボタンを押す。
- トークン(合言葉のような鍵)が発行される。
- このトークンを使って、自分のアプリにログイン完了!
トークンとは、一定時間だけ使える使い捨ての「通行証」のようなものです。パスワードそのものではないので、安全です。
4. 必要なPythonライブラリをインストールしよう
まず、OAuth2を扱うために必要なPythonライブラリをインストールします。
pip install Flask Authlib
Authlibは、Flaskと相性の良いOAuth2ライブラリです。
5. FlaskでOAuth2ログインを実装してみよう(Google編)
以下はGoogleアカウントを使ったOAuth2ログインのサンプルコードです。簡単な構成で、OAuth2の流れを理解できます。
from flask import Flask, redirect, url_for, session
from authlib.integrations.flask_client import OAuth
app = Flask(__name__)
app.secret_key = 'これはとても大事な秘密のカギ'
oauth = OAuth(app)
google = oauth.register(
name='google',
client_id='あなたのGoogleクライアントID',
client_secret='あなたのシークレットキー',
access_token_url='https://accounts.google.com/o/oauth2/token',
access_token_params=None,
authorize_url='https://accounts.google.com/o/oauth2/auth',
authorize_params=None,
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 homepage():
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()
resp = google.get('userinfo')
user_info = resp.json()
session['user'] = user_info
return f"こんにちは、{user_info['name']}さん!"
if __name__ == '__main__':
app.run(debug=True)
6. セキュリティのポイント
OAuth2は非常に安全な仕組みですが、セキュリティを高めるために以下の点に注意しましょう。
- secret_keyは絶対に公開しない:公開リポジトリに載せないように!
- HTTPSを使う:通信が暗号化され、トークンの盗聴リスクが減ります。
- トークンの有効期限に注意:古いトークンは使えないように設定できます。
7. FlaskとOAuth2を使うメリット
OAuth2認可を使うことで、以下のようなメリットがあります。
- ユーザーの登録手間が減る:GoogleやLINEなどのアカウントですぐログインできます。
- 安全性が高い:パスワードを直接扱わないので、情報漏えいリスクが低いです。
- Flaskとの相性が良い:Flaskはコードがシンプルで、初心者にもわかりやすくOAuth2を組み込めます。
まとめ
FlaskとOAuth2認可の仕組みを学ぶことで、外部サービスのアカウントを利用した安全なログイン機能を自分のWebアプリに組み込めるようになります。今回の記事では、OAuth2の基本的な考え方から、FlaskとAuthlibを使った実際のログイン実装までを順序よく確認しました。OAuth2は一見難しく感じるかもしれませんが、目的は「他のサービスが発行した安全なトークンを使ってログインさせる仕組み」を提供することであり、アプリ側ではパスワードを扱わずに済むため、セキュリティと利便性を同時に向上させることができます。 またOAuth2は単なるログインではなく、認証・認可を柔軟に扱える点が特徴です。GoogleやLINEといった外部サービスは、ユーザーの許可に応じて「メールアドレスだけ取得」「プロフィール画像も取得」など、権限を細かく制御できる仕組みを提供しており、FlaskではAuthlibを使ってこれを簡単に扱えるようになっています。 さらに、OAuth2の流れを理解するうえでは「許可画面→トークン発行→ユーザー情報取得」という一連の処理を意識すると、仕組みが見えやすくなります。この流れはどのプロバイダでも基本的に同じであり、Google以外のサービスに拡張する際にも応用できます。 FlaskによるOAuth2認可実装の利点は、コードが短く読みやすく、初心者でも扱いやすいという点です。開発を進める中で、トークン管理やHTTPS設定、secret_keyの保護などセキュリティ面で注意すべき点はありますが、基礎を押さえておけば、安全で柔軟なログイン機能を実装できます。ここからは、今回学んだ内容を応用し、より実践的な「ログイン後のページ保護処理」を追加したサンプルコードを紹介します。
応用例:ログイン後のページを保護するサンプルコード
from flask import Flask, session, redirect, url_for
from authlib.integrations.flask_client import OAuth
app = Flask(__name__)
app.secret_key = "安全に管理すべき大事なカギ"
oauth = OAuth(app)
google = oauth.register(
name="google",
client_id="あなたのクライアントID",
client_secret="あなたのシークレットキー",
access_token_url="https://accounts.google.com/o/oauth2/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():
if "user" in session:
return f"ようこそ、{session['user']['name']}さん!<br><a href='/logout'>ログアウト</a>"
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 redirect(url_for("index"))
@app.route("/logout")
def logout():
session.pop("user", None)
return "ログアウトしました。<a href='/'>トップへ戻る</a>"
if __name__ == "__main__":
app.run(debug=True)
この応用コードでは、ログイン状態を session で管理し、ログインしていない場合はトップページでログインボタンだけを表示し、ログイン済みであればユーザー情報を表示するという流れを作っています。実際のアプリでは、この仕組みを使って「ログインしないとアクセスできないページ」を作ったり、ユーザー情報を使った機能を実装したりできます。 FlaskとOAuth2の組み合わせは、初心者から上級者まで幅広い開発者にとって使いやすく、Google・LINE・GitHubなどさまざまな外部サービスのアカウントでログインできる柔軟なアプリを構築できる力になります。OAuth2の考え方は現代のWeb開発に必須ともいえるため、今回の記事をきっかけにさらに深く学んでいくと、より高度なセキュリティ設計や外部API連携も扱えるようになります。
生徒
「OAuth2ってもっと難しいものだと思っていたんですが、仕組みがわかると意外とシンプルに見えてきました!」
先生
「その通りです。基本は『許可ページへ移動 → トークンを受け取る → ユーザー情報を取得する』という流れを理解することなんです。」
生徒
「FlaskとAuthlibなら短いコードでGoogleログインまで作れるのも驚きでした。」
先生
「FlaskはシンプルなのでOAuth2と相性がいいんですよ。ログイン後のページ制限やログアウト処理を加えることで、より実践的なアプリになります。」
生徒
「トークンを扱うと聞くと難しそうですが、パスワード自体を扱わないのは安心ですね!」
先生
「まさにそこがOAuth2の良さです。仕組みを理解すれば、Google以外のサービスにも応用できますよ。」
生徒
「ありがとうございます!安全なログイン機能を持つアプリも自分で作れそうな気がします!」