Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
マルチテナントSaaSのカスタム要件に、 Auth0テナントを分割せず向き合う! / Mult...
Search
hiroga
August 10, 2022
Technology
3.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
マルチテナントSaaSのカスタム要件に、 Auth0テナントを分割せず向き合う! / Multi tenant SaaS with Auth0
hiroga
August 10, 2022
More Decks by hiroga
See All by hiroga
Lip Reading with LLMs? Visual Speech Recognition
hiroga
0
96
Gaussian Splatting Hands-on
hiroga
0
130
マルチモーダル理解と生成の統合 DeepSeek Janus, etc... / Multimodal Understanding and Generation Integration
hiroga
0
780
LlamaGen: LlamaのNext-Token予測を使った画像生成 / Autoregressive Model Beats Diffusion: Llama for Scalable Image Generation
hiroga
0
650
人事評価GPTsで評価の本質に向き合おう! / HR GPTs: Essential evaluations focus!
hiroga
1
490
生成AI元年を個人的に振り返る / Reflecting on First Year of the Generative-AI
hiroga
0
460
AWS Startup Day 2023 今日ここで! コスト削減ハンズオン / Cost-Saving Hands-On today!
hiroga
0
200
ChatGPT社内活用資料 / Internal use of ChatGPT
hiroga
0
200
雑な攻撃からELBを守る一工夫 +おまけ / Know-how to protect servers from miscellaneous attacks
hiroga
0
2.9k
Other Decks in Technology
See All in Technology
Essential architectural thinking (revised edition)
ufried
0
100
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
3
4.9k
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
640
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
210
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
0
400
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1.1k
SDDの運用にめげずに向き合った話
sansantech
PRO
1
140
継続的なAIコスト最適化
bgpat
1
230
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
go-sqletch
moznion
0
110
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
530
オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修
colopl
0
930
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
The agentic SEO stack - context over prompts
schlessera
0
970
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
300
Marketing to machines
jonoalderson
1
5.9k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
350
Balancing Empowerment & Direction
lara
6
1.3k
HDC tutorial
michielstock
2
950
How to train your dragon (web standard)
notwaldorf
96
6.9k
Transcript
\ 積極採用中 / @xhiroga(小笠原寛明) justInCase Technologies, Inc. マルチテナントSaaSのカスタム要件に、 Auth0テナントを分割せず向き合う! Okta
Study Meetup #4 「Auth0で実装する認証と認可」@ 2022-08-10
\ 採用中 / 目次 • ごあいさつ • なぜマルチテナントなのか • なぜAuth0なのか
• カスタム要件にAuth0テナントを分割せず向き合う ◦ 認証のカスタム要件 ◦ セキュリティのカスタム要件 ◦ 画面のカスタム要件 ◦ 開発と運用 • まとめ • おしらせ 1
\ 採用中 / ごあいさつ 自己紹介 2
\ 全職種採用中 / 3
\ 採用中 / ごあいさつ 日本初の商品を連発している保険会社です。 4
\ 採用中 / ごあいさつ そのノウハウを元に保険SaaSを提供しています。 5 顧客 保険会社* *事業会社や保険代理店 のご利用も可能
プラン選択 本人認証 告知・重要事項説明 会員資格確認 商品ページ(LP) & 申込フォーム 契約参照 異動・解約 決済 契約更新 お客様 ポータル 査定・承認 問合せ 提出書類の参照 (電子データ) 支払記録 保険金 請求フォーム
\ 採用中 / 会社紹介 保険業務をSaaSでなめらかにし、みなさんがよい保険にアクセスしやすいようにしています。 6
\ あなたと一緒に働きたい! / なぜマルチテナントなのか
\ 採用中 / なぜマルチテナントなのか 規模によらず、様々な保険会社のお客様に ご利用いただくため 8
\ あなたと一緒に働きたい! / なぜAuth0なのか
\ 採用中 / なぜAuth0なのか マルチテナントとは、リクエスト単位でアプリケーションを分割すること 10 {tenant_id: justincase} API DB
token なるほど、 justinacaseテナントとして 起動すればいいのか!
\ 採用中 / なぜAuth0なのか マイクロサービスでは、ID管理サービスには複数のアクセスがある 11 マイクロサービス1 マイクロサービス2 ID管理サービス token
トークン検証 複数のサービスが ID管理サービスにアクセス
\ 採用中 / なぜAuth0なのか 開発が大変 12 OAuth, OIDC準拠が大変 ログイン画面の開発が大変 MFA・IP制限などが大変
\ 採用中 / なぜAuth0なのか エンタープライズに耐えうるIDaaSを比較した 13 参考: 髙栁怜士. “認証サービスCognito・Auth0・Firebaseを比べる” https://techbookfest.org/product/6354233804718080.
Pros Cons Auth0 ドキュメント・SDK・ログイン画面が優れている。 リージョンで日本を指定できる 他の選択肢に比べてコストが高い Amazon Cognito UserPool 東京リージョンを指定できる、安価 歴史的経緯もありドキュメントが分かりづらい Google Identity Platform 安価 リージョンを指定できない Firebase Authentication 安価 リージョンを指定できない
\ 採用中 / なぜAuth0なのか 開発者体験が良い 14 • Auth0を触れる(※1)メンバーの数 ◦ 2ヶ月で4名→10名(以上!)に増加!
◦ うちSREは3名のみ、ほかはフロントエンド、PdM、バックエンド • Auth0に関するチケット ◦ スクラムのあるスプリントでは、15枚のチケットを6名以上で分担! • Auth0のサポート ◦ 体感で2日程度で返答、日本語でサポート頂ける場合も!
\ あなたと一緒に働きたい! / 認証のカスタム要件
\ 採用中 / 認証のカスタム要件 保険会社によって要件が異なる 16 • パスワードに含まれるべき文字の種類 • パスワードの長さ
• パスワードの再利用の可否 • パスワードにメールアドレスなどと同じ文字列が含まれてよいか • LINEログインなどのソーシャルログインの有無 • Azure ADなどのSSOの有無 • セッションの長さ • IP制限 • MFAの有無 • MFAの手段 • etc…
\ 採用中 / 認証のカスタム要件 Auth0におけるマルチテナントの実装方法 17 分け方 Pros Cons Auth0テナントで分ける
ダッシュボードへの直アクセスを含む、テナ ントの要件に柔軟に対応可能 運用コストがかかりすぎる Auth0 Organizationで分ける toBであれば便利 toCには使えない Auth0 Applicationで分ける Branding対応などを見るに公式推奨 運用コストがややかかる DB Connectionで分ける 同じメールアドレスでテナントごとに別ユー ザーを作成できる DB Connectionにはメタデータがない User Metadataで分ける 最も作成するリソースが少ない カスタムの幅が限られる
\ 採用中 / (意訳) Auth0は、企業間取引(B2B)のお客様がパートナーや顧客をより適切に管理し、エンドユーザーが自社のアプリケーショ ンにアクセスする方法をカスタマイズできるようにするため、Auth0プラットフォームの幅広いアップデートを実施しました。 Auth0のお客様は、Organizationを利用して以下のことが可能です。 • 顧客やパートナーをAuth0に登録し、その所属や権限などを管理する。 •
ビジネスごとに異なるロゴや色を使ってログインフローをブランディングできる。 • Organizations APIを使用して、自社製品に管理機能を組み込み、企業が自社組織を管理できるようにする。 認証のカスタム要件 Organizationとは 18 参考: Auth0, Inc. “Auth0 Organizations” https://auth0.com/docs/manage-users/organizations
\ 採用中 / 認証のカスタム要件 Organizationへの(個人的な)誤解 19 △複数テナント所属を可能にする機能 Organization登場以前、テナントごとにAuth0 Applicationを分ける設計が一般的。 →
1ユーザーが複数テナントに所属できない。 参考: urmot. “Auth0 Organizationsという素晴らしい機能を今更ながら紹介する .” Zenn. https://zenn.dev/urmot/articles/8c18d8b49d822c 加藤. “B2BマルチテナントSaaSの認証にAuth0を使うときに知っておきたかったこと ”. Sansan Tech Blog. https://buildersbox.corp-sansan.com/entry/2020/04/22/110000 ◎それ以外にもB2Bの便利機能がたくさん! • 複数テナントに所属できる • セルフサインアップを無効に • Eメールでの招待 • アクセストークンにOrganizationId • Organization単位のメタデータ • Organization単位のロゴ・色
\ 採用中 / 認証のカスタム要件 最終的なアーキテクチャ 20 マイページ (toC) 管理画面 (toB)
Application Application テナント別に DB Connection toCとtoBで テナントを分ける
\ あなたと一緒に働きたい! / セキュリティのカスタム要件
\ 採用中 / セキュリティのカスタム要件 【再掲】保険会社によって要件が異なる 22 • パスワードに含まれるべき文字の種類 • パスワードの長さ
• パスワードの再利用の可否 • パスワードにメールアドレスなどと同じ文字列が含まれてよいか • LINEログインなどのソーシャルログインの有無 • Azure ADなどのSSOの有無 • セッションの長さ • IP制限 • MFAの有無 • MFAの手段 • etc…
\ 採用中 / セキュリティのカスタム要件 【再掲】保険会社によって要件が異なる 23 • パスワードに含まれるべき文字の種類 • パスワードの長さ
• パスワードの再利用の可否 • パスワードにメールアドレスなどと同じ文字列が含まれてよいか • LINEログインなどのソーシャルログインの有無 • Azure ADなどのSSOの有無 • セッションの長さ • IP制限 • MFAの有無 • MFAの手段 • etc… Actionで対応可能!
\ 採用中 / ◎Actionのメリット • ドラッグ&ドロップで分かりやすい設定 • インターネット上のnpmのパッケージが使える • エディタが高性能、型から予測変換表示も
• バージョン管理 • etc… セキュリティのカスタム要件 RuleではなくActionを使おう 24 Rules Hooks Actions 参考: Auth0, Inc. “Introducing Auth0 Actions”. Auth0. https://auth0.com/blog/introducing-auth0-actions/
\ 採用中 / exports.onExecutePostLogin = async (event, api) => {
console.log('onExecutePostLogin'); const { user } = event; if (user.email_verified) { return; } const ManagementClient = require('auth0').ManagementClient; const management = new ManagementClient({ domain: event.secrets.domain, clientId: event.secrets.clientId, clientSecret: event.secrets.clientSecret, }); const { SESClient, SendEmailCommand } = require('@aws-sdk/client-ses'); // 以下省略 セキュリティのカスタム要件 Actionの実例 25 npmのパッケージが使えるので、 AWSと直接接続することも可能!
\ 採用中 / セキュリティのカスタム要件 制約も存在する 26 • パスワードに含まれるべき文字の種類 • パスワードの長さ
• パスワードの再利用の可否 • パスワードにメールアドレスなどと同じ文字列が含まれてよいか • LINEログインなどのソーシャルログインの有無 • Azure ADなどのSSOの有無 • セッションの長さ • IP制限 • MFAの有無 • MFAの手段 • etc… どれを優先的に使うかは設定不可。 (複数のMFAの手段があった場合どれを使うかは Auth0に 任せるべきというポリシーと推察 ...せめてOrganization単 位で有効化の設定をさせて〜!)
\ あなたと一緒に働きたい! / 画面のカスタム要件
\ 採用中 / 画面のカスタム要件 サインアップ画面に利用規約を表示したいだって!? 28 ここに 「利用規約」 「プライバシーポリシー」 を表示したいって...!?
\ 採用中 / 画面のカスタム要件 ULPのカスタマイズへの勘違い 29 HTMLをカスタマイズできる が...Classic ULPしか編集できな い!
\ 採用中 / 画面のカスタム要件 New ULPを使おう! (意訳) Auth0の新しいユニバーサルログインエクスペリエンスは、新鮮なUXデザインと軽量なページで、ログインフローを再構築 しています。この新しいエクスペリエンスを選択すると、Auth0はカスタマイズされていないすべてのページでこのエクスペ リエンスを使用します。ダッシュボードのブランディング
> ユニバーサルログイン設定タブで有効にすることができます。 30
\ 採用中 / <body class="_widget-auto-layout _hide-prompt-logo"> <!-- 省略 --> {%
if transaction.params.ext-disableSignup == "true" and prompt.name == "login" %} <script> document .querySelectorAll('a') .forEach( (link) => link.innerText === '{{ prompt.screen.texts.footerLinkText }}' && link.parentElement.remove(), ); </script> {% endif %} </body> 画面のカスタム要件 勝手に改造 31 改造の例: ログイン画面を表示中 かつ パラメータ disableSignup が true なら サインアップボタンを表示しない ※Auth0サポート対象外
\ あなたと一緒に働きたい! / 開発と運用
\ 採用中 / 開発と運用 ユーザーにテナントを選ばせたくない 33 前画面の入力を元に テナントを識別 サブドメインなどを元に テナントを識別
\ 採用中 / 環境変数で静的に設定 開発と運用 動的にAuth0の設定を変えよう 34 URLを見て動的に設定
\ 採用中 / 開発と運用 実は nextjs-auth0 が使いたかった 35 nextjs-auth0はフロントエンドでアクセ ストークンを持たず、よりセキュア。
ただし動的にAuth0Settingを行うこと はできない...
\ あなたと一緒に働きたい! / まとめ
\ 採用中 / まとめ Auth0を使うことで、マルチテナントのカスタム要件を運用しやすい方法で実現できた! 37 • チームメンバーのキャッチアップが容易 • DB
Connectionを分けることで認証のカスタマイズが可能 • Actionを利用することでセキュリティ面のカスタマイズが可能 • ULPのテンプレートを編集することでログイン画面のカスタマイズが可能
\ あなたと一緒に働きたい! / おしらせ
\ 採用中 / おしらせ 採用中です! 39
\ 採用中 / おしらせ 書籍化します! 40 今日しなかった マルチテナント以外の話も 満載!
\ あなたと一緒に働きたい! / EOL