---
title: "B2B SaaSアプリケーションにおけるユーザーオンボーディング戦略"
description: "Auth0を使用して効果的なB2B SaaSユーザーオンボーディング戦略を実装します。セルフサービス、管理者によるプロビジョニング、JITフローに加え、Blazorでの招待の例について学びます。
"
authors:
  - name: "Andrea Chiarelli"
    url: "https://auth0.com/blog/authors/andrea-chiarelli/"
date: "Jul 14, 2025"
category: "Developers,Tutorial,.NET"
tags: ["b2b", "saas", "organizations", "users", "onboarding"]
url: "https://auth0.com/blog/jp-user-onboarding-strategies-b2b-saas/"
---

# B2B SaaSアプリケーションにおけるユーザーオンボーディング戦略

<style>
    
  /* Increases spacing between bullet points */   
    li {padding-bottom: .7em; }

  /* Hides Disqus module */
  .sc-gyuw98-0 {display: none;}
  #disqus_thread {display: none;}

</style>

> 本記事は 2025年7月14日に公開された「[User Onboarding Strategies in a B2B SaaS Application](https://auth0.com/blog/user-onboarding-strategies-b2b-saas/)」を機械翻訳した記事です。

B2B SaaSアプリケーションを開発する開発者にとって、シームレスなユーザーオンボーディング体験は、顧客満足度と製品導入において極めて重要です。煩雑で複雑なオンボーディングプロセスは、フラストレーションや顧客離れにつながる可能性がありますが、スムーズで直感的なプロセスは、長期的で良好な顧客関係の土台を築きます。

本記事では、B2B SaaSアプリケーション向けのさまざまなユーザーオンボーディング戦略を、Auth0が提供するソリューションに焦点を当てて探ります。さまざまなオンボーディングフローを掘り下げ、Blazorアプリケーションでメンバー招待を実装する方法に関する実践的なガイドを提供します。

## ユーザーオンボーディング戦略

B2B SaaSアプリケーションにユーザーをオンボーディングする際、万能な解決策はありません。最善のアプローチは、特定のアプリケーション、顧客のニーズ、そして技術的な能力によって異なります。[Auth0 Organizations](https://auth0.com/docs/ja-jp/organizations)は、さまざまなオンボーディングモデルをサポートする柔軟性を提供します。

### セルフサービス vs. 管理者によるプロビジョニング

ユーザーオンボーディングにおける基本的な選択肢は、セルフサービスと管理者主導のプロビジョニングです。

* **セルフサービス:** セルフサービスモデルでは、ユーザーは自分自身でアプリケーションにサインアップできます。これは、摩擦のないトライアル体験を提供したいアプリケーションで一般的なアプローチです。管理を維持するために、顧客組織の管理者が新規登録を承認する必要がある承認ワークフローを実装できます。
* **管理者によるプロビジョニング:** 管理者プロビジョニングモデルでは、顧客組織の管理者がユーザーをアプリケーションに招待します。顧客はアプリケーションにアクセスできるユーザーをより詳細に制御でき、エンタープライズ環境では一般的な要件です。

### Auth0 Organizationsを使用したオンボーディングフロー

Auth0 Organizationsを使用すると、B2Bの顧客をAuth0テナント内で個別のエンティティとしてモデル化できます。これにより、ユーザー、接続、ポリシーをOrganizationごとに管理できます。Auth0 Organizationsで実装できる一般的なユーザーオンボーディングフローは、次の2つです。

1.  **招待フロー:** 顧客組織の管理者は、アプリケーション内でユーザーを自分のOrganizationに招待できます。ユーザーは招待リンクが記載されたメールを受信します。リンクをクリックすると、サインアップまたはログインプロセスに誘導され、自動的に正しいOrganizationに追加されます。
2.  **Just-in-Time (JIT) プロビジョニング:** Azure ADやOktaなどの独自のIDプロバイダーを使用するエンタープライズ顧客には、[JITプロビジョニング](https://auth0.com/docs/ja-jp/manage-users/organizations/configure-organizations/grant-just-in-time-membership)がしばしば好まれる方法です。JITを使用すると、ユーザーが企業のシングルサインオン (SSO) を通じて初めてログインした際に、アプリケーションにユーザーアカウントが自動的に作成されます。手動でのユーザー作成が不要になり、オンボーディングプロセスが効率化されます。


## Organizationへのユーザー招待

一般的で効果的なオンボーディング戦略である招待フローを詳しく見ていきましょう。Auth0を使用すると、[Auth0ダッシュボード](https://auth0.com/docs/ja-jp/manage-users/organizations/configure-organizations/send-membership-invitations#auth0-dashboard)またはManagement APIのいずれかを使用して、メンバーをOrganizationに招待できます。

本記事の残りの部分では、新しいユーザーをプログラムでOrganizationに招待する方法を学びます。基本的に、招待プロセスは次の図のように機能します。

<picture>
<img src="https://images.ctfassets.net/23aumh6u8s0i/iiI1xhwIzjjr00xV9wKIM/6cdc6fe5e83e58535c630a76bf7f1472/user-invitation-flow-diagram_v2.jpg" alt="Auth0 Organizationsを使用したB2B SaaSアプリケーションの複数ステップにわたるユーザー招待プロセスを示す図" style="width: 75%; margin: auto">
</picture>

1. 管理者がアプリケーションから招待を開始します。
2. アプリケーションはAuth0 Management APIを使用してOrganizationの招待を作成します。
3. Auth0は一意の招待リンクが記載されたメールをユーザーに送信します。
4. ユーザーがリンクをクリックすると、アプリケーションのログインページにリダイレクトされます。
5. ユーザーがサインアップまたはログインすると、自動的にOrganizationに追加されます。

> このフローを実装するには、Auth0アプリケーション設定で「アプリケーションログインURI」を構成する必要があります。これは、アプリケーションで招待の承諾を処理するURLです。
>
>詳細については、[Organizationメンバーの招待に関するAuth0ドキュメント](https://auth0.com/docs/ja-jp/manage-users/organizations/configure-organizations/invite-members)を参照してください。

## ユーザー招待の実装

では、以前のAuth0ブログ記事で紹介したサンプルB2B Blazorアプリケーションに、Organizationメンバーを招待するサポートを追加する方法を見てみましょう。

* [Auth0 OrganizationsをB2B Blazor Webアプリに追加する方法](https://auth0.com/blog/jp-auth0-organizations-for-b2b-saas-blazor-web-apps/)
* [Blazor B2B SaaSアプリケーションでセルフサブスクリプションモデルを有効にする方法](https://auth0.com/blog/jp-enable-self-subscription-in-blazor-b2b-saas-application/)
* [B2B Blazor Webアプリケーションにおける顧客メールアドレス検証の実施](https://auth0.com/blog/jp-enforce-customer-email-verification-b2b-saas-blazor-app/)
* [Blazor B2B SaaSアプリケーションにロールベースのアクセス制御を実装する方法](https://auth0.com/blog/jp-role-management-auth0-organizations-b2b-saas/)

Blazorアプリケーションでは、新規顧客がサブスクリプションを開始して新しいOrganizationを作成できますが、現在はAuth0ダッシュボード経由でのみ新規ユーザーを追加できます。これから実装する変更により、Organizationの管理者がアプリケーションから直接ユーザーを招待できるようになります。

### 前提条件

以前の記事に従ってサンプルアプリケーションをゼロから実装したくない場合は、次のコマンドを実行してダウンロードできます。

```shell
git clone --branch roles-organizations --single-branch https://github.com/andychiare/MyBlazorSaaS
```

付属のREADMEファイルの指示に従って、Auth0にアプリケーションを登録し、構成してください。Auth0アカウントをお持ちでない場合は、[無料でサインアップ](https://auth0.com/jp/signup)できます。

アプリケーションがOrganizationへの参加招待を送信できるようにするには、新しい権限を追加する必要があります。

前述のREADMEファイルに従ってアプリケーションを構成したと仮定し、[Auth0ダッシュボード](https://manage.auth0.com/)に移動し、[Applications > Applications](https://manage.auth0.com/#/applications)セクションで*ManagementClient*アプリケーションを見つけます。

アプリケーションの構成ページで、*APIs*タブを選択し、Auth0 Management API項目の下の領域を展開します。次に、`create:organization_invitations`権限を選択し、*Update*ボタンをクリックして変更を保存します。

<include src="ebook-ads/dotnetIdentity" />


### 招待機能の実装

これで招待機能を実装する準備が整いました。最初のステップとして、`MyBlazorSaaS/Components/Pages/Dashboard`フォルダの下に`Invite.razor`という名前の新しいページを作成し、次のコードを追加します。

```html
@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ステートメントは、成功メッセージとエラーメッセージの表示を制御します。

今回はフォームから送信されたデータに対するデータ検証は行いませんが、プロダクション用コードではデータ検証を実施してください。

このページのレンダリングは次の画像のようになります。

![B2B SaaS Blazorアプリケーションのユーザーオンボーディング招待フォーム。メールアドレスとロールのフィールド](https://images.ctfassets.net/23aumh6u8s0i/7y7XcINPkTwxNNah4CKwGl/004a4e06d965fa7abd4a538928af99b6/invite-new-user.png)

次に、既存のコードの直後に次のコードを`Invite.razor`ページに追加して、このUIの背後にある動作を実装します。


```c#
// ...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](https://auth0.github.io/auth0.net/api/Auth0.ManagementApi.Models.OrganizationCreateInvitationRequest.html#Auth0_ManagementApi_Models_OrganizationCreateInvitationRequest_ClientId)の値が必要であることに注意してください。これは、前述のアプリケーションのログインエンドポイントを解決するために必要です。

ユーザーが招待リンク付きのメールを受信すると、そのエンドポイントに移動して招待を承諾し、Organizationにサインアップする必要があります。そのため、アプリケーションはユーザーオンボーディングを完了するために招待を処理しなければなりません。幸いなことに、使用しているBlazorサンプルアプリにはすでに実装されています。

これに関する詳細については、ブログ記事[Auth0 OrganizationsをB2B Blazor Webアプリに追加する方法](https://auth0.com/blog/jp-auth0-organizations-for-b2b-saas-blazor-web-apps/)の「[Manage User Invitations](https://auth0.com/blog/jp-auth0-organizations-for-b2b-saas-blazor-web-apps/#-----------)」セクションを参照してください。

### 仕上げ

`Invite.razor`ページをOrganizationの管理者がアクセスできるようにするには、Blazorアプリケーションの現在のシンプルなダッシュボードページを修正する必要があります。管理者が`Invite.razor`ページに移動できるボタンを追加します。
`MyBlazorSaaS/Components/Pages/Dashboard`フォルダにある`Home.razor`ページを開き、以下で強調表示されている変更を適用します。


```html
@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アプリケーションの管理者ダッシュボード。簡素化されたユーザーオンボーディングのために新しいユーザーを招待するボタンが表示されている](https://images.ctfassets.net/23aumh6u8s0i/2w1QXbqYR4CyzhhklE07Ri/9d7497b911fe501dc308f9f39f738c7e/admin-dasboard-with-user-invitation.png)

これで、招待によるユーザーオンボーディングをテストする準備がすべて整いました。

## まとめ

適切なユーザーオンボーディング戦略を選択することは、B2B SaaSアプリケーションにとって重要な決定です。Auth0の強力で柔軟なOrganizations機能を活用することで、顧客の多様なニーズに応えるさまざまなオンボーディングフローを実装できます。手動の招待プロセス、セルフサービスモデル、または完全に自動化されたJITプロビジョニングワークフローのいずれを選択する場合でも、Auth0はユーザーにシームレスで安全なオンボーディング体験を作成するために必要なツールを提供します。

本記事では、.NET、特にBlazorフレームワークでの招待によるユーザーオンボーディングの実装方法を示しましたが、他のユーザーオンボーディングのアプローチや実装もぜひ探求してください。たとえば、SaaStartアプリには、Next.jsでの招待オンボーディングの実装が含まれています。

本記事で作成したBlazorプロジェクトの最終的なコードは、[このGitHubリポジトリ](https://github.com/andychiare/MyBlazorSaaS/tree/member-invite)からダウンロードできます。