登入使用者的 Web 應用程式:登入和註銷

瞭解如何將登入新增至登入使用者的 Web 應用程式程式代碼。 然後,瞭解如何讓他們註銷。

登入

登入包含兩個部分:

  • HTML 頁面上的登入按鈕
  • 控制器程式代碼後置中的登入動作

登入按鈕

在 ASP.NET Core 中,針對 Microsoft 身分識別平台 應用程式,[登入] 按鈕會公開於 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 身分識別平台 logout 端點以註銷。

當您的 Web 應用程式將使用者重新導向至 logout 端點時,此端點會從瀏覽器清除使用者的工作階段。 如果您的應用程式未移至 logout 端點,使用者將會重新驗證您的應用程式,而不會再次輸入其認證。 原因是他們將有有效的單一登錄會話與 Microsoft 身分識別平台。

若要深入瞭解,請參閱 Microsoft 身分識別平台 和 OpenID 連線 通訊協定檔中的傳送註銷要求一節。

應用程式註冊

在應用程式註冊期間,您會註冊前端通道註銷 URL。 在本教學課程中,您已在 https://localhost:44321/signout-oidc [驗證] 頁面上的 [前端通道註銷 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。

  • 將 OpenID 重新導向 URI 設定為 /Account/SignedOut ,以便在 Microsoft Entra ID 完成登出時呼叫控制器。

  • 呼叫 Signout(),讓 OpenID 連線 中間件連絡 Microsoft 身分識別平台 logout 端點。 然後,端點:

    • 從瀏覽器清除會話 Cookie。
    • 回呼註銷後重新導向 URI。 根據預設,註銷后重新導向 URI 會顯示已註銷的檢視頁面 SignedOut.cshtml.cs。 此頁面也提供為 Microsoft.Identity.Web 的一部分。

攔截對端點的 logout 呼叫

註銷後 URI 可讓應用程式參與全域註銷。

ASP.NET Core OpenID 連線 中間件可讓您的應用程式藉由提供名為的 OpenID 連線 事件來攔截對 Microsoft 身分識別平台 logout 端點的OnRedirectToIdentityProviderForSignOut呼叫。 這是由 Microsoft.Identity.Web 自動處理(在 Web 應用程式呼叫 Web API 的情況下清除帳戶)

通訊協定

如果您想要深入了解註銷,請閱讀 OpenID 連線 提供的通訊協定檔。

下一步