エンタープライズ向け健康・ウェルネスプラットフォームのためのOkta SSO & SCIM連携
エンタープライズ向けの健康・ウェルネス SaaS プラットフォームは、従業員のシームレスなアクセスと SCIM を介した自動ユーザープロビジョニング/プロビジョニング解除のためにシングルサインオン(SSO)を要求する大規模な組織顧客をサポートする必要がありました。これはエンタープライズセールスにとって譲れない要件でした。
プロジェクトを相談する
課題
エンタープライズ顧客は、IDフェデレーションと自動ライフサイクル管理なしにはプラットフォームの採用を拒否しました:
- SSO要件 — IT部門は、従業員が個別の資格情報ではなく、企業IDプロバイダーを介してログインすることを義務付けました
- 手動オンボーディングの負担 — 新しい組織が登録した際に数百人の従業員を手動で追加するには、数日間の管理作業が必要でした
- オフボーディングのリスク — 従業員が組織を離れた際、プラットフォームアカウントが数週間にわたってアクティブなままであり、コンプライアンスとデータアクセスに関する懸念が生じました
- グループベースのアクセス — 異なる従業員グループには、異なる機能ティアとプログラムアクセスが必要でした
- マルチテナントの複雑さ — 各エンタープライズ顧客は、異なる設定、属性マッピング、およびグループ構造を持つ独自のアイデンティティプロバイダーテナントを持っていました
- 既存の認証との共存 — プラットフォームにはすでにメール/パスワードおよび OAuth ベースの認証がありましたが、SSO は既存のフローを壊すことなく共存する必要がありました
私たちのソリューション
既存のマルチテナントバックエンドに統合された形で、認証には SAML 2.0/OIDC を介した Okta SSO を、自動ユーザープロビジョニング、プロビジョニング解除、およびグループ同期には SCIM 2.0 を実装しました。
アーキテクチャ
- アイデンティティプロバイダー: Okta (顧客管理テナント)
- SSOプロトコル: SAML 2.0 (プライマリ) + OIDC (代替)
- プロビジョニング: プラットフォームバックエンドに組み込まれた SCIM 2.0 サーバー
- バックエンド: PostgreSQL および Redis を使用した NestJS
- 認証レイヤー: SSO対応のトークン発行を伴う JWT ベースのセッション
- 管理者ダッシュボード: SSO セットアップ用の React ベースのテナント構成
- 既存の認証: SSO と並行してメール/パスワード + Google OAuth を維持
---
SSO実装 (SAML 2.0 / OIDC)
SAML 2.0 フロー
SP開始の SAML フローは次のとおりです。ユーザーはログインページにアクセスして SSO を選択し、会社のメールアドレスのドメインを入力します。プラットフォームはドメインからテナントの Okta 設定を識別し、AuthnRequest を Okta に送信します。ユーザーが認証すると、Okta は署名された SAML アサーションを返します。プラットフォームはアサーションを検証し、JWT トークンでセッションを作成します。
テナントごとの設定
各テナントの SSO は、IDプロバイダーの SSO URL、エンティティID、署名検証用の X.509 証明書、およびプラットフォームの SP エンティティID、アサーションコンシューマーサービス URL、IDプロバイダープロファイルフィールドからプラットフォームユーザーフィールドへの属性マッピングとともに設定されます。
OIDC の代替
SAML よりも OIDC を好む顧客向けに、プラットフォームは PKCE を伴う Authorization Code フローをサポートしており、OIDC クレームを介した同じ属性マッピングと JWKS を使用した ID トークン検証を利用します。
マルチテナント SSO ルーティング
プラットフォームは、ユーザーのメールアドレスのドメインに基づいて、適切なアイデンティティプロバイダーにルーティングします。ユーザーがメールアドレスを入力すると、プラットフォームはテナントの SSO 設定に対してドメインを検索します。SSO が設定されている場合、ユーザーは所属組織の Okta テナントにリダイレクトされます。設定されていない場合は、メール/パスワードまたは Google OAuth にフォールバックします。直接 SSO アクセスのためのバニティ URL もサポートされています。 ---
SCIM 2.0 実装
SCIM サーバー
プラットフォームは、Okta がユーザーとグループを管理するために呼び出す SCIM 2.0 準拠の API を公開しています。この API は、ユーザーの完全なライフサイクル操作(作成、読み取り、更新、無効化、削除)、メンバーシップ管理を伴うグループの CRUD、および機能、スキーマ、リソースタイプのための標準 SCIM ディスカバリエンドポイントをサポートしています。
SCIM を介したユーザーライフサイクル
プロビジョニング:管理者が Okta でユーザーをプラットフォームアプリに割り当てると、Okta は SCIM API に作成リクエストを送信します。プラットフォームはテナントとの関連付けを持つユーザーアカウントを作成し、アクティブかつ SSO プロビジョニング済みとしてマークし、ユーザーはすぐに SSO を介してログインできます。
プロファイル更新:管理者が Okta でユーザーのプロファイルを更新すると、変更は SCIM を介してプラットフォームにプッシュされます。部署が変更された場合、グループメンバーシップは自動的に再評価されます。
プロビジョニング解除:Okta でユーザーがアプリから削除されると、プラットフォームはアカウントを無効化します — すべてのアクティブなセッションを直ちに失効させ、それ以上のログインを防ぎ、保持ポリシーに従ってデータを保持し、ライセンスシートを解放します。
再アクティブ化:Okta でユーザーを再割り当てすると、すべての履歴データを保持したままアカウントが再アクティブ化されます。
グループ同期
Okta グループは、プラットフォームのロールとプログラムティアにマッピングされ、異なる機能レベル、管理者機能、専門ダッシュボード、および排他的プログラム登録へのアクセスを制御します。Okta でのグループメンバーシップの変更は SCIM を介してプッシュされ、再ログインを必要とせずにリアルタイムで反映されます。 ---
セキュリティと認証
SSO後のトークン発行
SAML アサーション検証後、プラットフォームは、ユーザーID、組織、ロール(SCIM グループメンバーシップから派生)、認証方法、およびアイデンティティプロバイダーに関するクレームを含むテナントスコープの JWT を発行します — これにより、SSO と他の認証方法との監査上の区別が可能になります。
セッション管理
- SSOセッションは Okta のセッションライフタイムを尊重します
- ユーザーが Okta からログアウトした際のセッション終了のためのシングルログアウト (SLO) をサポート
- 即時セッション失効のためのバックチャネルログアウト Webhook
- SCIM 無効化は、すべてのアクティブセッションを60秒以内に失効させます
セキュリティ管理
- テナントの X.509 証明書に対する SAML レスポンス署名検証
- ワンタイム使用追跡によるアサーションリプレイ防止
- アサーションタイムスタンプ検証のためのクロックスキュー耐性
- オーディエンス制限検証
- 機密性の高いデプロイメント向けに暗号化されたアサーションをサポート
- テナントごとの Bearer トークンを介した SCIM エンドポイント認証
- SCIM エンドポイントでのレート制限
---
管理者設定ダッシュボード
テナント SSO セットアップ
管理者ダッシュボードは、セルフサービスセットアップフローを提供します:
- プロトコル選択 — SAML 2.0 または OIDC を選択
- メタデータアップロード — IdP メタデータ XML をアップロード(設定を自動入力)
- 属性マッピング — IDプロバイダープロファイルフィールドをプラットフォームユーザーフィールドにマッピング
- ドメイン検証 — SSO ルーティングのためにメールアドレスドメインの所有権を検証
- 接続テスト — 全ユーザー向けに有効にする前にテスト SSO ログインを開始
- SCIM セットアップ — SCIM プロビジョニング設定用の Bearer トークンを生成
- グループマッピング — IDプロバイダーグループをプラットフォームのロールとティアにマッピング
ダッシュボードは、IDプロバイダーアプリの簡単な設定のためにダウンロード可能な SP メタデータも提供します。---
主要機能
- SAML 2.0 + OIDC サポート — テナントごとの柔軟なプロトコル選択
- SCIM 2.0 プロビジョニング — 自動ユーザー作成、更新、および無効化
- グループからロールへのマッピング — IDプロバイダーグループがプラットフォームのアクセスティアとプログラムを制御
- 即時プロビジョニング解除 — SCIM 無効化により、60秒以内にアクセスが失効
- マルチテナント SSO ルーティング — テナント全体にわたるメールアドレスドメインベースの IdP ディスカバリ
- 共存する認証方法 — メール/パスワードと Google OAuth と並行する SSO
- セルフサービスセットアップ — エンジニアリングサポートなしで SSO 設定を行う管理者ダッシュボード
- シングルログアウト — ユーザーが IDプロバイダーからログアウトするとプラットフォームセッションが終了
- 監査証跡 — すべての SCIM 操作と SSO イベントがコンプライアンスのために記録されます
- SCIM グループ同期 — IDプロバイダーグループメンバーシップからのリアルタイムのロールおよびプログラム変更
成果
技術スタック
caseStudyDetail.more ケーススタディ
その他の技術実装事例をご覧ください
AIを活用したOCRによる請求書処理とQuickBooks連携
毎月数百件の仕入先請求書を処理する中規模企業が、AI/OCRを使用して請求書データを自動抽出し、それを記帳と支払追跡のためにQuickBooksに直接同期させることで、手動データ入力を排除する必要がありました。
SCTE-35マーカー解析とマルチプラットフォームプレイヤー統合によるクライアントサイド広告挿入 (CSAI)
あるビデオストリーミングプラットフォームは、ウェブ、モバイル、コネクテッドTVアプリ全体でクライアントサイド広告挿入 (CSAI) を実装する必要がありました。これにより、サーバーサイド挿入では提供できない、完全な広告インタラクションサポート(クリック可能なオーバーレイ、コンパニオンバナー、スキップボタン)を備えた、パーソナライズされたデバイスレベルの広告体験が可能になります。
よくある質問
MicrocosmWorksは、Oktaとヘルス&ウェルネスプラットフォーム間で自動的なユーザープロビジョニングとデプロビジョニングを可能にするために、SCIM 2.0プロトコルを実装しました。これにより、IT adminsがOktaのディレクトリでユーザーを追加、変更、または削除すると、それらの変更は数秒以内にアプリケーションに伝播します。これは、かつてIT teamsがサポートチケットを通じて処理していた手動でのアカウント作成、権限更新、およびオフボーディングタスクを不要にし、アクセス管理のオーバーヘッドを約90%削減します。
MicrocosmWorksは、Oktaグループのメンバーシップをアプリケーションレベルのロールと権限に変換する設定可能なロールマッピングレイヤーを構築しました。これは、直接的なグループからロールへのマッピングと、複数のグループメンバーシップを組み合わせる複雑なルールの両方をサポートしています。ユーザーのOktaでのグループメンバーシップが変更されると、SCIM連携がアプリケーションの権限をリアルタイムで更新し、システムは監査コンプライアンスのためにすべての権限変更をログに記録します。
MicrocosmWorksは、SCIMのプロビジョニング解除イベントを監視し、無効化されたユーザーのすべてのアクティブなセッションを、すべてのデバイスとブラウザで直ちに無効化するリアルタイムのセッション取り消し機能を実装しました。システムはトークンの有効期限切れを待機せず、Oktaイベント発生後、数秒以内にセッションストアへ積極的に取り消しをプッシュします。これは、従業員が解雇され、直ちにアクセス削除が必要な場合のセキュリティコンプライアンスにとって極めて重要です。
はい、MicrocosmWorksは、Oktaのルーティングルールを通じて複数の同時IDプロバイダーをサポートするように認証レイヤーを設計しました。これにより、異なる企業ディレクトリのユーザーが、同じアプリケーションインスタンスにアクセスしながら、それぞれのIdPを通じて認証できるようになります。これは、合併された組織が個別のActive Directoryドメインを維持するM&A移行期間において不可欠であり、システムはIdP間の属性マッピングの違いを透過的に処理します。
MicrocosmWorksは、Okta SSOとSCIMの統合を1時間あたり25ドルから45ドルのレートで実装します。標準的な統合にかかる期間は3〜6週間で、これはrole mappingの複雑さや、同期する必要がある既存のuser attributesの数によって異なります。この投資は、手動によるユーザー管理の継続的なコストや、アクセス取り消し遅延によるセキュリティリスクに比べ、ごく一部に過ぎず、多くの場合、エンタープライズセールス契約を締結するための要件となります。