- ユーザーがサインインすると Auth0 Universal Login にリダイレクトする
- コールバックを処理し、セッションを Cookie に保存する
- 認証済みユーザーの名前、メールアドレス、ユーザープロファイル画像を表示する
- アプリと Auth0 の両方からユーザーをサインアウトする
このガイドは、OWIN を使用する クラシック ASP.NET (.NET Framework) アプリケーションを対象としています。アプリケーションがすでに ASP.NET Core で実行されている場合は、代わりに
Auth0.AspNetCore.Authentication SDK を使用してください。前提条件
- Auth0 アカウント - 無料でサインアップ
- OWIN が有効な、.NET Framework を対象とする既存の ASP.NET MVC アプリケーション、または Visual Studio の ASP.NET Web Application (.NET Framework) → MVC テンプレートから作成した新規アプリケーション
- Visual Studio 2019 以降 (または .NET Framework MVC プロジェクトをサポートする任意の IDE)
手順
Auth0 アプリケーションを設定する
Auth0を使用するすべてのアプリケーションは、Auth0 Dashboardに登録する必要があります。Auth0が発行するクライアントIDとドメインを使用して、アプリはAuth0と通信します。Auth0アプリケーションの作成と設定は、Auth0 CLIを使って自動的に行うか、Dashboardから手動で行うことができます。
- CLI
- Dashboard
プロジェクトのルートディレクトリで次のコマンドを実行します。これにより Auth0 アプリケーションが作成され、認証情報が設定済みの、すぐに貼り付け可能な 出力された 2 行の
Web.config スニペットが出力されます。- Mac/Linux
- Windows (PowerShell)
<add> を、Web.config の <appSettings> セクションにコピーします。Web.config
アプリを別のポートで実行している場合は、上記の各 URL の
3000 を実際のポート番号に置き換えてください。NuGet パッケージをインストールする
必要な 2 つの OWIN ミドルウェア パッケージをプロジェクトに追加します。
| パッケージ | 用途 |
|---|---|
Microsoft.Owin.Security.OpenIdConnect | Auth0 での OpenID Connect (OIDC) 認証フローを処理します |
Microsoft.Owin.Security.Cookies | ログイン後、ブラウザーの Cookie にユーザー セッションを保持します |
- パッケージ マネージャー コンソール
- dotnet CLI
Visual Studio で Package Manager Console (
Tools → NuGet Package Manager → Package Manager Console) を開き、次を実行します。OWIN の Cookie ミドルウェアを
System.Web の Cookie と併用すると、問題が発生することがあります。Cookie が二重に設定される問題が発生した場合は、System.Web cookie integration issues のガイダンスを参照してください。OWIN ミドルウェアを設定する
OWIN ミドルウェアは、スタートアップ クラスで登録します。プロジェクトにすでに OWIN スタートアップ クラス (通常は
App_Start/Startup.Auth.cs) がある場合は、その ConfigureAuth メソッドを更新してください。ない場合は、ここでファイルを作成します。Cookie ミドルウェア と OpenID Connect ミドルウェア の両方が必要であり、必ず次の順序で登録する必要があります。- Cookie ミドルウェア - 認証済みユーザー セッションを保存します
- OpenID Connect ミドルウェア - Auth0 のログイン フローとログアウト フローを処理します
App_Start/Startup.Auth.cs
ConfigureAuth が Startup.cs の Configuration メソッド内で呼び出されるようにしてください。Startup.cs
AuthenticationType は "Auth0" に設定されています。この文字列は、次の手順でログインの Challenge をトリガーする際に使用します。RedirectToIdentityProvider 通知はログアウト リクエストを横取りし、適切な Auth0 のログアウト URL を構築します。ログイン、ログアウト、ユーザープロファイル用のアクションを追加
Login、Logout、UserProfile の 3 つのアクションを含む Controllers/AccountController.cs を作成します。Controllers/AccountController.cs
Login-"Auth0"スキームでChallengeを呼び出します。OIDC ミドルウェアがこれを受け取り、ユーザーを Auth0 Universal Login にリダイレクトします。サインインに成功すると、ユーザーはreturnUrlにリダイレクトされます。UserProfile-ClaimsIdentityから認証済みユーザーのクレームを読み取り、UserProfileViewModelを通じてビューに渡します。[Authorize]属性により、未認証のユーザーはまずログイン画面にリダイレクトされます。Logout-SignOutを 2 回呼び出します。1 回はローカルの Cookie セッションをクリアするため、もう 1 回はユーザーを Auth0 からサインアウトさせるためです (これにより、アクティブな SSO セッションも終了します) 。
Models/UserProfileViewModel.cs を作成します:Models/UserProfileViewModel.cs
チェックポイント
アプリケーションを実行し、/Account/Login にアクセスします。Auth0 の Universal Login ページにリダイレクトされるはずです。サインイン後は、アプリケーションのホームページにリダイレクトされるはずです。Redirect URI エラーが表示される場合は、Auth0 のアプリケーション設定にあるコールバック URL が、アプリケーションの実行 URL と完全に一致していることを確認してください。ユーザープロファイル画面を追加する
サインイン中のユーザー情報を表示するために、このビューは、Auth0 が IDトークンを返す際に OIDC ミドルウェアが抽出したクレームを基に設定された
Views/Account/UserProfile.cshtml を作成します。Views/Account/UserProfile.cshtml
UserProfileViewModel を受け取ります。チェックポイント
ログイン後、/Account/UserProfile に移動してください。名前、メールアドレス、プロフィール画像が表示されるはずです。名前またはメールアドレスが空の場合は、OpenIdConnectAuthenticationOptions の Scope に "openid profile email" が含まれていることを確認してください。レイアウトにログインとログアウトのリンクを追加する
ユーザーの認証状態に応じてログインリンクとログアウトリンクが表示されるよう、レイアウト内でナビゲーションリンクを表示する
Views/Shared/_Layout.cshtml を更新します。Views/Shared/_Layout.cshtml
<nav>要素内の適切な場所に、これを追加します。チェックポイント
アプリケーションを実行します。ナビゲーションにLog inリンクが表示されるはずです。サインイン後は、そのリンクが自分の名前 (ユーザープロファイルへのリンク) に変わり、Log outリンクも表示されます。Log outをクリックすると、サインアウトしてホームページに戻るはずです。これで、ASP.NET OWIN アプリケーションで動作する Auth0 統合の設定が完了しました。ユーザーは Auth0 Universal Login でログインし、ユーザープロファイルを表示して、ログアウトできます。
よくある問題
ログイン後のリダイレクト URI の不一致
ログイン後のリダイレクト URI の不一致
問題: ユーザーのサインイン後に、Auth0 で “redirect_uri mismatch” または “callback URL mismatch” エラーが表示されます。解決策: アプリから Auth0 に送信するリダイレクト URI は、Auth0 アプリケーション設定の Allowed Callback URLs のいずれか 1 つと完全に一致している必要があります。プロトコル (
http と https) 、ポート番号、パス、末尾のスラッシュに違いがないか確認してください。ログインループ — アプリが Auth0 にリダイレクトされ続ける
ログインループ — アプリが Auth0 にリダイレクトされ続ける
問題: サインインに成功した後、認証済みページが表示されず、アプリがすぐに Auth0 にリダイレクトされます。解決策: ミドルウェアが正しい順序で登録され、OWIN パイプラインが初期化されていることを確認してください。
- Cookie ミドルウェアは、
ConfigureAuthで OpenID Connect ミドルウェアより前に登録する必要があります。 app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType)は、ConfigureAuth内の最初の呼び出しである必要があります。- OWIN パイプラインが正しく初期化されるように、
[assembly: OwinStartup(typeof(Startup))]属性が必要です。
App_Start/Startup.Auth.cs
ログアウト後にユーザーがリダイレクトされない
ログアウト後にユーザーがリダイレクトされない
問題: ログアウトをクリックするとユーザーは Auth0 からサインアウトされますが、アプリケーションには戻りません。解決策:
RedirectToIdentityProvider 通知内で、Auth0 のログアウト URL に returnTo クエリパラメーターを追加してください。戻り先 URL も、Auth0 アプリケーション設定の Allowed Logout URLs に登録されている必要があります。App_Start/Startup.Auth.cs
プロフィール画像またはメールアドレスが空
プロフィール画像またはメールアドレスが空
問題: ログイン後、
Model.ProfileImage または Model.EmailAddress が null になります。解決策: OpenIdConnectAuthenticationOptions の Scope に "openid profile email" が含まれていることを確認してください。profile スコープでは名前と画像が、email スコープではメールアドレスが提供されます。App_Start/Startup.Auth.cs
起動時にドメインまたはクライアントIDの値が null になる
起動時にドメインまたはクライアントIDの値が null になる
問題: アプリケーションの起動時に null 参照例外または構成例外がスローされます。解決策:
Web.config の <appSettings> に auth0:Domain と auth0:ClientId の両方が存在すること、および適切な Web.config 変換が読み込まれる正しいビルド構成 (Debug/Release) で実行していることを確認してください。Web.config
高度な使い方
ログインパラメーターのカスタマイズ
ログインパラメーターのカスタマイズ
Startup.Auth.cs の RedirectToIdentityProvider 通知を変更すると、Auth0 のログインページにカスタムパラメーターを渡せます。App_Start/Startup.Auth.cs
ユーザーに代わって API を呼び出す
ユーザーに代わって API を呼び出す
アクセストークンを使用して API を呼び出すには、OIDC リダイレクト時に 次に、認証済みユーザーのクレームからアクセストークンを取得します。
audience と必要な API スコープを要求します。App_Start/Startup.Auth.cs
Controllers/ApiController.cs
追加リソース
サンプルアプリケーション
このクイックスタートの完全な動作サンプル
Katana / OWIN ドキュメント
Microsoft 公式の OWIN/Katana リファレンス
コミュニティフォーラム
Auth0 コミュニティでサポートを受ける