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 | — | GA | ||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | GA |
ASP.NET Core | ASP.NET Core | Microsoft.AspNetCore.Authentication | Guía de inicio rápido | GA | ||
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | Guía de inicio rápido | GA | ||
Java | MSAL4J | msal4j | Guía de inicio rápido | GA | ||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | Tutorial | GA | ||
Node.js | MSAL Node | msal-node | Guía de inicio rápido | GA | ||
Python | MSAL Python | msal | GA | |||
Python | identity | identity | Guía de inicio rápido | -- |
(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 Azurehttps://login.microsoftonline.us/
para Azure US Governmenthttps://login.microsoftonline.de/
para Microsoft Entra Alemaniahttps://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 educativacommon
para iniciar sesión de los usuarios con cualquier cuenta profesional o educativa o cuenta personal de Microsoftconsumers
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.
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.Actualice el código en
ConfigureServices
para que use los métodosAddMicrosoftIdentityWebApp
yAddMicrosoftIdentityUI
.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();
En el método
Configure
de Startup.cs, habilite la autenticación con una llamada aapp.UseAuthentication();
yapp.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, esAzureAd
.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 opcionalsubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
entrue
, 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 enHttpContext.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.