登入使用者的 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 取得的通訊協定文件。
下一步
若要深入了解,請在下列多部分教學課程系列中建置可登入使用者的 ASP.NET Core Web 應用程式
探索 Microsoft 身分識別平台 Web 應用程式範例