メインコンテンツまでスキップ

Socialログイン(外部IdP連携)

← 導入ガイドに戻る


Google等の外部サービスのアカウントを使ったログイン機能を提供します。

パスワード認証と併用でき、ユーザーは好きな方法でログインできます。


概要図

┌─────────────────────────────────┐
│ あなたのアプリ(トップページ) │
│ │
│ ┌─────────────────┐ │
│ │ [ログイン] │ ← クリック │
│ └─────────────────┘ │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ ログイン画面 │
│ │
│ ┌─────────────────────┐ │
│ │ [Googleでログイン] │ │
│ └─────────────────────┘ │
│ │
│ または │
│ │
│ メールアドレス: [__________] │
│ パスワード: [__________] │
│ [ログイン] │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ Googleの認証画面 │
│ │
│ 「○○アプリにログイン」 │
│ アカウントを選択してください │
│ │
│ user@gmail.com │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ あなたのアプリ(ログイン完了) │
│ │
│ ようこそ、○○さん │
└─────────────────────────────────┘

バックエンドの処理フロー

ユーザー          あなたのアプリ        idp-server           外部IdP(Google等)
│ │ │ │
│ ログインクリック │ │ │
│ ────────────────→│ │ │
│ │ 認可リクエスト │ │
│ │ ────────────────→│ │
│ │ │ 外部IdPへリダイレクト │
│ ←─────────────────────────────────────────────────────────→│
│ │ │ │
│ │ │ 認証コード受信 │
│ │ │ ←────────────────────│
│ │ │ │
│ │ │ ユーザー情報取得 │
│ │ │ ────────────────────→│
│ │ │ │
│ │ │ プロフィール情報 │
│ │ │ ←────────────────────│
│ │ │ │
│ │ トークン発行 │ │
│ │ ←────────────────│ │
│ ログイン完了 │ │ │
│ ←────────────────│ │ │

できること

外部サービスアカウントでのログイン

ユーザーが持っている既存のアカウントでログインできます。新しいパスワードを覚える必要がありません。

  • SNSアカウント: Google、Apple 等
  • エンタープライズアカウント: Azure AD、Okta 等
  • カスタムOIDCプロバイダー: 自社の別サービス等

パスワード認証との併用

パスワード認証とSocialログインを同時に提供できます。

  • ユーザーが好きな方法を選択
  • パスワードなしでSocialログインのみも可能
  • 外部サービス障害時のフォールバックとしてパスワード認証を残すことも可能

ユーザー情報の自動取得

外部サービスからプロフィール情報を自動取得します。

  • 氏名、メールアドレス、プロフィール画像
  • userinfo_mapping_rules で取得した情報を idp-server のユーザー属性にマッピング
  • 取得する情報の範囲(スコープ)を設定可能

マルチテナント対応

テナントごとに異なるSocialログイン設定を提供できます。

  • テナントAは「Google + パスワード」
  • テナントBは「Azure AD のみ」
  • テナントCは「パスワードのみ(Socialなし)」

導入時に決めること

1. どの外部サービスを使うか

選択肢説明向いているケース
Google最も普及率が高い一般消費者向けサービス
AppleiOS/macOS ユーザー向けApple エコシステムのサービス
Azure ADMicrosoft 365 連携企業向けサービス
カスタムOIDC任意の OIDC プロバイダー自社グループ内 SSO

idp-serverでの設定:

  • フェデレーション設定で外部IdPの情報(Client ID/Secret、エンドポイント)を登録
  • クライアントにフェデレーション設定を紐付け

2. パスワード認証との関係

選択肢説明向いているケース
両方を併用ユーザーが選択可能幅広いユーザー層
Socialのみパスワード認証を提供しないシンプルさ重視
Social推奨Socialログインを目立たせ、パスワードも残す移行期

idp-serverでの設定:

  • 認証ポリシーで利用可能な認証方式を定義
  • フェデレーション設定の有無で制御

3. ユーザー情報の取得範囲

決めること選択肢の例
基本情報氏名、メールアドレス(openid profile email
追加情報電話番号、住所等
マッピングルール外部サービスのフィールド名 → idp-server のフィールド名

idp-serverでの設定:

  • フェデレーション設定の scopes で要求する情報の範囲を指定
  • userinfo_mapping_rules で外部サービスのレスポンスを idp-server のユーザー属性にマッピング

4. 既存アカウントとの紐付け

外部サービスログインでは、常に新規アカウントとして作成されます。

  • 外部サービスごとに別々のアカウントとして扱われる
  • 既存のパスワード認証アカウントとの自動紐付けは行われない

5. Google OAuth の事前準備

Google を使う場合、Google Cloud Console での設定が必要です。

  1. Google Cloud Console でプロジェクトを作成
  2. 「APIとサービス」→「認証情報」→「OAuth クライアント ID」を作成
  3. アプリケーションの種類: 「ウェブアプリケーション」
  4. 承認済みのリダイレクト URI に以下を追加:
    {AUTHORIZATION_SERVER_URL}/{PUBLIC_TENANT_ID}/v1/authorizations/federations/oidc/callback
  5. Client ID と Client Secret を取得

まとめ

Socialログインを導入する際の重要なポイント:

必ず決めること

  1. 外部サービスの選択: Google、Apple、Azure AD、カスタムOIDC
  2. パスワードとの関係: 併用、Socialのみ、Social推奨
  3. ユーザー情報の取得範囲: 基本情報のみ、追加情報も
  4. マッピングルール: 外部サービスのフィールドと idp-server の対応

idp-serverが提供すること

  • OIDC フェデレーション(外部IdP連携)
  • ユーザー情報の自動取得とマッピング
  • パスワード認証との併用
  • マルチテナント対応(テナントごとの外部IdP設定)
  • セッション管理(SSO、有効期限)

自分で実装すること

  • ログイン画面(Socialログインボタンの配置)
  • 外部サービスの開発者アカウント登録・OAuth クライアント作成
  • 取得した情報の活用(プロフィール表示等)

セキュリティの注意点

  • 外部サービスの障害時に備え、パスワード認証も併用推奨
  • リダイレクト URI は正確に設定(オープンリダイレクト防止)
  • 取得する情報は最小限に(プライバシー配慮)

テンプレートで試す

ローカル環境ですぐに試せるテンプレートが用意されています。

cd config/templates/use-cases/login-social

# Google OAuth の設定が必要
GOOGLE_CLIENT_ID=<your-id> GOOGLE_CLIENT_SECRET=<your-secret> ./setup.sh

セットアップ後の動作確認は VERIFY.md を参照してください。

ソーシャルログイン(Google)はブラウザでの操作が必要なため、verify.sh ではパスワードベースのフローのみ検証されます。

詳細: config/templates/use-cases/login-social/

関連ドキュメント


最終更新: 2026-03-13