PythonのFlaskアプリにOAuth2認証を導入する基本ステップまとめ!初心者でもわかる外部サービス連携の仕組み
生徒
「WebアプリにGoogleアカウントでログインできる機能って、どうやって作るんですか?」
先生
「FlaskアプリにOAuth2という仕組みを使うと、GoogleやFacebookなどの外部アカウントでログインできるようになります。」
生徒
「OAuth2って何ですか?難しそう…」
先生
「大丈夫ですよ。OAuth2は、鍵のような役割をするものだと考えるとイメージしやすいです。順番にわかりやすく説明していきますね。」
1. OAuth2とは?初心者にもわかる簡単な説明
OAuth2(オーオース・ツー)とは、他のサービスが持っているアカウント情報を使って、安全にログインや認証を行うための仕組みです。自分のWebアプリで、ユーザーのIDやパスワードを直接管理しなくてよい点が大きな特徴です。
たとえば、Webアプリに「Googleでログイン」というボタンがあり、それを押すとGoogleのログイン画面が表示されます。そこで本人確認が完了すると、「このユーザーは問題ありません」という合図だけがWebアプリに返ってきます。この確認作業を担当しているのがOAuth2です。
重要なのは、パスワードそのものはWebアプリ側には一切渡らないという点です。これにより、万が一アプリ側にトラブルがあっても、ユーザーの大切な情報が漏れにくくなります。
例えるなら、建物に入るときに社員証を警備員に見せるようなものです。警備員は「本人かどうか」だけを確認し、社員証の中身をコピーしたりはしません。OAuth2も同じ考え方で、安全性を保っています。
以下は、OAuth2の考え方をイメージするための、とてもシンプルな疑似コードです。細かい処理は気にせず、「外部サービスに確認をお願いしている」点だけ押さえてください。
# ログインボタンが押されたら
def login():
# 外部サービス(例:Google)に認証をお願いする
return redirect("Googleのログイン画面")
# 認証が終わったあと
def callback():
# 「このユーザーはOK」という結果だけを受け取る
return "ログイン成功"
このように、OAuth2は「本人確認を外部に任せる仕組み」と考えると、初めてでも理解しやすくなります。
2. FlaskでOAuth2を使うために必要なライブラリ
PythonのFlaskでOAuth2ログイン(外部サービス連携の認証)を手早く実装するなら、Authlib(オースリブ)というライブラリを使うのが定番です。OAuth2は本来、リダイレクトやトークンのやり取りなど手順が多いのですが、Authlibがその面倒な部分をまとめて扱いやすくしてくれます。
まずはインストールから始めましょう。ターミナル(黒い画面)で、次のコマンドを実行します。
pip install Flask Authlib
「ちゃんと入ったのか不安…」という場合は、Pythonで読み込めるかだけ確認すると安心です。エラーが出なければOKです。
from authlib.integrations.flask_client import OAuth
print("Authlibの読み込みに成功しました")
Authlibは、GoogleやFacebookなどのOAuth2認証に必要な流れ(ログイン画面へ移動する処理や、認証後の情報を受け取る処理)を、Flaskで扱いやすい形に整えてくれます。まずは「Authlibを入れる=OAuth2を使う準備が整う」と覚えておくと分かりやすいです。
3. Google OAuth2をFlaskに組み込む基本ステップ
ここでは、Flaskアプリに「Googleでログイン」を付けるときの基本の流れを、コードと一緒に確認します。ポイントは、ユーザーをGoogleのログイン画面へ案内し、ログイン後にGoogleから「この人はログインしてOK」という許可(トークン)を受け取り、最後にユーザー情報を取り出すことです。
初心者の方は、まず「/login にアクセス → Googleに移動 → /authorize に戻ってくる」という往復がある、と押さえるだけでも理解しやすくなります。
以下は、Google OAuth2をFlaskに組み込む代表的なサンプルです。client_idやclient_secretは、Google側の設定で発行されたものに置き換えて使います。
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',
authorize_url='https://accounts.google.com/o/oauth2/auth',
api_base_url='https://www.googleapis.com/oauth2/v1/',
userinfo_endpoint='https://www.googleapis.com/oauth2/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)
- 1) トップページ(/):リンクを押すと
/loginへ移動します。 - 2) ログイン開始(/login):
authorize_redirect()でGoogleのログイン画面へ案内します(ここが「外部サービス連携」の入口です)。 - 3) 戻り先(/authorize):ログイン後、GoogleがこのURLへ戻してくれます。ここで
authorize_access_token()により許可情報を受け取り、userinfoから名前やメールなどを取得します。 - 4) セッション保存:
session['user']に入れておくと、「ログイン中のユーザー」として扱いやすくなります。
まずはこの基本形を動かして、Googleログインの往復ができる状態を作るのが第一歩です。細かい意味が全部分からなくても大丈夫なので、「どのURLで何をしているか」を追いかける意識で読むとスッと入ってきます。
4. OAuth2導入に必要なGoogleの設定
このコードを使う前に、Google Cloud ConsoleでOAuth2の設定が必要です。ここは「Googleに、あなたのFlaskアプリを認証してもいい相手として登録する作業」だと思うと分かりやすいです。
- Google Cloud Consoleにアクセス
- 対象のプロジェクトを選び、「APIとサービス」→「認証情報」へ進む
- 「OAuth 2.0クライアントID」を作成(種類は基本的に「ウェブアプリケーション」)
- 「承認済みのリダイレクトURI」に
http://localhost:5000/authorizeを追加 - 発行されたクライアントIDとシークレットをPythonコードにコピペ
リダイレクトURIは、Googleログインが終わったあとに戻ってくる先のURLです。Flask側の@app.route('/authorize')とセットで考えると理解しやすいです。ここが1文字でも違うと、ログインが失敗する原因になります。
# Google側に登録する戻り先URLの例(ローカルで動かすとき)
http://localhost:5000/authorize
この設定をすることで、GoogleがあなたのFlaskアプリに「このアプリへログイン結果を渡してOK」という許可を出してくれます。まずはローカル環境(localhost)で設定して、動作が確認できてから本番用のURLに切り替える流れが安心です。
5. コードの各部分をやさしく解説
app.secret_key:セッション情報を暗号化するためのカギです。安全な文字列にしましょう。oauth.register():ここでGoogleのOAuth設定を登録しています。authorize_redirect:Googleのログインページにユーザーをリダイレクト(移動)させます。authorize_access_token():Googleからアクセストークン(認証の許可証)を受け取ります。google.get('userinfo'):Googleのサーバーからユーザー情報を取得します。
このようにOAuth2では、ユーザーがログインしたあと、トークンという一時的な「鍵」を使って必要な情報を取得します。
6. セッションでユーザー情報を保持するとは?
sessionとは、ユーザーがログインしている状態を一時的に記録しておくための仕組みです。
たとえば、レストランで席に着いたときに渡される番号札のようなもので、誰が今この席にいるかを記録します。
この番号札(セッション)を見れば、「この人は〇〇さん」とアプリ側で分かるわけです。
7. ログイン後にユーザー情報を表示する方法
以下のようにして、ユーザー情報をページに表示することもできます。
@app.route('/profile')
def profile():
user = session.get('user')
if user:
return f"ログイン中:{user['email']}"
return redirect('/')
セッションにユーザー情報があれば、それを取り出して画面に表示することができます。
8. FlaskアプリにOAuth2を導入するメリット
OAuth2を使うことで、次のようなメリットがあります。
- パスワードを自分のサーバーで扱わなくて済む:セキュリティ上とても安全です。
- ログインが簡単になる:ユーザーはGoogleなどのアカウントでそのままログインできます。
- 信頼性が高い:大手サービス(Googleなど)の認証を使えるので安心です。
9. 初心者が気をつけたいポイント
- Googleの設定ミスに注意:リダイレクトURIが一致していないとログインできません。
- 秘密鍵はコードにベタ書きしない:環境変数を使うのが望ましいです(今回の例では省略)。
- URLがhttpのままだと警告が出ることがある:本番環境では
httpsを使いましょう。
まとめ
PythonのFlaskアプリにOAuth2認証を導入する流れを学んだ今回の内容は、外部サービスと安全に連携するための基礎知識として非常に役立つものとなりました。特にGoogleアカウントを使ったログイン機能の仕組みは、初心者でも理解しやすく、FlaskとOAuth2を組み合わせることで、実践的な認証機能を簡単に実装できるという点が大きな魅力です。OAuth2という認証方式は、外部サービスが本人確認を代わりに行い、その結果をアプリ側へ返すため、自分のアプリがパスワードを直接管理する必要がなく、安全性と利便性の両方を高められます。とくにGoogleのような信頼性の高いサービスと連携することで、ユーザーに安心してログインしてもらえる環境を整えられることは、現代のWebアプリ開発において欠かせない技術となっています。 FlaskでOAuth2を使う際には「Authlib」という便利なライブラリを利用することで、複雑に見えるOAuthの仕組みをシンプルなコードで扱えるようになります。コードの流れとしては、まずOAuthの設定をアプリ内に登録し、ユーザーをGoogleのログイン画面にリダイレクトし、ログイン後にアクセストークンを受け取り、その情報を使ってユーザー情報を取得するというステップで進めていきます。このように一連の流れが明確で、動作を追いやすい点は、初心者がOAuth2を学ぶ入口としてとても良い構造になっているといえます。セッションにユーザー情報を保存すれば、ログイン後のページでも安全にユーザーの名前やメールアドレスを表示でき、より実用的なWebアプリとして成長させることができます。 また、Google Cloud ConsoleでクライアントIDやリダイレクトURIを設定する作業も重要なポイントです。この設定が正しくないと、認証画面が表示されなかったり、ログイン後にアプリへ戻ってこられなかったりするため、OAuth2の仕組みを理解しながら丁寧に設定することが求められます。一見複雑に見える設定ですが、一度流れをつかむと理解が深まり、他の外部サービス(GitHub、Facebook、LINEなど)にも応用できるようになります。 FlaskアプリにOAuth2認証を導入するメリットとして、安全性の高さやログインの簡略化、そして外部アカウントを使った信頼性の高い認証が挙げられます。自分のアプリでパスワードを管理する必要がないため、情報漏えいのリスクを減らしながらサービスを提供できます。また、ユーザーが普段から使い慣れたGoogleアカウントでログインできるため、登録の手間が省け、サービスへの導入障壁も下げられます。現代のWebアプリはセキュリティと利便性の両立が必要となるため、OAuth2はまさにその要件を満たす重要な認証方式といえるでしょう。 さらに、今回掲載したコード例を参考に、自分なりにログイン後の処理や追加機能を組み合わせることで、より実践的なFlaskアプリを作成できます。たとえば、プロフィール画面の作成、外部APIとの連携、ログアウト機能の実装など、OAuth2を起点としてさまざまな拡張が可能です。ここでは、理解を深めるために記事で使った構成と同じように、簡単なサンプルプログラムを再掲して振り返ります。
OAuth2導入のサンプルコード
@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['name']}さん"
このように、ログイン処理とユーザー情報の取得を短いコードで実現できる点は、FlaskとOAuth2の強みです。ユーザーがログインした状態はセッションに保持されるため、プロフィールページや限定機能へ自然にアクセスできるようになります。また、OAuth2は安全で拡張性の高い認証方式であり、さまざまなWebアプリやモバイルアプリで広く活用されています。今後、自分のFlaskアプリをより高度なものへ発展させていく際にも、今回学んだ認証の仕組みが大きな助けとなるでしょう。
生徒
「OAuth2ってむずかしそうだと思っていましたけど、Flaskでコードを書いてみると意外と分かりやすかったです!」
先生
「そうですね。流れをつかむととても扱いやすい仕組みですよ。Googleが本人確認をしてくれるので、安全にログイン機能を作れます。」
生徒
「ユーザー情報をセッションで管理できるのも便利でした。プロフィール画面とかも簡単に作れそうです!」
先生
「その通りです。OAuth2を覚えると、いろいろな外部サービスと連携できるようになりますし、アプリの幅がぐっと広がりますよ。」
生徒
「もっと発展させて、自分のアプリに本格的なログイン機能を追加してみたいと思いました!」