共用方式為


登入使用者的 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 應用程式中的 [登入] 按鈕會觸發 AccountController 控制器上的 SignIn 動作。 在舊版的 ASP.NET Core 範本中,Web 應用程式會內嵌 Account 控制器。 因為控制器現在是 Microsoft.Identity.Web.UI NuGet 套件的一部分,所以情況不再是如此。 如需詳細資訊,請參閱 AccountController.cs

此控制器也會處理 Azure AD B2C 應用程式。

在使用者登入應用程式之後,您便可以將他們登出。

登出

從 Web 應用程式登出所涉及的步驟,不只是從 Web 應用程式的狀態中移除已登入帳戶的相關資訊這麼簡單。 Web 應用程式還必須將使用者重新導向至 Microsoft 身分識別平台的 logout 端點才能登出。

當 Web 應用程式將使用者重新導向至 logout 端點時,此端點就會從瀏覽器中清除使用者的工作階段。 如果應用程式未移至 logout 端點,使用者不需要再次輸入認證便可向應用程式重新驗證。 原因是使用者會在 Microsoft 身分識別平台上擁有一個有效的登入工作階段。

若要深入了解,請參閱 Microsoft 身分識別平台和 OpenID Connect 通訊協定文件中的<傳送登出要求>一節。

應用程式註冊

在應用程式註冊期間,您會註冊前端通道登出 URL。 在我們的教學課程中,您已在 [驗證] 頁面上的 [前端通道登出 URL] 欄位中註冊 https://localhost:44321/signout-oidc。 如需詳細資訊,請參閱註冊 Web 應用程式

登出按鈕

在 ASP.NET 中,選取 Web 應用程式中的 [登出] 按鈕會觸發 AccountController 控制器上的 SignOut 動作 (如下所示)

<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 範本中,Web 應用程式會內嵌 Account 控制器。 因為控制器現在是 Microsoft.Identity.Web.UI NuGet 套件的一部分,所以情況不再是如此。 如需詳細資訊,請參閱 AccountController.cs

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

  • 呼叫 Signout(),讓 OpenID Connect 中介軟體連絡 Microsoft 身分識別平台的 logout 端點。 然後,端點會:

    • 從瀏覽器中清除工作階段 Cookie。
    • 叫回登出後重新導向 URI。 依預設,登出後重新導向 URI 會顯示已登出的檢視頁面 SignedOut.cshtml.cs。 此頁面也會提供作為 Microsoft.Identity.Web 的一部分。

攔截對 logout 端點的呼叫

登出後 URI 可讓應用程式參與全域登出。

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

通訊協定

如果您想要深入了解登出,請參閱可從 OpenID Connect 取得的通訊協定文件。

下一步