用于登录用户的 Web 应用:登录和注销
了解如何在可将用户登录的 Web 应用的代码中添加登录。 然后了解如何让用户注销。
登录
登录由两个部分组成:
- HTML 页中的登录按钮
- 控制器 code-behind 中的登录操作
登录按钮
在 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 模板版本中,Account
控制器嵌入在 Web 应用中。 现在不再是这样,因为该控制器现在是“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
。 有关详细信息,请参阅注册 webApp 应用。
注销按钮
在 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 模板版本中,Account
控制器嵌入在 Web 应用中。 现在不再是这样,因为该控制器现在是“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 提供的协议文档。