Skip to main content
Auth0 を使用すると、ASP.NET OWIN アプリケーションに数分で認証を追加できます。このガイドでは、従来の ASP.NET OWIN アプリケーションにログイン、ログアウト、ユーザープロファイルの表示を追加する方法を説明します。 このガイドを終えると、アプリケーションで次のことができるようになります。
  • ユーザーがサインインすると 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から手動で設定するかを選択できます。
プロジェクトのルートディレクトリで次のコマンドを実行し、Auth0 アプリケーションを作成して Web.config の値を生成します。
このコマンドは次の処理を行います:
  1. 認証済みかどうかを確認します (必要に応じてログインを求められます)
  2. http://localhost:5000 用に設定された Auth0 Regular Web Application を作成します
  3. auth0:Domainauth0:ClientIdauth0:ClientSecret を含む Web.config の値を生成します
アプリを別のポートで実行している場合は、上記のすべてのURLの 3000 を実際のポート番号に置き換えてください。
2

NuGet パッケージをインストール

必要な 2 つの OWIN ミドルウェア パッケージをプロジェクトに追加します。
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 middlewareOpenID Connect middleware の両方が必要で、必ず次の順序で登録する必要があります。
  1. Cookie middleware - 認証済みユーザーのセッションを保存します
  2. OpenID Connect middleware - Auth0 のログイン フローとログアウト フローを処理します
App_Start/Startup.Auth.cs
ConfigureAuthStartup.csConfiguration メソッドから呼び出されるようにしてください:
Startup.cs
AuthenticationType"Auth0" に設定されています。この文字列は、次のステップでログインチャレンジをトリガーする際に使用されます。RedirectToIdentityProvider 通知はログアウト リクエストを捕捉し、適切な Auth0 のログアウト URL を生成します。
4

ログイン、ログアウト、プロファイルのアクションを追加する

LoginLogoutUserProfile の 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

プロファイルビューを追加する

ログイン中のユーザー情報を表示するために、Views/Account/UserProfile.cshtml を作成します:
Views/Account/UserProfile.cshtml
ビューは、Auth0 が ID トークンを返したときに OIDC ミドルウェアが抽出したクレームをもとに生成された UserProfileViewModel を受け取ります。
チェックポイント
ログイン後、/Account/UserProfile に移動します。名前、メールアドレス、プロフィール画像が表示されるはずです。名前またはメールアドレスが空の場合は、OpenIdConnectAuthenticationOptionsScope"openid profile email" が含まれていることを確認してください。
6

レイアウトにログインとログアウトのリンクを追加する

ユーザーの認証状態に応じてログインリンクとログアウトリンクが表示されるよう、Views/Shared/_Layout.cshtml を更新します。
Views/Shared/_Layout.cshtml
レイアウト内でナビゲーションリンクを表示している箇所の <nav> 要素内に、これを追加します。
チェックポイント
アプリケーションを実行します。ナビゲーションに ログイン リンクが表示されるはずです。サインインすると、それがあなたの名前 (プロファイルへのリンク) と ログアウト リンクに変わるはずです。ログアウト をクリックするとサインアウトされ、ホームページに戻るはずです。
これで、ASP.NET OWIN アプリケーションで動作する Auth0 連携を利用できるようになりました。ユーザーは Auth0 Universal Login を通じてログインし、自分のプロファイルを表示して、ログアウトできます。

よくある問題

問題: ユーザーのサインイン後に、Auth0 で “redirect_uri mismatch” または “callback URL mismatch” エラーが表示されます。解決策: アプリが Auth0 に送信する Redirect URI は、Auth0 アプリケーション設定の Allowed Callback URLs のいずれかと完全に一致している必要があります。プロトコル (httphttps) 、ポート番号、パス、末尾のスラッシュの違いを確認してください。
問題: サインインに成功した後、認証済みのページが表示されず、すぐに 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 になります。解決策: OpenIdConnectAuthenticationOptionsScope"openid profile email" が含まれていることを確認してください。profile scope は名前とプロフィール画像を提供し、email scope はメールアドレスを提供します。
App_Start/Startup.Auth.cs
問題: アプリケーションの起動時に null 参照または構成例外が発生します。解決策: Web.config<appSettings>auth0:Domainauth0:ClientId の両方が存在すること、また、正しい Web.config 変換が読み込まれるビルド構成 (Debug/Release) で実行していることを確認してください。
Web.config

高度な使い方

Startup.Auth.csRedirectToIdentityProvider 通知を変更すると、Auth0のログインページにカスタムパラメーターを渡せます。
App_Start/Startup.Auth.cs
アクセストークンを使って API を呼び出すには、OIDC リダイレクト時に audience と必要な API スコープを要求します。
App_Start/Startup.Auth.cs
次に、認証済みユーザーのクレームからアクセストークンを取得します。
Controllers/ApiController.cs

追加リソース

サンプルアプリケーション

このQuickstartの完全な動作サンプル

Katana / OWIN ドキュメント

Microsoft の公式 OWIN/Katana リファレンス

コミュニティフォーラム

Auth0コミュニティでサポートを受ける