Logtoを利用したASP.NET Core認証を構築する
Logto SDKを統合してASP.NET Coreでユーザー認証フローを構築する方法を学びましょう。
はじめに
- Logtoは、少ない労力で顧客のアイデンティティインフラストラクチャを構築するためのモダンなAuth0代替品です。ユーザー名、メール、電話番号、GoogleやGitHubのような人気のあるソーシャルログインを含むさまざまなログイン方法をサポートしています。
- ASP.NET Coreは、クロスプラットフォーム、高性能、オープンソースのフレームワークで、現代のクラウドベースのインターネットに接続されたアプリケーションを構築するためのものです。
このチュートリアルでは、Logto SDKを統合してASP.NET Coreでユーザー認証フローを構築する方法を紹介します。チュートリアルではC#をプログラミング言語として使用します。
前提条件
開始する前に、以下のものが必要です:
- Logtoアカウント。持っていない場合は、無料でサインアップができます。
- .NETの開発環境とASP.NET Coreプロジェクト。持っていない場合は、.NETをインストールして、ASP.NETチュートリアルに従ってプロジェクトを設定することができます。
Logtoアプリケーションを作成する
開始するには、「伝統的なウェブ」タイプでLogtoアプリケーションを作成します。Logtoアプリケーションを作成するには、以下の手順に従ってください:
- Logto Consoleにサインインします。
- 左のナビゲーションバーで、Applicationsをクリックします。
- Create applicationをクリックします。
- 開いたページで、"Traditional web app"セクションを見つけ、"ASP.NET Core"カードを探します。
- Start buildingをクリックし、アプリケーションの名前を入力します。
- Createをクリックします。
その後、ASP.NET CoreアプリケーションにLogto SDKを統合するプロセスを案内するインタラクティブなチュートリアルが表示されるはずです。以下の内容は将来の参照のためのものとなります。
Logto SDKとの統合
インストール
ASP.NET Coreの最小サポートバージョンは6.0
であることに注意してください。
Logto認証ミドルウェアを追加する
Startup.cs
(またはProgram.cs
)を開き、Logto認証ミドルウェアを登録するための以下のコードを追加します:
AddLogtoAuthentication
メソッドは以下のことを行います:
- デフォルトの認証スキームを
LogtoDefaults.CookieScheme
に設定します。 - デフォルトのチャレンジスキームを
LogtoDefaults.AuthenticationScheme
に設定します。 - デフォルトのサインアウトスキームを
LogtoDefaults.AuthenticationScheme
に設定します。 - 認証スキームにcookieとOpenID Connect認訓ハンドラを追加します。
サインイン
Logtoアプリケーション詳細ページのRedirect URIs
リストに以下のURIを追加します:
Logtoでサインインするには、ChallengeAsync
メソッドを使うことができます:
ChallengeAsync
メソッドはユーザーをLogtoのサインインページにリダイレクトします。
RedirectUri
プロパティは、認証後にユーザーをWebアプリケーションにリダイレクトするために使用されます。これはLogtoアプリケーション詳細ページで設定したリダイレクトURIとは異なることに注意してください:
- Logtoアプリケーション詳細ページのリダイレクトURIは、ユーザーがサインインした後にLogtoがユーザーをリダイレクトするURIです。
RedirectUri
プロパティは、Logto認証ミドルウェアで必要なアクションが取られた後にリダイレクトされるURIです。
アクションの順序は1 -> 2です。明確さのために、Logtoアプリケーション詳細ページのリダイレクトURIをLogtoリダイレクトURI、RedirectUri
プロパティをアプリケーションリダイレクトURIと呼びましょう。
LogtoリダイレクトURIはデフォルトで/Callback
となっており、特別な要件がなければそのままにしておくことができます。それを変更したい場合は、LogtoOptions
のCallbackPath
プロパティを設定します:
Logtoアプリケーション詳細ページの値を適宜更新するようにしてください。
サインアウト
Logtoアプリケーション詳細ページのPost sign-out redirect URIs
リストに以下のURIを追加します:
Logtoでサインアウトするには、SignOutAsync
メソッドを使用できます:
SignOutAsync
メソッドは認証クッキーをクリアし、ユーザーをLogtoのサインアウトページにリダイレクトします。
RedirectUri
プロパティは、サインアウト後にユーザーをWebアプリケーションにリダイレクトするために使用されます。これはLogtoアプリケーション詳細ページで設定したサインアウト後のリダイレクトURIと異なることに注意してください:
- Logtoアプリケーション詳細ページのサインアウト後のリダイレクトURIは、ユーザーがサインアウトした後にLogtoがユーザーをリダイレクトするURIです。
RedirectUri
プロパティは、Logto認証ミドルウェアで必要なアクションが取られた後にリダイレクトされるURIです。
アクションの順序は1 -> 2です。明確さのために、Logtoアプリケーション詳細ページのサインアウト後のリダイレクトURIをLogtoサインアウト後のリダイレクトURI、RedirectUri
プロパティをアプリケーションサインアウト後のリダイレクトURIと呼びましょう。
Logtoサインアウト後のリダイレクトURIはデフォルトで/SignedOutCallback
となっており、特別な要件がなければそのままにしておくことができます。それを変更したい場合は、LogtoOptions
のSignedOutCallbackPath
プロパティを設定します:
Logtoアプリケーション詳細ページの値を適宜更新してください。
サインイン/サインアウトボタンの実装(Razorページ)
まず、PageModel
にハンドラメソッドを追加します。例えば:
次に、Razorページ(html)にボタンを追加します:
<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>
これにより、ユーザーが認証されていない場合は"Sign in"ボタンが表示され、ユーザーが認証されている場合は"Sign out"ボタンが表示されます。
チェックポイント:Webアプリケーションの実行
次に、Webアプリケーションを実行し、Logtoでサインイン/サインアウトを試してみましょう:
- ブラウザでWebアプリケーションを開き、"Is authenticated: False"と"Sign in"ボタンが表示されるはずです。
- "Sign in"ボタンをクリックすると、Logtoのサインインページにリダイレクトされます。
- サインインした後、Webアプリケーションにリダイレクトされ、"Is authenticated: True"と"Sign out"ボタンが表示されるはずです。
- "Sign out"ボタンをクリックすると、Logtoのサインアウトページにリダイレクトされ、Webアプリケーションに戻ります。
統合中に問題が発生した場合は、お気軽に[email protected]までメールでお問い合わせいただくか、Discordサーバーに参加してください!