Partekatu honen bidez:


Aplicación web que inicia sesión de usuarios: Configuración del código

En este artículo se describe cómo configurar el código para la aplicación web que inicia la sesión de los usuarios.

Bibliotecas de Microsoft que admiten aplicaciones web

Las siguientes bibliotecas de Microsoft se usan para proteger una aplicación web (y una API web):

Lenguaje/marco de trabajo Proyecto en
GitHub
Paquete Introducción
iniciado
Inicio de sesión de usuarios Acceso a API web Disponible con carácter general (GA) o
Versión preliminar pública1
.NET MSAL.NET Microsoft.Identity.Client La biblioteca no puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel Library cannot request ID tokens for user sign-in.2 Library cannot request access tokens for protected web APIs.2 GA
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Guía de inicio rápido La biblioteca puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca no puede solicitar tokens de acceso para las API web protegidas. GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Guía de inicio rápido La biblioteca puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Java MSAL4J msal4j Guía de inicio rápido La biblioteca puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Tutorial La biblioteca puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Node.js MSAL Node msal-node Guía de inicio rápido La biblioteca puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Python MSAL Python msal La biblioteca puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Python identity identity Guía de inicio rápido La biblioteca puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. --

(1) Los términos de licencia universal de Online Services se aplican a las bibliotecas que están en versión preliminar pública.

(2) La biblioteca Microsoft.IdentityModel solo valida los tokens, no puede solicitar tokens de id. ni de acceso.

Seleccione la pestaña correspondiente a la plataforma que le interese:

Los fragmentos de código de este artículo y los siguientes se extraen del capítulo 1 del tutorial incremental de aplicaciones web de ASP.NET Core.

Es posible que desee consultar este tutorial para obtener detalles completos de la implementación.

Archivos de configuración

Las aplicaciones web en las que los usuarios inician sesión con la Plataforma de identidad de Microsoft se configuran mediante archivos de configuración. Estos archivos deben especificar los siguientes valores:

  • La instancia en la nube si quiere que la aplicación se ejecute en las nubes nacionales, por ejemplo. Entre las diferentes opciones se incluyen;
    • https://login.microsoftonline.com/ para la nube pública de Azure
    • https://login.microsoftonline.us/ para Azure US Government
    • https://login.microsoftonline.de/ para Microsoft Entra Alemania
    • https://login.partner.microsoftonline.cn/common para Microsoft Entra China operado por 21Vianet
  • La audiencia en el id. de inquilino. Las opciones varían en función de si la aplicación es de un solo inquilino o multiinquilino.
    • El GUID del inquilino obtenido de Azure Portal para conectar usuarios de su organización. También puede usar un nombre de dominio.
    • organizations para iniciar sesión de los usuarios en cualquier cuenta profesional o educativa
    • common para iniciar sesión de los usuarios con cualquier cuenta profesional o educativa o cuenta personal de Microsoft
    • consumers para iniciar sesión solo a los usuarios con una cuenta personal de Microsoft
  • El Id. de cliente para la aplicación, tal y como se ha copiado de Azure Portal

También puede ver referencias a la autoridad, una concatenación de los valores de la instancia y del Id. de inquilino.

En ASP.NET Core, estos valores se encuentran en el archivo appsettings.json, en la sección "Microsoft Entra ID".

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id here]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

En ASP.NET Core, hay otro archivo (properties\launchSettings.json) que contiene la dirección URL (applicationUrl) y el puerto SSL/TLS (sslPort) de la aplicación, así como diversos perfiles.

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

En Azure Portal, los identificadores URI de redirección que se registran en la página Autenticación de la aplicación deben coincidir con estas direcciones URL. En el caso de los dos archivos de configuración anteriores, deben ser https://localhost:44321/signin-oidc. El motivo es que applicationUrl es http://localhost:3110, pero se especifica sslPort (44321). CallbackPath es /signin-oidc, tal y como se define en appsettings.json.

De la misma manera, el URI de cierre de sesión se establecería en https://localhost:44321/signout-oidc.

Nota:

SignedOutCallbackPath debe establecerse en el portal o en la aplicación para evitar conflictos al controlar el evento.

Código de inicialización

Las diferencias de código de inicialización dependen de la plataforma. En el caso de ASP.NET Core y ASP.NET, el inicio de sesión de los usuarios se delega en el middleware OpenID Connect. La plantilla de ASP.NET o ASP.NET Core genera aplicaciones web para el punto de conexión de Azure AD v1.0. Se necesita algo de configuración para adaptarlos a la Plataforma de identidad de Microsoft.

En las aplicaciones web de ASP.NET Core (y API web), la aplicación está protegida porque se dispone de un atributo Authorize en los controladores o en las acciones de estos. Este atributo comprueba que el usuario está autenticado. Antes del lanzamiento de .NET 6, el código de inicialización se encontraba en el archivo Startup.cs. Los nuevos proyectos de ASP.NET Core con .NET 6 ya no contienen un archivo Startup.cs. Su lugar lo ocupa el archivo Program.cs. El resto de este tutorial pertenece a .NET 5 o versiones anteriores.

Nota:

Si desea empezar directamente con las nuevas plantillas de ASP.NET Core para la Plataforma de identidad de Microsoft, que aprovecha Microsoft.Identity.Web, puede descargar un paquete NuGet en versión preliminar que contiene plantillas de proyecto para .NET 5.0. Después, una vez instalado, puede crear directamente una instancia de aplicaciones web ASP.NET Core (MVC o Blazor). Para obtener más información, consulte Plantillas de proyecto de aplicaciones web de Microsoft.Identity.Web. Este es el enfoque más sencillo, ya que realizará todos los pasos que se indican a continuación por usted.

Si prefiere iniciar el proyecto con el proyecto web de ASP.NET Core predeterminado actual en Visual Studio o mediante dotnet new mvc --auth SingleOrg o dotnet new webapp --auth SingleOrg, verá código como el siguiente:

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

Este código usa el paquete NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI heredado que se usa para crear una aplicación de Azure Active Directory v1.0. En este artículo se explica cómo crear una aplicación de la plataforma de identidad de Microsoft v2.0 que reemplaza ese código.

  1. Agregue los paquetes NuGet Microsoft.Identity.Web y Microsoft.Identity.Web.UI al proyecto. Quite el paquete NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI si aparece.

  2. Actualice el código en ConfigureServices para que use los métodos AddMicrosoftIdentityWebApp y AddMicrosoftIdentityUI.

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApp(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. En el método Configure de Startup.cs, habilite la autenticación con una llamada a app.UseAuthentication(); y app.MapControllers();.

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

En el código:

  • El método de extensión AddMicrosoftIdentityWebApp se define en Microsoft.Identity.Web.UI, que;

    • Configura las opciones para leer el archivo de configuración (aquí desde la sección "Microsoft Entra ID").
    • Configura las opciones de OpenID Connect para que la autoridad sea la Plataforma de identidad de Microsoft.
    • Valida el emisor del token.
    • Garantiza que las notificaciones correspondientes al nombre se asignan a partir de la notificación preferred_username del token de identificador.
  • Además del objeto de configuración, se puede especificar el nombre de la sección de configuración mediante una llamada a AddMicrosoftIdentityWebApp. De forma predeterminada, es AzureAd.

  • AddMicrosoftIdentityWebApp tiene otros parámetros para escenarios avanzados. Por ejemplo, el seguimiento de eventos de middleware de OpenID Connect puede ayudar a solucionar problemas de la aplicación web, si la autenticación no funciona. Al establecer el parámetro opcional subscribeToOpenIdConnectMiddlewareDiagnosticsEvents en true, se mostrará cómo se procesa la información mediante el conjunto de middleware de ASP.NET Core a medida que progresa de la respuesta HTTP a la identidad del usuario en HttpContext.User.

  • El método de extensión AddMicrosoftIdentityUI se define en Microsoft.Identity.Web.UI. Proporciona un controlador predeterminado para controlar el inicio y cierre de sesión.

Para obtener más información sobre cómo Microsoft.Identity.Web permite crear aplicaciones web, consulte Web Apps en microsoft-identity-web.

Paso siguiente