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
- 都道府県・市町村向けデジタルシステムのリファレンスアーキテクチャ
- 実践的GovTechアーキテクチャ:ERP・GIS・住民向けサービス・データ基盤
- なぜ緊急対応システムは Offline First で設計されるべきなのか(ATAK からの教訓)
- なぜ地方自治体のソフトウェアプロジェクトは失敗するのか —— コードを書く前に防ぐための考え方
- AIブームの後に来るもの:次に起きること(そして日本企業にとって重要な理由)
- システムインテグレーションなしでは、なぜリサイクル業界のAIは失敗するのか
- ISA-95 vs RAMI 4.0:日本の製造業はどちらを使うべきか(そして、なぜ両方が重要なのか)
- なぜローコードはトレンドから外れつつあるのか(そして何が置き換えたのか)
- 2025年に失敗した製品たち —— その本当の理由
- Agentic AI Explained: Manus vs OpenAI vs Google — 日本企業が知るべき選択肢
- AIが実現する病院システムの垂直統合(Vertical Integration)
- Industrial AIにおけるAIアクセラレータ なぜ「チップ」よりもソフトウェアフレームワークが重要なのか
- 日本企業向け|EC・ERP連携に強いAI×ワークフロー型システム開発
- 信頼性の低い「スマート」システムが生む見えないコスト
- GPU vs LPU vs TPU:AIアクセラレータの正しい選び方
- LPUとは何か?日本企業向け実践的な解説と活用事例
- ソフトウェアエンジニアのためのサイバーセキュリティ用語マッピング
- モダンなサイバーセキュリティ監視・インシデント対応システムの設計 Wazuh・SOAR・脅威インテリジェンスを用いた実践的アーキテクチャ
- AI時代におけるクラシック・プログラミングの考え方
- SimpliPOSFlex 現場の「現実」に向き合うためのPOS(日本市場向け)













