用于登录用户的 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 提供的协议文档。

后续步骤

  • 通过在以下多部分教程系列中生成可用户登录的 ASP.NET Core Web 应用来了解详细信息

  • 浏览 Microsoft 标识平台 Web 应用示例