- ユーザーがサインインすると 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)
ステップ
1
Auth0アプリケーションを設定する
Auth0を使用するすべてのアプリケーションは、Auth0 Dashboardに登録する必要があります。Auth0はClient IDとドメインを発行します。アプリはこれらを使用してAuth0と通信します。CLI コマンドを実行して Auth0 アプリを自動的に設定するか、Auth0 Dashboardから手動で設定するかを選択できます。
- CLI
- Dashboard
プロジェクトのルートディレクトリで次のコマンドを実行し、Auth0 アプリケーションを作成して
Web.config の値を生成します。このコマンドは次の処理を行います:
- 認証済みかどうかを確認します (必要に応じてログインを求められます)
http://localhost:5000用に設定された Auth0 Regular Web Application を作成しますauth0:Domain、auth0:ClientId、auth0:ClientSecretを含むWeb.configの値を生成します
アプリを別のポートで実行している場合は、上記のすべてのURLの
3000 を実際のポート番号に置き換えてください。2
NuGet パッケージをインストール
必要な 2 つの OWIN ミドルウェア パッケージをプロジェクトに追加します。
- パッケージ マネージャー コンソール
- dotnet CLI
Visual Studio で Package Manager Console (
Tools → NuGet Package Manager → Package Manager Console) を開き、次を実行します。OWIN cookie middleware を
System.Web の cookie と併用すると、問題が発生することがあります。cookie が二重に設定される問題が発生した場合は、System.Web cookie integration issues のガイダンスを参照してください。3
OWIN ミドルウェアを設定する
OWIN ミドルウェアはスタートアップ クラスで登録します。プロジェクトにすでに OWIN のスタートアップ クラス (通常は
App_Start/Startup.Auth.cs) がある場合は、その ConfigureAuth メソッドを更新してください。ない場合は、このファイルを作成してください。cookie middleware と OpenID Connect middleware の両方が必要で、必ず次の順序で登録する必要があります。- Cookie middleware - 認証済みユーザーのセッションを保存します
- OpenID Connect middleware - Auth0 のログイン フローとログアウト フローを処理します
App_Start/Startup.Auth.cs
ConfigureAuth が Startup.cs の Configuration メソッドから呼び出されるようにしてください:Startup.cs
AuthenticationType は "Auth0" に設定されています。この文字列は、次のステップでログインチャレンジをトリガーする際に使用されます。RedirectToIdentityProvider 通知はログアウト リクエストを捕捉し、適切な Auth0 のログアウト URL を生成します。4
ログイン、ログアウト、プロファイルのアクションを追加する
Login、Logout、UserProfile の 3 つのアクションを含む Controllers/AccountController.cs を作成します。Controllers/AccountController.cs
Login-"Auth0"スキームでChallengeを呼び出します。OIDC ミドルウェアがこれを捕捉し、ユーザーを Auth0 Universal Login にリダイレクトします。サインインに成功すると、ユーザーはreturnUrlにリダイレクトされます。UserProfile-ClaimsIdentityから認証済みユーザーの claims を読み取り、UserProfileViewModelを介してビューに渡します。[Authorize]属性により、未認証のユーザーはまずログインにリダイレクトされます。Logout-SignOutを 2 回呼び出します。1 回目はローカルの Cookie セッションをクリアするため、2 回目はユーザーを Auth0 からサインアウトするためです (これにより、アクティブな SSO セッションも終了します) 。
Models/UserProfileViewModel.cs を作成します:Models/UserProfileViewModel.cs
チェックポイント
アプリケーションを実行し、/Account/Login にアクセスします。Auth0 Universal Login ページにリダイレクトされるはずです。サインイン後は、アプリケーションのホームページにリダイレクトされて戻ります。Redirect URI エラーが表示される場合は、Auth0 アプリケーションの設定にある callback URL が、アプリケーションの実行 URL と完全に一致していることを確認してください。5
プロファイルビューを追加する
ログイン中のユーザー情報を表示するために、ビューは、Auth0 が ID トークンを返したときに OIDC ミドルウェアが抽出したクレームをもとに生成された
Views/Account/UserProfile.cshtml を作成します:Views/Account/UserProfile.cshtml
UserProfileViewModel を受け取ります。チェックポイント
ログイン後、/Account/UserProfile に移動します。名前、メールアドレス、プロフィール画像が表示されるはずです。名前またはメールアドレスが空の場合は、OpenIdConnectAuthenticationOptions の Scope に "openid profile email" が含まれていることを確認してください。6
レイアウトにログインとログアウトのリンクを追加する
ユーザーの認証状態に応じてログインリンクとログアウトリンクが表示されるよう、レイアウト内でナビゲーションリンクを表示している箇所の
Views/Shared/_Layout.cshtml を更新します。Views/Shared/_Layout.cshtml
<nav> 要素内に、これを追加します。チェックポイント
アプリケーションを実行します。ナビゲーションに ログイン リンクが表示されるはずです。サインインすると、それがあなたの名前 (プロファイルへのリンク) と ログアウト リンクに変わるはずです。ログアウト をクリックするとサインアウトされ、ホームページに戻るはずです。これで、ASP.NET OWIN アプリケーションで動作する Auth0 連携を利用できるようになりました。ユーザーは Auth0 Universal Login を通じてログインし、自分のプロファイルを表示して、ログアウトできます。
よくある問題
ログイン後の Redirect URI の不一致
ログイン後の Redirect URI の不一致
問題: ユーザーのサインイン後に、Auth0 で “redirect_uri mismatch” または “callback URL mismatch” エラーが表示されます。解決策: アプリが Auth0 に送信する Redirect URI は、Auth0 アプリケーション設定の Allowed Callback URLs のいずれかと完全に一致している必要があります。プロトコル (
http と https) 、ポート番号、パス、末尾のスラッシュの違いを確認してください。ログイン ループ — アプリが Auth0 にリダイレクトされ続ける
ログイン ループ — アプリが Auth0 にリダイレクトされ続ける
問題: サインインに成功した後、認証済みのページが表示されず、すぐに Auth0 にリダイレクトされます。解決策: ミドルウェアが正しい順序で登録されており、OWIN パイプラインが初期化されていることを確認してください。
- cookie middleware は
ConfigureAuth内で OpenID Connect ミドルウェアより前に登録する必要があります。 app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType)はConfigureAuth内で最初に呼び出す必要があります。- OWIN パイプラインが正しく初期化されるように、
[assembly: OwinStartup(typeof(Startup))]属性が存在している必要があります。
App_Start/Startup.Auth.cs
ログアウト後にユーザーがアプリへリダイレクトされない
ログアウト後にユーザーがアプリへリダイレクトされない
問題: ログアウトをクリックするとユーザーは Auth0 からサインアウトされますが、アプリケーションに戻りません。解決策:
RedirectToIdentityProvider 通知で、Auth0 の logout URL に returnTo クエリパラメータを追加してください。戻り先 URL は、Auth0 アプリケーション設定の Allowed Logout URLs にも登録されている必要があります。App_Start/Startup.Auth.cs
プロフィール画像またはメールアドレスが空になる
プロフィール画像またはメールアドレスが空になる
問題: ログイン後、
Model.ProfileImage または Model.EmailAddress が null になります。解決策: OpenIdConnectAuthenticationOptions の Scope に "openid profile email" が含まれていることを確認してください。profile scope は名前とプロフィール画像を提供し、email scope はメールアドレスを提供します。App_Start/Startup.Auth.cs
起動時に Domain または Client ID の値が null になる
起動時に Domain または Client 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
追加リソース
サンプルアプリケーション
このQuickstartの完全な動作サンプル
Katana / OWIN ドキュメント
Microsoft の公式 OWIN/Katana リファレンス
コミュニティフォーラム
Auth0コミュニティでサポートを受ける