本記事は 2025年7月14日に公開された「User Onboarding Strategies in a B2B SaaS Application」を機械翻訳した記事です。
B2B SaaSアプリケーションを開発する開発者にとって、シームレスなユーザーオンボーディング体験は、顧客満足度と製品導入において極めて重要です。煩雑で複雑なオンボーディングプロセスは、フラストレーションや顧客離れにつながる可能性がありますが、スムーズで直感的なプロセスは、長期的で良好な顧客関係の土台を築きます。
本記事では、B2B SaaSアプリケーション向けのさまざまなユーザーオンボーディング戦略を、Auth0が提供するソリューションに焦点を当てて探ります。さまざまなオンボーディングフローを掘り下げ、Blazorアプリケーションでメンバー招待を実装する方法に関する実践的なガイドを提供します。
ユーザーオンボーディング戦略
B2B SaaSアプリケーションにユーザーをオンボーディングする際、万能な解決策はありません。最善のアプローチは、特定のアプリケーション、顧客のニーズ、そして技術的な能力によって異なります。Auth0 Organizationsは、さまざまなオンボーディングモデルをサポートする柔軟性を提供します。
セルフサービス vs. 管理者によるプロビジョニング
ユーザーオンボーディングにおける基本的な選択肢は、セルフサービスと管理者主導のプロビジョニングです。
- セルフサービス: セルフサービスモデルでは、ユーザーは自分自身でアプリケーションにサインアップできます。これは、摩擦のないトライアル体験を提供したいアプリケーションで一般的なアプローチです。管理を維持するために、顧客組織の管理者が新規登録を承認する必要がある承認ワークフローを実装できます。
- 管理者によるプロビジョニング: 管理者プロビジョニングモデルでは、顧客組織の管理者がユーザーをアプリケーションに招待します。顧客はアプリケーションにアクセスできるユーザーをより詳細に制御でき、エンタープライズ環境では一般的な要件です。
Auth0 Organizationsを使用したオンボーディングフロー
Auth0 Organizationsを使用すると、B2Bの顧客をAuth0テナント内で個別のエンティティとしてモデル化できます。これにより、ユーザー、接続、ポリシーをOrganizationごとに管理できます。Auth0 Organizationsで実装できる一般的なユーザーオンボーディングフローは、次の2つです。
- 招待フロー: 顧客組織の管理者は、アプリケーション内でユーザーを自分のOrganizationに招待できます。ユーザーは招待リンクが記載されたメールを受信します。リンクをクリックすると、サインアップまたはログインプロセスに誘導され、自動的に正しいOrganizationに追加されます。
- Just-in-Time (JIT) プロビジョニング: Azure ADやOktaなどの独自のIDプロバイダーを使用するエンタープライズ顧客には、JITプロビジョニングがしばしば好まれる方法です。JITを使用すると、ユーザーが企業のシングルサインオン (SSO) を通じて初めてログインした際に、アプリケーションにユーザーアカウントが自動的に作成されます。手動でのユーザー作成が不要になり、オンボーディングプロセスが効率化されます。
Organizationへのユーザー招待
一般的で効果的なオンボーディング戦略である招待フローを詳しく見ていきましょう。Auth0を使用すると、Auth0ダッシュボードまたはManagement APIのいずれかを使用して、メンバーをOrganizationに招待できます。
本記事の残りの部分では、新しいユーザーをプログラムでOrganizationに招待する方法を学びます。基本的に、招待プロセスは次の図のように機能します。

- 管理者がアプリケーションから招待を開始します。
- アプリケーションはAuth0 Management APIを使用してOrganizationの招待を作成します。
- Auth0は一意の招待リンクが記載されたメールをユーザーに送信します。
- ユーザーがリンクをクリックすると、アプリケーションのログインページにリダイレクトされます。
- ユーザーがサインアップまたはログインすると、自動的にOrganizationに追加されます。
このフローを実装するには、Auth0アプリケーション設定で「アプリケーションログインURI」を構成する必要があります。これは、アプリケーションで招待の承諾を処理するURLです。
詳細については、Organizationメンバーの招待に関するAuth0ドキュメントを参照してください。
ユーザー招待の実装
では、以前のAuth0ブログ記事で紹介したサンプルB2B Blazorアプリケーションに、Organizationメンバーを招待するサポートを追加する方法を見てみましょう。
- Auth0 OrganizationsをB2B Blazor Webアプリに追加する方法
- Blazor B2B SaaSアプリケーションでセルフサブスクリプションモデルを有効にする方法
- B2B Blazor Webアプリケーションにおける顧客メールアドレス検証の実施
- Blazor B2B SaaSアプリケーションにロールベースのアクセス制御を実装する方法
Blazorアプリケーションでは、新規顧客がサブスクリプションを開始して新しいOrganizationを作成できますが、現在はAuth0ダッシュボード経由でのみ新規ユーザーを追加できます。これから実装する変更により、Organizationの管理者がアプリケーションから直接ユーザーを招待できるようになります。
前提条件
以前の記事に従ってサンプルアプリケーションをゼロから実装したくない場合は、次のコマンドを実行してダウンロードできます。
git clone --branch roles-organizations --single-branch https://github.com/andychiare/MyBlazorSaaS
付属のREADMEファイルの指示に従って、Auth0にアプリケーションを登録し、構成してください。Auth0アカウントをお持ちでない場合は、無料でサインアップできます。
アプリケーションがOrganizationへの参加招待を送信できるようにするには、新しい権限を追加する必要があります。
前述のREADMEファイルに従ってアプリケーションを構成したと仮定し、Auth0ダッシュボードに移動し、Applications > ApplicationsセクションでManagementClientアプリケーションを見つけます。
アプリケーションの構成ページで、APIsタブを選択し、Auth0 Management API項目の下の領域を展開します。次に、create:organization_invitations
権限を選択し、Updateボタンをクリックして変更を保存します。
Leverage Auth0's authentication and authorization services in your .NET applications.
DOWNLOAD THE FREE EBOOK
招待機能の実装
これで招待機能を実装する準備が整いました。最初のステップとして、MyBlazorSaaS/Components/Pages/Dashboard
フォルダの下にInvite.razor
という名前の新しいページを作成し、次のコードを追加します。
@page "/dashboard/users/invite" @attribute [Authorize(Roles = "admin")] @rendermode InteractiveServer @using Auth0.ManagementApi @using System.ComponentModel.DataAnnotations @using Auth0.ManagementApi.Models @using Microsoft.Extensions.Configuration @inject IAuth0Management auth0Management @inject IConfiguration Configuration <h3>Invite a New User</h3> <div> <div class="form-group row my-2"> <label for="email" class="col-sm-4 col-form-label">EmailAddress</label> <div class="col-sm-6"> <InputText type="email" @bind-Value="EmailAddress" id="email" class="form-control"/> </div> </div> <div class="form-group row my-2"> <label for="role" class="col-sm-4 col-form-label">Role</label> <div class="col-sm-6"> <InputSelect id="role" class="form-select" @bind-Value="RoleId"> <option value="">Select a role...</option> @foreach (var role in availableRoles) { <option value="@role.Id">@role.Name</option> } </InputSelect> </div> </div> <button class="btn btn-primary" @onclick="HandleInvite">Send Invite</button> </div> @if (!string.IsNullOrWhiteSpace(successMessage)) { <div class="alert alert-success" role="alert"> @successMessage </div> } @if (!string.IsNullOrWhiteSpace(errorMessage)) { <div class="alert alert-danger" role="alert"> @errorMessage </div> }
これはユーザー招待ページのUI部分です。相対パスは/dashboard/users/invite
で、管理者のみがアクセスできます。新規ユーザーのメールアドレス用のテキストボックスと、ユーザーに割り当て可能なロールを持つセレクトボックスを定義します。最後の2つのifステートメントは、成功メッセージとエラーメッセージの表示を制御します。
今回はフォームから送信されたデータに対するデータ検証は行いませんが、プロダクション用コードではデータ検証を実施してください。
このページのレンダリングは次の画像のようになります。
次に、既存のコードの直後に次のコードをInvite.razor
ページに追加して、このUIの背後にある動作を実装します。
// ...existing code... @code { [CascadingParameter] private Task<AuthenticationState>? authenticationState { get; set; } private ManagementApiClient? managementClient; private string EmailAddress = ""; private string RoleId = ""; private string OrganizationId = ""; private string OrganizationName = ""; private string successMessage = ""; private string errorMessage = ""; private IEnumerable<Role>? availableRoles = []; protected override async Task OnInitializedAsync() { if (authenticationState is not null) { var state = await authenticationState; if (state.User?.Identity?.IsAuthenticated??false) { OrganizationId = state.User?.FindFirst(c => c.Type == "org_id")?.Value??String.Empty; if (!string.IsNullOrEmpty(OrganizationId)) { managementClient = await auth0Management.getClient(); var organization = await managementClient.Organizations.GetAsync(OrganizationId); OrganizationName = organization.DisplayName; availableRoles = await managementClient.Roles.GetAllAsync(new GetRolesRequest()); } } } } private async Task HandleInvite() { try { var inviterName = $"{OrganizationName} Admin"; var invitation = new OrganizationCreateInvitationRequest { Inviter = new OrganizationInvitationInviter { Name = inviterName }, Invitee = new OrganizationInvitationInvitee { Email = EmailAddress }, ClientId = Configuration["Auth0:ClientId"], Roles = new List<string> { RoleId } }; await managementClient.Organizations.CreateInvitationAsync(OrganizationId, invitation); successMessage = $"Invitation sent successfully to {EmailAddress}."; EmailAddress = ""; RoleId = ""; } catch (Exception ex) { errorMessage = $"Error sending invitation: {ex.Message}"; } } }
OnInitializedAsync()
メソッドは、招待作成の準備をします。現在のOrganizationのIDと名前を取得し、Auth0 Managementクライアントのインスタンスを取得し、セレクトボックスに表示するユーザーロールを読み込みます。
「Send Invite」ボタンによってトリガーされるHandleInvite()
メソッドは、実際に招待を作成してユーザーに送信します。OrganizationCreateInvitationRequest
クラスのインスタンスを介して招待リクエストを準備し、CreateInvitationAsync()
メソッドを介してユーザーに送信します。
招待の処理
HandleInvite()
メソッドで作成された招待インスタンスには、他のパラメータの中でもアプリケーションのクライアントIDの値が必要であることに注意してください。これは、前述のアプリケーションのログインエンドポイントを解決するために必要です。
ユーザーが招待リンク付きのメールを受信すると、そのエンドポイントに移動して招待を承諾し、Organizationにサインアップする必要があります。そのため、アプリケーションはユーザーオンボーディングを完了するために招待を処理しなければなりません。幸いなことに、使用しているBlazorサンプルアプリにはすでに実装されています。
これに関する詳細については、ブログ記事Auth0 OrganizationsをB2B Blazor Webアプリに追加する方法の「Manage User Invitations」セクションを参照してください。
仕上げ
Invite.razor
ページをOrganizationの管理者がアクセスできるようにするには、Blazorアプリケーションの現在のシンプルなダッシュボードページを修正する必要があります。管理者がInvite.razor
ページに移動できるボタンを追加します。
MyBlazorSaaS/Components/Pages/Dashboard
フォルダにあるHome.razor
ページを開き、以下で強調表示されている変更を適用します。
@page "/dashboard" @attribute [Authorize(Roles = "admin")] @* 👇 new code *@ @rendermode InteractiveServer @inject IAuth0Management auth0Management @* 👇 new code *@ @inject NavigationManager navManager <PageTitle>Dashboard</PageTitle> <h1>Admin dashboard</h1> <div> @* ...existing code... *@ </div> @* 👇 new code *@ <div class="form-group row my-2"> <div class="col-sm-4"></div> <div class="col-sm-6"> <button class="btn btn-primary" @onclick="@(() => navManager.NavigateTo("/dashboard/users/invite"))"> Invite a new user </button> </div> </div> </div> @* 👆 new code *@ @* ...existing code... *@
最初の変更は、ページのレンダリングモードに関するものです。管理者がボタンをクリックして招待ページへ移動できるようにするため、インタラクティブ性を有効にする必要があります。
次に、NavigationManager
サービスを注入してページのナビゲーションを有効にしました。
最後に、招待ページに移動するためのボタンを表示するセクションを追加しました。
次のように表示されます。
これで、招待によるユーザーオンボーディングをテストする準備がすべて整いました。
まとめ
適切なユーザーオンボーディング戦略を選択することは、B2B SaaSアプリケーションにとって重要な決定です。Auth0の強力で柔軟なOrganizations機能を活用することで、顧客の多様なニーズに応えるさまざまなオンボーディングフローを実装できます。手動の招待プロセス、セルフサービスモデル、または完全に自動化されたJITプロビジョニングワークフローのいずれを選択する場合でも、Auth0はユーザーにシームレスで安全なオンボーディング体験を作成するために必要なツールを提供します。
本記事では、.NET、特にBlazorフレームワークでの招待によるユーザーオンボーディングの実装方法を示しましたが、他のユーザーオンボーディングのアプローチや実装もぜひ探求してください。たとえば、SaaStartアプリには、Next.jsでの招待オンボーディングの実装が含まれています。
本記事で作成したBlazorプロジェクトの最終的なコードは、このGitHubリポジトリからダウンロードできます。
About the author
Andrea Chiarelli
Principal Developer Advocate
I have over 20 years of experience as a software engineer and technical author. Throughout my career, I've used several programming languages and technologies for the projects I was involved in, ranging from C# to JavaScript, ASP.NET to Node.js, Angular to React, SOAP to REST APIs, etc.
In the last few years, I've been focusing on simplifying the developer experience with Identity and related topics, especially in the .NET ecosystem.