次の方法で共有


ユーザーをサインインさせる Web アプリ: サインインとサインアウト

適用対象: 白いチェック マーク記号が付いた緑の円。 従業員テナント 灰色の X 記号が付いた白い円。 外部テナント (詳細はこちら)

ユーザーをサインインさせる Web アプリのコードにサインインを追加する方法について学習します。 次に、ユーザーをサインアウトさせる方法について学習します。

サインイン

サインインは、次の 2 つの部分から構成されます。

  • HTML ページのサインイン ボタン
  • コントローラーの分離コードでのサインイン アクション

サインイン ボタン

ASP.NET Core では、Microsoft ID プラットフォーム アプリケーションの場合、 [サインイン] ボタンは Views\Shared\_LoginPartial.cshtml (MVC アプリの場合) または Pages\Shared\_LoginPartial.cshtm (Razor アプリの場合) 上に表示されます。 ユーザーが認証済みでない場合にのみ、表示されます。 つまり、ユーザーがまだサインインしていない場合やサインアウト済みの場合に表示されます。反対に、ユーザーが既にサインインしている場合は、 [サインアウト] ボタンが表示されます。 アカウント コントローラーは、Microsoft.Identity.Web.UI NuGet パッケージの MicrosoftIdentity という名前の領域で定義されます。

<ul class="navbar-nav">
  @if (User.Identity.IsAuthenticated)
  {
    <li class="nav-item">
        <span class="navbar-text text-dark">Hello @User.Identity.Name!</span>
    </li>
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
    </li>
  }
  else
  {
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
    </li>
  }
</ul>

コントローラーの SignIn アクション

ASP.NET では、Web アプリの [サインイン] ボタンを選択すると、SignIn コントローラーの AccountController アクションがトリガーされます。 以前のバージョンの ASP.NET Core テンプレートでは、Account コントローラーは Web アプリに埋め込まれていました。 現在では、コントローラーは Microsoft.Identity.Web.UI NuGet パッケージの一部になったため、これは当てはまらなくなりました。 詳細については、AccountController.cs を参照してください。

このコントローラーでは、Azure AD B2C アプリケーションも処理されます。

ユーザーがアプリにサインインした後、ユーザーがサインアウトできるようにすることが必要です。

サインアウト

Web アプリからのサインアウトに必要なのは、サインインしたアカウントに関する情報を Web アプリの状態から削除することだけではありません。 サインアウトするには、Web アプリによってユーザーが Microsoft ID プラットフォーム logout エンドポイントにリダイレクトされる必要もあります。

Web アプリによってユーザーが logout エンドポイントにリダイレクトされると、このエンドポイントでは、ユーザーのセッションがブラウザーから消去されます。 アプリが logout エンドポイントに移動しなかった場合、ユーザーは資格情報を再入力せずにアプリに再認証できます。 理由は、Microsoft ID プラットフォームとの有効なシングル サインイン セッションがあるからです。

詳細については、Microsoft ID プラットフォームの サインアウト要求の送信 に関するセクション と OpenID Connect プロトコルのドキュメントを 参照してください。

アプリケーションの登録

アプリケーションの登録時に、フロントチャネル ログアウト URL を登録します。 このチュートリアルでは、 https://localhost:44321/signout-oidc ページの [Front-channel logout URL](フロントチャネル ログアウト URL) フィールドに と登録しました。 詳細については、「webApp アプリを登録する」を参照してください。

サインアウト ボタン

ASP.NET では、Web アプリ上の [サインアウト] ボタンを選択すると、SignOut コントローラー上の AccountController アクションがトリガーされます (上記を参照)

<ul class="navbar-nav">
  @if (User.Identity.IsAuthenticated)
  {
    <li class="nav-item">
        <span class="navbar-text text-dark">Hello @User.Identity.Name!</span>
    </li>
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
    </li>
  }
  else
  {
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
    </li>
  }
</ul>

コントローラーの SignOut アクション

以前のバージョンの ASP.NET Core テンプレートでは、Account コントローラーは Web アプリに埋め込まれていました。 現在では、コントローラーは Microsoft.Identity.Web.UI NuGet パッケージの一部になったため、これは当てはまらなくなりました。 詳細については、AccountController.cs を参照してください。

  • Microsoft Entra ID がサインアウトを完了したときにコントローラーが呼び出されるように、OpenID リダイレクト URI を /Account/SignedOut に設定します。

  • OpenID Connect ミドルウェアで Microsoft ID プラットフォームの Signout() エンドポイントに連絡できるようにする logout を呼び出します。 その後、エンドポイントは次のことを行います。

    • ブラウザーからセッション Cookie を消去します。
    • ログアウト後のリダイレクト URI をコールバックします。 既定では、ログアウト後のリダイレクト URI によって、サインアウト済みビューのページ SignedOut.cshtml.cs が表示されます。 このページは、Microsoft.Identity.Web の一部としても提供されています。

logout エンドポイントへの呼び出しをインターセプトする

ログアウト後 URI を使用すると、アプリケーションはグローバル サインアウトに参加できます。

ASP.NET Core OpenID Connect ミドルウェアでは、logout という名前の OpenID Connect イベントを提供することで、お客様のアプリで Microsoft ID プラットフォーム OnRedirectToIdentityProviderForSignOut エンドポイントへの呼び出しをインターセプトすることができます。 これは、Microsoft.Identity.Web によって自動的に処理されます (Web アプリが Web API を呼び出す場合にアカウントがクリアされます)。

プロトコル

サインアウトの詳細については、 OpenID Connect から入手できるプロトコルのドキュメントを参照してください。

次のステップ