FastAPI で Google OAuth を使った Single Sign-On (SSO) を実装する方法
現代のアプリユーザーは、新しいパスワードを作ることを望んでいません。その解決策が SSO(シングルサインオン) です。
この記事では、FastAPI, MongoDB, JWT, そして fastapi-sso
ライブラリを使って、Google アカウントでログイン可能な SSO を構築する方法をステップ・バイ・ステップで解説します。
🔎 なぜ SSO が必要なのか?
SSO は、単なるログイン手段ではなく、ユーザー体験とセキュリティを同時に向上させる重要な機能です。
🔐 1. セキュリティ向上
- パスワード漏洩やフィッシングのリスクを軽減
- Google / Microsoft / Facebook の高度な認証技術を活用
- MFA(多要素認証)との併用も可能
🤝 2. ユーザーの利便性
- 既存の Google アカウントでログイン可能
- パスワード管理や再発行が不要
- 離脱率の低減と登録率の向上に貢献
🛠️ 3. 開発コストの削減
- パスワード再設定機能の実装が不要
- ユーザー情報の管理がシンプルに
🧩 4. 複数サービス間の認証統一
- 一度のログインで複数のサービスにアクセス可能
- システム全体で統一されたユーザー体験を実現
💼 5. エンタープライズ対応
- Google Workspace や Azure AD との統合が容易
- 社内ツールや管理画面に必須の機能
✅ 使用する技術スタック
ツール | 用途 |
---|---|
FastAPI | Python ベースの高速 Web API フレームワーク |
fastapi-sso | Google OAuth2 の統合 |
MongoDB + Motor | 非同期でユーザーデータを保存 |
python-jose | JWT の生成と検証 |
passlib | パスワードのハッシュ化(オプション) |
⚙️ SSO 実装手順(Google OAuth)
1. ライブラリのインストール
pip install fastapi uvicorn motor fastapi-sso python-dotenv python-jose passlib[bcrypt]
2. Google OAuth の設定
- Google Cloud Console にアクセス
- プロジェクトを作成
- OAuth 2.0 クライアント ID を作成
- リダイレクト URI を設定:
http://localhost:8000/api/auth/google/callback
- クライアント ID とクライアントシークレットを取得
3. .env
ファイルを作成
MONGODB_URI=mongodb://localhost:27017
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REDIRECT_URL=http://localhost:8000/api/auth/google/callback
JWT_SECRET=your_jwt_secret
4. FastAPI の実装概要
主要なエンドポイント:
/api/auth/google/login
→ Google にリダイレクト/api/auth/google/callback
→ ユーザープロファイルを取得し、JWT を生成/api/register
→ ユーザー名/パスワードによる登録もサポート(任意)/api/token
→ 従来型ログイン- すべての API ルートは JWT で保護可能
🔄 SSO 認証フロー(図解)
sequenceDiagram
actor ユーザー
participant ブラウザ
participant FastAPI
participant GoogleOAuth
participant MongoDB
ユーザー->>ブラウザ: 「Googleでログイン」クリック
ブラウザ->>FastAPI: /auth/google/login にアクセス
FastAPI->>GoogleOAuth: Googleの認証ページへリダイレクト
ユーザー->>GoogleOAuth: 認証とアクセス許可
GoogleOAuth->>FastAPI: /callback にリダイレクト(code付き)
FastAPI->>GoogleOAuth: ユーザープロファイル取得
GoogleOAuth-->>FastAPI: ユーザー情報(email, 名前, アバター)
alt 新規ユーザー
FastAPI->>MongoDB: ユーザー情報を保存
else 既存ユーザー
FastAPI->>MongoDB: ユーザー情報を取得
end
FastAPI->>FastAPI: JWT トークン生成
FastAPI-->>ブラウザ: access_token を返却
ブラウザ->>ユーザー: ログイン完了
🧾 MongoDB に保存されるユーザーデータ(例)
{
"username": "taro.yamada@gmail.com",
"email": "taro.yamada@gmail.com",
"full_name": "山田 太郎",
"avatar_url": "https://lh3.googleusercontent.com/...",
"sso_provider": "google",
"created_at": "2025-07-02T08:00:00Z"
}
🔐 JWT で API を保護する
ログイン後、以下のようにトークンを使用:
Authorization: Bearer <access_token>
保護されたルート例:
@router.get("/me")
async def me(current_user=Depends(get_current_user)):
return current_user
🚀 拡張可能なポイント
- Facebook や Microsoft アカウントにも対応可能
- トークンをフロントエンドに自動リダイレクト
- モバイルアプリ向け Deep Linking
- ロール/パーミッション管理の追加
✅ まとめ
この記事で実現したこと:
- 🔐 Google OAuth を使った SSO ログイン
- 🧠 JWT によるセキュアな認証
- 🗂 MongoDB にユーザープロファイルを保存
- ⚙ FastAPI での統合とルート保護
🏢 Simplico Co., Ltd. へご相談ください
私たち Simplico は、Python(FastAPI)、MongoDB、OAuth、JWT を活用したセキュアなバックエンド開発を専門としています。
API 認証基盤、企業向けSSO、または内製ツールの構築など、お気軽にご相談ください。
🌐 simplico.net にてお問い合わせをお待ちしております。
この投稿を Markdown や PDF 形式でダウンロードしたい場合は、お知らせください。ブログ用アイキャッチ画像もご用意可能です。
Get in Touch with us
Related Posts
- Simplicoで始めるタクシー配車アプリ開発:スケーラブル、安全、即スタート可能!
- 拡張性のあるEV充電ステーション管理システムのバックエンド設計 — Simplicoによる開発
- Odooで受注生産商品の複雑な価格設定をどう扱う?
- オーダーメイド商品を効率的に提供する「Made-to-Order」システムの作り方
- Agentic AIで業務を自動化・効率化:次世代の業務支援AIがもたらす変革
- 軽量EXFO管理パネルで光ファイバーテスト業務を効率化
- MEEPとPythonで実現するEMI対策
- Wazuhでサイバーセキュリティを強化
- OCPP中央管理システム + モバイルアプリ 提案書
- TAKシステムが変える国境警備の最前線
- ChatGPT‑4o vs GPT‑4.1 vs GPT‑4.5 ― どのモデルを使うべきか?
- クライアントはサーバーのプライベートキーなしでデータを復号できるのか?(結論:できません — 理由はこちら)
- 複数フレームワーク間でのJWT認証の管理
- FastAPI と Alpine.js で EXFO テスター管理パネルを軽量構築する
- WazuhでCiscoネットワーク機器を監視する:完全ガイド
- FastAPI を使ってモバイルアプリと OCPP EV 充電システムを連携する方法
- MEEPとPythonを使った海軍艦艇トップデッキ上のEMC/EMI結合のシミュレーション
- チームアウェアネスキット (TAK) の仕組み リアルタイム状況技術の全貌
- ECサイトとモバイルアプリをAIチャットボットと統合して構築する方法 – フルカスタム開発でビジネスを加速
- あなたのショップにパーソナライズされたレコメンド機能が登場!