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. どの外部サービスを使うか
| 選択肢 | 説明 | 向いているケース |
|---|---|---|
| 最も普及率が高い | 一般消費者向けサービス | |
| Apple | iOS/macOS ユーザー向け | Apple エコシステムのサービス |
| Azure AD | Microsoft 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 での設定が必要です。
- Google Cloud Console でプロジェクトを作成
- 「APIとサービス」→「認証情報」→「OAuth クライアント ID」を作成
- アプリケーションの種類: 「ウェブアプリケーション」
- 承認済みのリダイレクト URI に以下を追加:
{AUTHORIZATION_SERVER_URL}/{PUBLIC_TENANT_ID}/v1/authorizations/federations/oidc/callback - Client ID と Client Secret を取得
まとめ
Socialログインを導入する際の重要なポイント:
必ず決めること
- 外部サービスの選択: Google、Apple、Azure AD、カスタムOIDC
- パスワードとの関係: 併用、Socialのみ、Social推奨
- ユーザー情報の取得範囲: 基本情報のみ、追加情報も
- マッピングルール: 外部サービスのフィールドと 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/
関連ドキュメント
- ログイン(パスワード認証) - パスワード認証の詳細
- How-to: 外部IdP連携
- Concept: フェデレーション
最終更新: 2026-03-13