Aplicación web que inicia sesión de usuarios: Inicio y cierre de sesión

Obtenga información sobre cómo agregar el inicio de sesión al código de una aplicación web que permita iniciar sesión a los usuarios. A continuación, obtenga información sobre cómo permitirles cerrar sesión.

Inicio de sesión

El inicio de sesión consta de dos partes:

  • El botón de inicio de sesión en la página HTML
  • La acción de inicio de sesión en el código subyacente en el controlador

Botón de inicio de sesión

En ASP.NET Core, en el caso de las aplicaciones de la plataforma de identidad de Microsoft, el botón Iniciar sesión se expone en Views\Shared\_LoginPartial.cshtml (para una aplicación MVC) o Pages\Shared\_LoginPartial.cshtm (para una aplicación Razor). Solo se muestra cuando el usuario no está autenticado. Es decir, se muestra cuando el usuario todavía no ha iniciado sesión o ha cerrado la sesión. Por el contrario, el botón Cerrar sesión se muestra cuando el usuario ya ha iniciado sesión. Tenga en cuenta que el controlador de cuentas se define en el paquete NuGet Microsoft.Identity.Web.UI, en el área denominada 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>

Acción SignIn del controlador

En ASP.NET, seleccionar el botón Iniciar sesión en la aplicación web desencadena la acción SignIn en el controlador AccountController. En las versiones anteriores de las plantillas de ASP.NET Core, el controlador Account se incrustó con la aplicación web. Ya no es así porque, ahora, el controlador forma parte del paquete NuGet Microsoft.Identity.Web.UI. Consulte AccountController.cs para obtener más información.

Este controlador también controla las aplicaciones de Azure AD B2C.

Una vez que el usuario ha iniciado sesión en la aplicación, probablemente quiera permitirle cerrar la sesión.

Cierre de sesión

Cerrar sesión desde una aplicación web implica más que tan solo quitar la información sobre la cuenta con sesión iniciada del estado de la aplicación web. La aplicación web también debe redirigir al usuario al punto de conexión logout de la Plataforma de identidad de Microsoft para cerrar la sesión.

Cuando la aplicación web redirige al usuario a punto de conexión logout, este punto de conexión borra la sesión del usuario del explorador. Si la aplicación no llegó al punto de conexión logout, el usuario se volverá a autenticar en la aplicación sin volver a escribir sus credenciales. La razón es que tendrá una sesión de inicio de sesión único válida con la Plataforma de identidad de Microsoft.

Para más información, consulte la sección Envío de una solicitud de cierre de sesión en la documentación de la Plataforma de identidad de Microsoft y protocolo OpenID Connect.

Registro de la aplicación

Durante el registro de la aplicación, registrará una dirección URL de cierre de sesión del canal frontal. En este tutorial, ha registrado https://localhost:44321/signout-oidc en el campo Dirección URL de cierre de sesión de canal frontal de la página Autenticación. Para obtener información detallada, consulte Registrar la aplicación webApp.

Botón de cierre de sesión

En ASP.NET, seleccionar el botón Cerrar sesión en la aplicación web desencadena la acción SignOut en el controlador AccountController (más información a continuación).

<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>

Acción SignOut del controlador

En las versiones anteriores de las plantillas de ASP.NET Core, el controlador Account se incrustó con la aplicación web. Ya no es así porque, ahora, el controlador forma parte del paquete NuGet Microsoft.Identity.Web.UI. Consulte AccountController.cs para obtener más información.

  • Establece un URI de redirección de OpenID a /Account/SignedOut para volver a llamar al controlador cuando Microsoft Entra ID haya completado el cierre de sesión.

  • Llama a Signout(), que permite que el middleware de OpenID Connect se ponga en contacto con el punto de conexión logout de la Plataforma de identidad de Microsoft. A continuación, el punto de conexión:

    • Borra la cookie de sesión del explorador.
    • Devuelve el URI de redireccionamiento posterior al cierre de sesión. De forma predeterminada, el URI de redireccionamiento posterior al cierre de sesión muestra la página de vista que ha cerrado la sesión SignedOut.cshtml.cs. Esta página también se proporciona como parte de Microsoft.Identity.Web.

Interceptar la llamada al punto de conexión logout

El URI posterior al cierre de sesión permite a las aplicaciones participar en el cierre de sesión global.

El middleware OpenID Connect de ASP.NET Core permite a la aplicación interceptar la llamada al punto de conexión logout de la Plataforma de identidad de Microsoft al proporcionar un evento de OpenID Connect denominado OnRedirectToIdentityProviderForSignOut. Microsoft.Identity.Web lo controla automáticamente, lo que borra las cuentas en el caso de que la aplicación web llame a las API web.

Protocolo

Si quiere más información sobre el cierre de sesión, lea la documentación del protocolo, que está disponible en OpenID Connect.

Pasos siguientes

  • Para más información, cree una aplicación web de ASP.NET Core que inicie sesión a los usuarios en las siguientes series de tutoriales de varias partes

  • Exploración de ejemplos de aplicaciones web de la plataforma de identidad de Microsoft