Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜

Avatar for Daiki Murayama Daiki Murayama
September 30, 2026

ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜

2026年9月30日「SaaS Harbor ─ マルチテナントSaaSのインフラアーキテクチャ設計」での登壇資料です。
https://saas-harbor.connpass.com/event/405903/

ログラスのプロダクトは、大企業のグループ会社で使われることが多くあります。
そこでは同じ人が複数のテナントに所属し、会社ごとに IdP や認証の統制が違います。

このスライドでは、こうした要件にマルチテナント SaaS としてどう応えるかを紹介します。

Avatar for Daiki Murayama

Daiki Murayama

September 30, 2026

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 村⼭ ⼤貴 Daiki Murayama 株式会社ログラス 技術本部 技術基盤部 プロダクト基盤チーム /

    エンジニア トヨタ⾃動⾞で、カーナビ向けミドルウェアの開発に3年ほど携わる フリーでは、認証認可/契約管理基盤の開発から基盤領域の組織マネジメントまでを担当 現在はログラスで、マルチプロダクトを⽀える基盤の設計‧構築などをリード © 2026 Loglass Inc. 2
  2. 01 マルチテナント SaaS に求められること グループ会社では、会社(テナント)ごとに求める認証統制が違う 顧客グループ Loglass ⼦会社 X IdP

    B(例: Okta) ⼦会社 X テナント IdP B で SAML @group.example 1 SAML 必須(IdP B) 社員 2 3 親会社 IdP A で SAML @group.example IdP A(例: Entra ID) 社員 SAML必須(IdP A) 経営企画 ⼦会社 Y パスワード + MFA @y.example(別ドメイン) IdP なし 1 同じドメインでも IdP が違う 親会社テナント ⼦会社 Y テナント パスワード 社員 2 1⼈が複数テナントに所属する IP 制限 MFA 必須 3 統制要件もテナントごとに違う IdP(Identity Provider):社員のアカウントと認証を会社で⼀元管理し、SSO で各サービスへのログインを統制するサービス © 2026 Loglass Inc. 8
  3. 01 マルチテナント SaaS に求められること SAML 必須のテナントには、IdP アカウントを持たない委託先も参加する Loglass パスワードで⼊りたい 親会社テナント

    委託先‧監査法⼈ 顧客 IdP にアカウントなし SAML 必須(IdP A) IdP A で SAML 親会社の社員 ⼦会社 X テナント IdP B で SAML SAML 必須(IdP B) ⼦会社 X の社員 © 2026 Loglass Inc. 9
  4. 01 マルチテナント SaaS に求められること テナントの統制を守ったうえで、以下の項⽬に応える必要がある 1 テナント統制 テナントが決めた SAML 必須‧IP

    制限‧MFA を、必ず守れるか 2 外部ユーザ IdP にアカウントのない⼈を、統制を崩さずに⼊れられるか 3 ログインUX 複数テナントに所属する⼈が、ログインし直さずにテナントを移れるか 4 運⽤コスト 会社が増えても、ログインの⼊⼝や設定が増え続けないか 5 内部コスト IDaaS の課⾦対象となるアクティブユーザーが、想定以上に増えないか © 2026 Loglass Inc. 10
  5. 02 3つの選択肢と選んだ理由 A) 元々は、Auth0 がメールドメインで IdP を振り分ける構成だった 各プロダクト(FE + BE)

    Auth0 Universal Login 経営管理 Post-Login Actions OIDC / JWKS ユーザー(所属テナントの情報も保持) HTTPS 顧客 IdP A ⼈員計画 SAML connection ユーザー Home Realm Discovery で振り分け AI IR 顧客 IdP B SAML 連携(信頼関係) Management API ほか gRPC 内部テナント管理サービス テナント‧ユーザー管理だけを切り出して共通化 HRD(Home Realm Discovery):ログイン時に、メールアドレスのドメインから使う IdP を選ぶ Auth0 の機能 © 2026 Loglass Inc. 13
  6. 02 3つの選択肢と選んだ理由 A) HRD は、1つのドメインに1つの IdP しか割り当てられない ✓ SAML connection

    IdP A 親会社テナント Home Realm Discovery (HRD) IdP A で⼊るしかない メールドメイン [email protected] group.example ✕ ✕ 1ドメイン=1 connection SAML connection IdP B ⼦会社 X テナント (IdP B で⼊りたい) 同じドメインには割り当てられない © 2026 Loglass Inc. 14
  7. 02 3つの選択肢と選んだ理由 A) ⼀時的に会社専⽤のログイン画⾯を作成し 、複数での IdP に対応 親会社のテナントへ 共通ログイン画⾯ Home

    Realm Discovery IdP A メールドメインで振り分け taro ⼦会社 X のテナントへ 親会社の経営企画 専⽤のログイン URL 組織を指定 IdP B Auth0 の組織を指定して IdP に直⾏ • 同じ taro さんでも、親会社は共通のログイン画⾯、⼦会社 X は専⽤のログイン URL から⼊る • ログインした画⾯で IdP が決まるため、IdP の違うテナントへはログインし直さないと移れない © 2026 Loglass Inc. 15
  8. 02 3つの選択肢と選んだ理由 B) テナントごとにアカウントを分けると、様々な⼿間が発⽣する 親会社テナント⽤のアカウント SAML (IdP A) ⼦会社 X

    テナント⽤のアカウント taro 1 テナントを移るたびに ログインし直す必要がある 2 アカウントの発⾏と管理が テナントの数だけ要る 3 アクティブユーザーが 所属の数だけ増える SAML (IdP B) 親会社の経営企画 ⼦会社 Y テナント⽤のアカウント パスワード + MFA © 2026 Loglass Inc. 16
  9. 02 3つの選択肢と選んだ理由 C) 1つのアカウントのまま、テナントに対して不⾜した認証だけ追加で求める 親会社テナント ✓ 使える SAML 必須(IdP A)

    共通のログイン画⾯ taro 親会社の経営企画 IdP A で1回ログイン ⼦会社 X テナント SAML 必須(IdP B) IdP B の認証だけ 追加で求められる ✓ © 2026 Loglass Inc. 使える 17
  10. 02 3つの選択肢と選んだ理由 Cであれば、 テナントの統制を守ったうえで、各要求に応えられる A 会社ごとの B テナントごとに C テナントに対して

    ログイン画⾯(これまで) アカウントを分ける 不⾜した認証だけ求める 認証統制 △ 画⾯ごとにしか決められない 外部ユーザ × このニーズに対応できなかった ログインUX × テナントを移るたびにログイン × テナントを移るたびにログイン 運⽤コスト × 会社ごとに専⽤の画⾯が必要 × テナントごとにアカウントが必要 内部コスト ◦ ◦ ◦ 個別のアカウントで⼊れる × 所属の数だけ増える ◦ アクセス先のポリシーで判定 ◦ ポリシーに認証⽅式を⾜す ◦ ⾜りない認証だけ追加で求める ◦ 共通のログイン画⾯1つ ◦ © 2026 Loglass Inc. 18
  11. 03 Step-up 認証による実現 アクセスのたびに認証の過不⾜を判定し、⾜りない分だけ求める 判定 テナントへの リクエスト このテナントに必要な認証を 満たしているか 充⾜

    リソースに アクセスできる 不⾜ 追加の認証 ⾜りない認証だけ その場で求める 状態の記録 追加で認証したことを セッションに記録 必要な認証はテナントのポリシーで決まり、委託先などにはメンバー単位で認証⽅式を⾜せる © 2026 Loglass Inc. 20
  12. 03 Step-up 認証による実現 追加の認証を求める⽅法は、RFC 9470(Step-up Auth)で標準化されている 前提:クライアントは、通常の認証で取得したアクセストークンにより、普段のリソースを使えている クライアント リソースサーバー(RS) 認可サーバー(AS)

    ① より強い認証が要るリソースを呼ぶ ② acr / auth_time が⾜りないと判断 ③ 401 Unauthorized WWW-Authenticate: Bearer error="insufficient_user_authentication", acr_values="…" / max_age=… ④ acr_values / max_age を付けて認可リクエスト ⑤ 認証し直し、新しいトークン(acr / auth_time ⼊り)を返す ⑥ 新しいトークンでやり直す(通る) acr(Authentication Context Class Reference):満たした認証の種類、auth_time:認証した時刻 acr_values:リソースが求める認証の種類、max_age(Maximum Authentication Age):前回の認証から許容する経過時間(秒) 出典: https://www.rfc-editor.org/rfc/rfc9470.html © 2026 Loglass Inc. 21
  13. 03 Step-up 認証による実現 Loglassでは、API Gateway を介して 認証基盤が判定 する⽅式を選択 各プロダクト API

    内部 JWT(アクセス先テナントを1つだけ含む) 経営管理 ⼈員計画 AI IR ほか API Gateway ユーザー 判定 認証基盤 OIDC ユーザー‧所属‧ポリシー 内部 JWT テナントごとの認証状態 Auth0 パスワード認証‧SAML 連携 Mgmt API SAML 連携 判定して内部 JWT を発⾏ 顧客 IdP ログイン‧Step-up のときは、ブラウザのリダイレクトにより、Auth0 経由で顧客 IdP にアクセスする © 2026 Loglass Inc. 22
  14. 03 Step-up 認証による実現 ⾜りない認証があれば、アクセスした時点で Step-up を求める ブラウザ API Gateway 認証基盤

    Auth0 ⼦会社 X の IdP ① ⼦会社 X テナントの アクセス ② 判定 ③ acr が⾜りない ④ 401 ⑤ Step-up 開始 ⑥ リダイレクトで SAML 認証(IdP B を指定) ⑦ コード → ID Token ⑧ セッションに記録 ⑨ 元の画⾯へ戻る ⑩ 再リクエスト → 通過 © 2026 Loglass Inc. 23