identity & security

ソーシャルログインからエンタープライズSSOへの移行、開発者向けハイブリッド認証ガイド

Auth0 Organizationsと自動ユーザー管理用のSCIMを使用して、SaaSをソーシャルログインからエンタープライズSSOに移行する方法を解説します。

本記事は「Moving From Social Login to Enterprise SSO, a Hybrid Auth Guide」を翻訳した記事です。

新しいSaaS製品を構築する際、「Googleでログイン」のような馴染みのあるソーシャルログインオプションから始めるのが一般的です。個人ユーザーにはうまく機能しますが、ユーザーを個別の個人ではなく単一の企業アカウントで管理するエンタープライズクライアントを獲得する際に大きな障害となります。エンタープライズクライアントは、OktaやMicrosoft Entra IDなどのIdentity Provider(IdP)によって管理される既存の企業認証情報を使用して、従業員がアプリケーションにアクセスすることを求めます。独自のアクセスポリシーを適用するための標準的なセキュリティ要件です。

既存のソーシャルログインと並行して、新しいSecurity Assertion Markup Language(SAML)またはOpenID Connect(OIDC)ログインオプションを単に追加するのは、アーキテクチャ上の間違いです。統一されたアイデンティティ戦略がないと、企業メール(jane@bigcorp.com)でサインインする従業員が、同じメールアドレスを使用して個人のGoogleアカウントで以前サインアップした人物と同一であることをアプリケーションは認識しません。断片化されたユーザーエクスペリエンスを生み出し、データと権限が2つの切断されたアカウント間で分割され、ユーザーのアプリケーション機能が損なわれます。

スケーラブルでエンタープライズ対応の製品を構築するには、アプリケーションで顧客が独自のユーザーベースを持ち込めるようにする必要があります。3つの異なるアイデンティティ管理の課題を解決する必要があります。

  1. マルチテナントフェデレーション: 複数の外部IdPと接続し、ユーザーを親組織に正しく関連付けるようにシステムを設計します。
  2. アイデンティティのリンク: データを失うことなく、既存のユーザーをソーシャルログインから企業アイデンティティに移行するシームレスなプロセスを作成します。
  3. 自動化されたライフサイクル管理: System for Cross-domain Identity Management(SCIM)プロトコルを使用して、従業員が顧客の企業に入社、役割の変更、または退社する際に、従業員のアクセスを自動的にプロビジョニングおよびプロビジョニング解除します。

本記事では、Auth0を使用して安全なハイブリッド認証アーキテクチャを設計する方法を解説します。Organizationsがマルチテナントフェデレーションをどのように処理するか、アイデンティティのリンクがソーシャルプロファイルと企業プロファイルをどのように統合するか、SCIMがユーザーライフサイクル管理をどのように自動化するかを説明します。記事の最後まで読むと、アーキテクチャのオーバーヘッドなしで、安全でシームレスなエンタープライズログインエクスペリエンスを提供するための明確な戦略が得られます。

Auth0 Organizationsはフラットなユーザー構造からどのようにマルチテナンシーを可能にするか?

コンシューマーアプリ(B2C)はすべてのユーザーを同じように扱いますが、B2Bクライアントはデータを安全に保つためにテナント分離(ある顧客のデータとユーザーを他のすべての顧客から論理的に分離すること)を要求します。クライアントが一部の従業員にはOkta経由のシングルサインオンを使用させ、他の従業員にはGoogleのようなソーシャルログインを使用させたい場合、複雑になります。Auth0のOrganizations機能は、まさにこのようなシナリオのために設計されています。

「Organization」を各ビジネスカスタマーのコンテナと考えてください。単一の顧客に対して、企業IdP(Oktaなど)、ソーシャルログイン(Googleなど)、管理するデータベース、または独自のユーザーデータベースへの接続など、ログイン方法の任意の組み合わせを有効にできます。

主な利点は統一された可視性です。ユーザーがどのように認証するかに関係なく、Auth0はユーザーが顧客のOrganizationに属していることを認識します。クライアントに関連付けられたすべてのユーザーの単一のビューを提供し、重複するアカウントを排除してアプリケーションコードを簡素化します。

すべての接続タイプは、Auth0テナントレベルまたはOrganizationレベルでグローバルに適用できます。

  • ソーシャル接続: 外部または柔軟なユーザーアクセスのために、コンテナにソーシャルログイン(Googleなど)を追加します。
  • エンタープライズ接続(EC): エンタープライズグレードのセキュリティ要件を満たすために、コンテナを企業IdP(Oktaなど)にリンクします。
  • データベース接続: 特定のOrganizationコンテナ内に排他的に存在する、顧客管理のユーザーリストを作成します。

Organizationsを使用することで、「ユーザーはどの会社に属しているか」というロジックをアプリケーションデータベースからアイデンティティレイヤーに移動し、認可コードを簡素化します。

Home Realm Discoveryで「識別子ファースト」ログインフローを使用する方法

B2Bユースケースのアイデンティティを実装する際の最大の摩擦点の1つは、乱雑なログインユーザーインターフェース(UI)です。すべてのクライアントに「Acme Corpでログイン」ボタンを追加することはできません。ここで、識別子ファーストフローであるHome Realm Discovery(HRD)が不可欠になります。

仕組みの解説

アイデンティティ管理とユーザーエクスペリエンス(UX)設計において、Home Realm Discovery(HRD)は、ユーザーが認証に使用すべきIdPを決定するプロセスです。

識別子ファーストログインは、認証ハンドシェイクの順序を変更します。

Auth0における識別子ファーストログインフローの順序は以下の通りです。

  1. ドメイン評価: ユーザーがalice@acme.comを入力します。
  2. アカウント検索: アイデンティティレイヤーは、acme.comがアクティブなエンタープライズ接続を持つOrganizationにマッピングされているかを確認します。
  3. IdPリダイレクト: 一致が見つかった場合、ユーザーは正しいSAMLリクエストとともに企業IdP(Oktaなど)に自動的にリダイレクトされます。
  4. フォールバック: ドメインが一般的(@gmail.comなど)な場合、システムは標準のソーシャルまたはデータベースフローにデフォルト設定されます。

主な利点

  • 複数のIdPのサポート: 異なる顧客が異なるSSOプロバイダーを使用するB2Bアプリに不可欠です。
  • セキュリティ: システムは特定のレルムに有効なユーザーが存在することを確認した後にのみパスワードを要求するため、「パスワードスプレー」(セキュリティロックアウトポリシーを回避するために、多くの異なるユーザー名に対して一般的なパスワードをテストするブルートフォース攻撃)を防ぎます。
  • 適応型認証: 識別子が認識された直後に、システムがMFAまたは生体認証プロンプトをトリガーできるようにします。

識別子をパスワード入力から切り離すことで、新しいビジネスカスタマーを追加するにつれて動的にスケーリングする単一のクリーンなメール入力フィールドを通じて、何百ものエンタープライズクライアントをサポートできます。

JWT、アカウントリンク、SCIMを使用してデータモデルを管理する方法

バックエンドの状態管理は、継続的な手動検証を必要とするため複雑さを増します。すべてのAPIリクエストに対してテナントメンバーシップを確認するカスタムコードを記述すると、検証ロジックが失敗した場合にある顧客のデータが別の顧客に誤って公開される「テナントリーク」の高いリスクが生じます。

1. トークンの検証とコンテキスト(JWT)

認証をオフロードする際、フロントエンドはテナントID(Organization)を渡すことでコンテキスト対応のログインを開始します。

// Triggering a context-aware B2B login on the client
const handleB2BLogin = (orgId) => {
 loginWithRedirect({
   authorizationParams: {
     organization: orgId, // Injects the tenant ID into the auth request
     connection_scope: 'openid profile email'
   }
 });
};

バックエンドでは、APIがorg_idクレームを含む標準のJSON Web Token(JWT)を受け取ります。クレームはIdPによって暗号学的に署名されているため、ミドルウェアはテナンシーを確認するための追加のデータベース呼び出しをすることなく、ユーザーのテナントメンバーシップを信頼できます。ステートレスで高性能な認可レイヤーを構築できます。

2. アイデンティティの統合(アカウントリンク)

既存のB2Cユーザー(user@gmail.com)が会社の新しいSAML接続に切り替える必要がある場合、既存のデータを孤立させることなく新しいユーザーレコードを単に作成することはできません。アカウントリンクで解決します。APIを使用して新しい企業アイデンティティを元のユーザーレコードにリンクすることで、統一されたプロファイルを作成します。プライマリuser_idが保持され、データベース内のすべての外部キー関係がそのまま維持されます。

3. 自動プロビジョニング(SCIM)

エンタープライズクライアントの場合、IT部門はオンボーディングとオフボーディングを大規模に処理するためにSCIMを要求します。異なるWebhookペイロードを解析するためのカスタムバックエンドエンドポイントを構築する代わりに、管理されたアイデンティティレイヤーが標準化します。IT管理者が中央ディレクトリ(Microsoft Entra IDなど)でユーザーを非アクティブ化すると、SCIMプロトコルがイベントをIdPにプッシュし、ユーザーのアクセストークンを即座に取り消せます。ほとんどのB2B契約において交渉の余地のないセキュリティ要件です。

アイデンティティインフラストラクチャをゼロから構築するのをやめる

カスタムのマルチテナントルーティング、アカウントリンクロジック、SCIM準拠のAPIの構築は、コア製品からリソースをそらす大規模なエンジニアリング投資です。アイデンティティインフラストラクチャを専用プラットフォームにオフロードすることで、メンテナンスの負担とセキュリティリスクを排除します。

エンタープライズ接続、Organizations、SCIMは、B2Bセルフサービスプランで利用できる統合機能です。アップグレードすることで、四半期ではなくスプリント単位で問題を解決するためのAPIを利用できます。

  • コーディングを開始する準備はできましたか。 公式のAuth0 Samplesリポジトリで、本番環境に対応したB2B実装を確認してください。
  • アップグレードする準備はできましたか。 Auth0 DashboardにログインしてB2B機能を有効にし、最初のエンタープライズ接続のテストを今すぐ開始してください。

次のステップへ移りましょう!

適切な接続タイプを選択することは、アイデンティティプラットフォームをスケーリングするほんの一部にすぎません。成長は複雑さをもたらすことを理解しており、ナビゲートするお手伝いをします。

接続の混乱によってサクセスストーリーを遅らせないでください。製品チームとカスタマーアドボケイトチームは、ビジネスの成長に伴う成功を支援することに専念しています。プラン、接続、または成長戦略について質問がある場合は、遠慮なくcustomeradvocate@auth0.comまで連絡してください。