メインコンテンツまでスキップ
新しい友達のために:

Logto は、モダンなアプリや SaaS 製品向けに設計された Auth0 の代替です。 Cloudオープンソース の両方のサービスを提供し、アイデンティティと管理 (IAM) システムを迅速に立ち上げるのに役立ちます。認証 (Authentication)、認可 (Authorization)、マルチテナント管理を すべて一つに まとめて楽しんでください。

Logto Cloud で無料の開発テナントから始めることをお勧めします。これにより、すべての機能を簡単に探索できます。

この記事では、.NET Core (Razor Pages)Logto を使用して、Mailgun サインイン体験(ユーザー認証 (Authentication))を迅速に構築する手順を説明します。

前提条件

  • 稼働中の Logto インスタンス。紹介ページ をチェックして始めてください。
  • .NET Core (Razor Pages) の基本的な知識。
  • 使用可能な Mailgun アカウント。

Logto にアプリケーションを作成する

Logto は OpenID Connect (OIDC) 認証 (Authentication) と OAuth 2.0 認可 (Authorization) に基づいています。これは、複数のアプリケーション間でのフェデレーテッドアイデンティティ管理をサポートし、一般的にシングルサインオン (SSO) と呼ばれます。

あなたの 従来の Web アプリケーションを作成するには、次の手順に従ってください:

  1. Logto コンソール を開きます。「Get started」セクションで、「View all」リンクをクリックしてアプリケーションフレームワークのリストを開きます。あるいは、Logto Console > Applications に移動し、「Create application」ボタンをクリックします。 Get started
  2. 開いたモーダルで、左側のクイックフィルターチェックボックスを使用して、利用可能なすべての "従来の Web" フレームワークをフィルタリングするか、"従来の Web" セクションをクリックします。".NET Core (Razor Pages)" フレームワークカードをクリックして、アプリケーションの作成を開始します。 Frameworks
  3. アプリケーション名を入力します。例:「Bookstore」と入力し、「Create application」をクリックします。

🎉 タダーン!Logto で最初のアプリケーションを作成しました。詳細な統合ガイドを含むお祝いページが表示されます。ガイドに従って、アプリケーションでの体験を確認してください。

Logto SDK を統合する

ヒント:
  • 次のデモンストレーションは .NET Core 8.0 を基に構築されています。SDK は .NET 6.0 以上に対応しています。
  • .NET Core のサンプルプロジェクトは GitHub リポジトリ で利用可能です。

インストール

プロジェクトに NuGet パッケージを追加します:

dotnet add package Logto.AspNetCore.Authentication

Logto 認証 (Authentication) を追加する

Startup.cs(または Program.cs)を開き、次のコードを追加して Logto 認証 (Authentication) サービスを登録します:

Program.cs
using Logto.AspNetCore.Authentication;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddLogtoAuthentication(options =>
{
options.Endpoint = builder.Configuration["Logto:Endpoint"]!;
options.AppId = builder.Configuration["Logto:AppId"]!;
options.AppSecret = builder.Configuration["Logto:AppSecret"];
});

AddLogtoAuthentication メソッドは次のことを行います:

  • デフォルトの認証 (Authentication) スキームを LogtoDefaults.CookieScheme に設定します。
  • デフォルトのチャレンジスキームを LogtoDefaults.AuthenticationScheme に設定します。
  • デフォルトのサインアウトスキームを LogtoDefaults.AuthenticationScheme に設定します。
  • 認証 (Authentication) スキームにクッキーと OpenID Connect 認証 (Authentication) ハンドラーを追加します。

サインインおよびサインアウトフロー

進む前に、.NET Core 認証 (Authentication) ミドルウェアにおける混乱しやすい用語を 2 つ明確にする必要があります:

  1. CallbackPath: ユーザーがサインインした後に Logto がユーザーをリダイレクトする URI (Logto における「リダイレクト URI」)
  2. RedirectUri: Logto 認証 (Authentication) ミドルウェアで必要なアクションが実行された後にリダイレクトされる URI

サインインプロセスは次のように示されます:


同様に、.NET Core にはサインアウトフローのための SignedOutCallbackPathRedirectUri もあります。

明確にするために、これらを次のように呼びます:

使用する用語.NET Core 用語
Logto リダイレクト URICallbackPath
Logto サインアウト後リダイレクト URISignedOutCallbackPath
アプリケーションリダイレクト URIRedirectUri

リダイレクトベースのサインインについて

  1. この認証 (Authentication) プロセスは OpenID Connect (OIDC) プロトコルに従い、Logto はユーザーのサインインを保護するために厳格なセキュリティ対策を講じています。
  2. 複数のアプリがある場合、同じアイデンティティプロバイダー (Logto) を使用できます。ユーザーがあるアプリにサインインすると、Logto は別のアプリにアクセスした際に自動的にサインインプロセスを完了します。

リダイレクトベースのサインインの理論と利点について詳しく知るには、Logto サインイン体験の説明を参照してください。

リダイレクト URI を設定する

注記:

以下のコードスニペットでは、あなたのアプリが http://localhost:3000/ で実行されていると仮定しています。

まず、Logto リダイレクト URI を設定しましょう。次の URI を Logto アプリケーション詳細ページの「リダイレクト URI」リストに追加します:

http://localhost:3000/Callback

Logto サインアウト後リダイレクト URI を設定するには、次の URI を Logto アプリケーション詳細ページの「サインアウト後リダイレクト URI」リストに追加します:

http://localhost:3000/SignedOutCallback

デフォルトパスを変更する

Logto リダイレクト URI にはデフォルトパス /Callback があり、Logto サインアウト後リダイレクト URI にはデフォルトパス /SignedOutCallback があります。

特別な要件がない場合は、そのままにしておくことができます。変更したい場合は、LogtoOptionsCallbackPathSignedOutCallbackPath プロパティを設定できます:

Program.cs
builder.Services.AddLogtoAuthentication(options =>
{
// 他の設定...
options.CallbackPath = "/Foo";
options.SignedOutCallbackPath = "/Bar";
});

Logto アプリケーション詳細ページの値もそれに応じて更新することを忘れないでください。

サインイン / サインアウトボタンを実装する

まず、PageModel にハンドラーメソッドを追加します。例えば:

Pages/Index.cshtml.cs
public class IndexModel : PageModel
{
public async Task OnPostSignInAsync()
{
await HttpContext.ChallengeAsync(new AuthenticationProperties
{
RedirectUri = "/"
});
}

public async Task OnPostSignOutAsync()
{
await HttpContext.SignOutAsync(new AuthenticationProperties
{
RedirectUri = "/"
});
}
}

次に、Razor ページにボタンを追加します:

Pages/Index.cshtml
<p>Is authenticated: @User.Identity?.IsAuthenticated</p>
<form method="post">
@if (User.Identity?.IsAuthenticated == true) {
<button type="submit" asp-page-handler="SignOut">Sign out</button>
} else {
<button type="submit" asp-page-handler="SignIn">Sign in</button>
}
</form>

ユーザーが認証 (Authentication) されていない場合は「Sign in」ボタンが表示され、認証 (Authentication) されている場合は「Sign out」ボタンが表示されます。

チェックポイント: アプリケーションをテストする

これで、アプリケーションをテストできます:

  1. アプリケーションを実行すると、サインインボタンが表示されます。
  2. サインインボタンをクリックすると、SDK がサインインプロセスを初期化し、Logto のサインインページにリダイレクトされます。
  3. サインインすると、アプリケーションに戻り、サインアウトボタンが表示されます。
  4. サインアウトボタンをクリックして、トークンストレージをクリアし、サインアウトします。

Mailgun コネクターを追加する

Email コネクターは、認証 (Authentication) のためにワンタイムパスワード (OTP) を送信するための方法です。これは、Email ベースの登録、サインイン、二要素認証 (2FA)、アカウント回復を含むパスワードレス認証 (Authentication) をサポートするために メールアドレス の確認を可能にします。 Logto の Email コネクターを使用すると、数分でこれを設定できます。

Email コネクターを追加するには、次の手順に従ってください:

  1. Console > Connector > Email and SMS connectors に移動します。
  2. 新しい Email コネクターを追加するには、「Set up」ボタンをクリックし、「Mailgun」を選択します。
  3. 選択したプロバイダーの README ドキュメントを確認します。
  4. 「Parameter Configuration」セクションで設定フィールドを完了します。
  5. JSON エディターを使用して Email テンプレートをカスタマイズします。
  6. メールアドレス に確認コードを送信して設定をテストします。
Connector tab
注記:

インプレースコネクターガイドに従っている場合は、次のセクションをスキップできます。

Mailgun メールコネクター を設定する

前提条件

基本設定

  • 異なる Mailgun API エンドポイントを使用する場合は、endpoint フィールドに入力してください。たとえば、EU リージョンの場合は https://api.eu.mailgun.net となります。デフォルト値は https://api.mailgun.net です。
  • domain フィールドには、Mailgun アカウントで登録したドメインを入力してください。この値は Mailgun ダッシュボードの Domains セクションで確認できます。ドメインは example.com の形式で、https://http:// のプレフィックスは不要です。
  • apiKey フィールドには、Mailgun アカウントで生成した API キーを入力してください。
  • from フィールドには、メール送信元として使用するメールアドレスを入力してください。このメールアドレスは Mailgun アカウントに登録されている必要があります。メールアドレスは Sender Name <[email protected]> の形式で入力してください。

Deliveries

Config オブジェクト

「Deliveries」セクションでは、さまざまなシナリオで送信されるメールの内容を設定できます。これは JSON のキーと値のマップであり、キーは使用タイプ、値は送信するメールの内容設定を含むオブジェクトです。

{
"<usage-type>": {
// ...
}
}

使用タイプ

サポートされている使用タイプは次のとおりです:

  • Register: ユーザーが登録する際に送信されるメール。
  • SignIn: ユーザーがサインインする際に送信されるメール。
  • ForgotPassword: ユーザーがパスワードをリセットする際に送信されるメール。
  • Generic: ユーザーが汎用的なアクション(例:メールコネクターのテスト)を行う際に送信されるメール。
注記:

deliveries 設定で使用タイプが指定されていない場合、汎用メールが送信されます。汎用メールも指定されていない場合、コネクターはエラーを返します。

内容設定

コネクターは、直接 HTML コンテンツまたは Mailgun テンプレートの両方をサポートしています。各使用タイプごとにいずれかを利用できます。

件名や内容には {{code}} プレースホルダーを使用して認証コードを挿入できます。

直接 HTML コンテンツを使用する場合は、次のフィールドを入力してください:

  • subject: 送信するメールの件名。
  • replyTo: 返信先として使用するメールアドレス。
  • html: (必須)送信するメールの HTML コンテンツ。
  • text: 送信するメールのプレーンテキスト版。

Mailgun テンプレートを使用する場合は、次のフィールドを入力してください:

  • subject: 送信するメールの件名。
  • replyTo: 返信先として使用するメールアドレス。
  • template: (必須)使用する Mailgun テンプレート名。
  • variables: Mailgun テンプレートに渡す変数。Mailgun へ送信する前に文字列化されるため、JSON のキーと値のマップで指定してください。code 変数はコネクターによって自動的に追加されるため、含める必要はありません。

以下は deliveries 設定の例です:

{
"Register": {
"subject": "{{code}} is your verification code",
"replyTo": "Foo <[email protected]>",
"html": "<h1>Welcome to Logto</h1><p>Your verification code is {{code}}.</p>",
"text": "Welcome to Logto. Your verification code is {{code}}."
},
"SignIn": {
"subject": "Welcome back to Logto",
"replyTo": "Foo <[email protected]>",
"template": "logto-sign-in",
"variables": {
"bar": "baz"
}
}
}

設定を保存する

Logto コネクター設定エリアで必要な値をすべて記入したことを確認してください。「保存して完了」または「変更を保存」をクリックすると、Mailgun コネクターが利用可能になります。

サインイン体験で Mailgun コネクターを有効にする

コネクターを正常に作成したら、電話番号ベースのパスワードレスログインと登録を有効にできます。

  1. コンソール > サインイン体験 > サインアップとサインイン に移動します。
  2. サインアップ方法を設定します(オプション):
    1. サインアップ識別子として "メールアドレス" または "Email or phone number" を選択します。
    2. "Verify at sign-up" は強制的に有効化されます。登録時に "Create a password" を有効にすることもできます。
  3. サインイン方法を設定します:
    1. サインイン識別子の一つとして メールアドレス を選択します。複数の利用可能な識別子(メール、電話番号、ユーザー名)を提供できます。
    2. 認証 (Authentication) 要素として "Verification code" および / または "Password" を選択します。
  4. "Save changes" をクリックし、"Live preview" でテストします。
Sign-in Experience tab

OTP を使用した登録とログインに加えて、パスワードの回復や ベースのセキュリティ検証を有効にし、メールアドレス をプロファイルにリンクすることもできます。詳細については、エンドユーザーフロー を参照してください。

テストと検証

.NET Core (Razor Pages) アプリに戻ります。これで Mailgun を使用してサインインできるはずです。お楽しみください!

さらなる読み物

エンドユーザーフロー:Logto は、MFA やエンタープライズシングルサインオン (SSO) を含む即時使用可能な認証 (Authentication) フローを提供し、アカウント設定、セキュリティ検証、マルチテナント体験の柔軟な実装のための強力な API を備えています。

認可 (Authorization):認可 (Authorization) は、ユーザーが認証 (Authentication) された後に行えるアクションやアクセスできるリソースを定義します。ネイティブおよびシングルページアプリケーションの API を保護し、ロールベースのアクセス制御 (RBAC) を実装する方法を探ります。

組織 (Organizations):特にマルチテナント SaaS や B2B アプリで効果的な組織機能は、テナントの作成、メンバー管理、組織レベルの RBAC、およびジャストインタイムプロビジョニングを可能にします。

顧客 IAM シリーズ:顧客(または消費者)アイデンティティとアクセス管理に関する連続ブログ投稿で、101 から高度なトピックまでを網羅しています。