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
- Pythonでマルチマーケット株式ブレイクアウトスクリーナーを作る
 - Agentic AI と MCP サーバー:インテリジェント・オートメーションの次なる進化
 - Django + DRF + Docker + PostgreSQL を使った EC システムにおける DevOps の活用
 - AIがアジャイル開発の課題をどのように解決するか
 - TAKとWazuhを連携し、リアルタイムの脅威認識を実現する
 - Wazuhによるマルチサイト・ネットワークセキュリティ監視のスケーリング
 - なぜERPプロジェクトは失敗するのか ― 成功のための10のポイント
 - テクノロジーで強いコミュニティをつくる方法
 - AIがオープン動物園をもっと楽しく、スマートで学びのある場所に変える
 - 工場スクラップのための最適なリサイクル工場を選ぶ方法
 - 現代のデータベース技術を理解する — 最適なデータベースの選び方
 - エッジが未来を変える — 2025年に知っておきたい Edge & Distributed Computing
 - NVIDIAと2つの波:クリプトからAIへ ― バブルを乗りこなす芸術
 - 手動からAI主導の航空電子メンテナンスへ
 - Excelテンプレートから検査証明書を自動生成するシステム
 - SimpliPOS(COFF POS):カフェのために設計されたシンプルで使いやすいPOSシステム
 - Alpine.jsで作るローカルファーストWebアプリ — 高速・プライバシー重視・サーバーレス
 - 🌍 Carbon Footprint Calculator(リサイクル版)— リサイクルによるCO₂削減量を見える化
 - Recycle Factory Tools — リサイクル業務をもっとシンプルに
 - ランニングフォーム・コーチ — メトロノーム/タッパー/ドリルタイマー/姿勢チェック
 

          











