Compartir a través de


Configuración de inicio de sesión externo de la cuenta Microsoft con ASP.NET Core

Por Valeriy Novytskyy y Rick Anderson

En este ejemplo se muestra cómo permitir que los usuarios inicien sesión con su cuenta profesional, educativa o personal de Microsoft mediante el proyecto de ASP.NET Core creado en la página anterior.

Creación de la aplicación en el Centro de administración de Microsoft Entra

Creación de un secreto de cliente

Genere un secreto de cliente en el Centro de administración de Microsoft Entra siguiendo los pasos descritos en Registrar una aplicación con la plataforma de identidad de Microsoft: Agregar credenciales.

Almacenar el identificador y el secreto de cliente de Microsoft

Almacene configuraciones confidenciales como el identificador de aplicación (cliente) de Microsoft y el secreto de cliente creado en el paso anterior con el Administrador de secretos . Para este ejemplo, siga estos pasos:

  1. Inicialice el proyecto para el almacenamiento de secretos según las instrucciones en Activar almacenamiento de secretos.

  2. Almacene la configuración confidencial en el almacén de secretos local con las claves secretas Authentication:Microsoft:ClientId y Authentication:Microsoft:ClientSecret. El <client-id> aparece en la hoja Registros de aplicaciones de Azure en id. de aplicación (cliente). El <client-secret> aparece en Certificados y secretos como Valor, no como el Identificador de secreto.

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
    

El separador de : no funciona con claves jerárquicas de variables de entorno en todas las plataformas. Por ejemplo, el separador de : no es compatible con Bash. El carácter de subrayado doble, __, tiene las siguientes características:

  • Compatible con todas las plataformas.
  • Se reemplaza automáticamente por dos puntos :.

Configuración de la autenticación de cuenta Microsoft

Agregue el servicio de autenticación al Program:

builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
    microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
    microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});

La sobrecarga de AddAuthentication(IServiceCollection, String) establece la propiedad DefaultScheme. La sobrecarga de AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) permite configurar las opciones de autenticación, que se pueden usar para configurar esquemas de autenticación predeterminados con distintos fines. Las llamadas posteriores a AddAuthentication sobrescriben las propiedades de AuthenticationOptions configuradas anteriormente.

Los métodos de extensión de AuthenticationBuilder que registran un controlador de autenticación solo se pueden llamar una vez por esquema de autenticación. Existen sobrecargas que permiten configurar las propiedades del esquema, el nombre del esquema y el nombre para mostrar.

Para obtener más información sobre las opciones de configuración admitidas por la autenticación de la cuenta Microsoft, consulte la referencia de api de MicrosoftAccountOptions. Esto se puede usar para solicitar información diferente sobre el usuario.

Inicio de sesión con cuenta Microsoft

  • Ejecute la aplicación y seleccione Iniciar sesión. Aparece una opción para iniciar sesión con Microsoft.
  • Seleccione esta opción para iniciar sesión con Microsoft para ir a Microsoft para la autenticación. Después de iniciar sesión con su cuenta Microsoft, se le pedirá que permita que la aplicación acceda a su información:
  • Seleccione para volver al sitio web donde establecer el correo electrónico.

Ahora ha iniciado sesión con sus credenciales de Microsoft.

Varios proveedores de autenticación

Cuando la aplicación requiera varios proveedores, encadene los métodos de extensión del proveedor de AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Reenvío de información de solicitud con un servidor proxy o un equilibrador de carga

Si la aplicación se implementa detrás de un servidor proxy o un equilibrador de carga, es posible que parte de la información de solicitud original se reenvíe a la aplicación en los encabezados de solicitud. Esta información suele incluir el esquema de solicitud seguro (https), el host y la dirección IP del cliente. Las aplicaciones no leen automáticamente estos encabezados de solicitud para detectar y usar la información de solicitud original.

El esquema se usa en la generación de vínculos que afecta al flujo de autenticación con proveedores externos. La pérdida del esquema seguro (https) da como resultado que la aplicación genere direcciones URL de redirección incorrectas no seguras.

Use middleware de encabezados reenviados para que la información de solicitud original esté disponible para la aplicación para procesar las solicitudes.

Para obtener más información, consulte Configurar ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.

Solución de problemas

  • Si el proveedor de cuentas Microsoft redirige a una página de error de inicio de sesión, anote los parámetros de cadena de consulta de título y descripción del error directamente después del # (hashtag) en el URI.

    Aunque el mensaje de error parece indicar un problema con la autenticación de Microsoft, la causa más común es que el URI de la aplicación no coincida con ninguno de los URI de redirección especificados para la plataforma web .

  • Si Identity no se configura llamando a services.AddIdentity en ConfigureServices, al intentar autenticarse se producirá una ArgumentException: La opción 'SignInScheme' debe proporcionarse. La plantilla de proyecto que se usa en este ejemplo garantiza que esto se realice.

  • Si la base de datos del sitio no se ha creado aplicando la migración inicial, se produce el error en una operación de base de datos mientras se procesa la solicitud. Pulse Aplicar migraciones para crear la base de datos y actualizar para omitir el error y continuar.

Pasos siguientes

  • En este artículo se muestra cómo autenticarse con Microsoft. Siga un enfoque similar para autenticarse con otros proveedores enumerados en la página anterior .
  • Una vez publicado el sitio web en la aplicación web de Azure, cree un nuevo secreto de cliente en el Centro de administración de Microsoft Entra.
  • Establezca el Authentication:Microsoft:ClientId y Authentication:Microsoft:ClientSecret como configuración de la aplicación en el Centro de administración de Microsoft Entra. El sistema de configuración está configurado para leer claves de variables de entorno.

En este ejemplo se muestra cómo permitir que los usuarios inicien sesión con su cuenta profesional, educativa o personal de Microsoft mediante el proyecto de ASP.NET Core 3.0 creado en la página anterior.

Creación de la aplicación en el Centro de administración de Microsoft Entra

Creación de un secreto de cliente

Genere un secreto de cliente en el Centro de administración de Microsoft Entra siguiendo los pasos descritos en Registrar una aplicación con la plataforma de identidad de Microsoft: Agregar credenciales.

Almacenar el identificador y el secreto de cliente de Microsoft

Almacene la configuración confidencial, tales como el identificador de aplicación (cliente) de Microsoft y el secreto de cliente que creó en el paso anterior con el Administrador de secretos. Para este ejemplo, siga estos pasos:

  1. Inicialice el proyecto para el almacenamiento de secretos según las instrucciones de Habilitar el almacenamiento de secretos.

  2. Almacene la configuración confidencial en el almacén de secretos local con las claves secretas Authentication:Microsoft:ClientId y Authentication:Microsoft:ClientSecret:

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
    

El separador de : no funciona con claves jerárquicas de variables de entorno en todas las plataformas. Por ejemplo, el separador de : no es compatible con Bash. El carácter de subrayado doble, __, tiene las siguientes características:

  • Compatible con todas las plataformas.
  • Se reemplaza automáticamente por dos puntos :.

Configuración de la autenticación de cuenta Microsoft

Agregue el servicio Cuenta Microsoft al Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
    });
}

La sobrecarga de AddAuthentication(IServiceCollection, String) establece la propiedad DefaultScheme. La sobrecarga de AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) permite configurar las opciones de autenticación, que se pueden usar para configurar esquemas de autenticación predeterminados con distintos fines. Las llamadas posteriores a AddAuthentication invalidan las propiedades de AuthenticationOptions configuradas anteriormente.

Los métodos de extensión de AuthenticationBuilder que registran un controlador de autenticación solo se pueden llamar una vez por esquema de autenticación. Existen sobrecargas que permiten configurar las propiedades del esquema, el nombre del esquema y el nombre para mostrar.

Para obtener más información sobre las opciones de configuración admitidas por la autenticación de la cuenta Microsoft, consulte la referencia de api de MicrosoftAccountOptions. Esto se puede usar para solicitar información diferente sobre el usuario.

Inicio de sesión con cuenta Microsoft

Ejecute la aplicación y seleccione Iniciar sesión. Aparece una opción para iniciar sesión con Microsoft. Seleccione Microsoft para ir a Microsoft para la autenticación. Después de iniciar sesión con su cuenta Microsoft, se le pedirá que permita que la aplicación acceda a su información:

Pulse y se le redirigirá de nuevo al sitio web donde puede establecer el correo electrónico.

Ahora ha iniciado sesión con sus credenciales de Microsoft.

Varios proveedores de autenticación

Cuando la aplicación requiera varios proveedores, encadene los métodos de extensión del proveedor de AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Reenvío de información de solicitud con un servidor proxy o un equilibrador de carga

Si la aplicación se implementa detrás de un servidor proxy o un equilibrador de carga, es posible que parte de la información de solicitud original se reenvíe a la aplicación en los encabezados de solicitud. Esta información suele incluir el esquema de solicitud seguro (https), el host y la dirección IP del cliente. Las aplicaciones no leen automáticamente estos encabezados de solicitud para detectar y usar la información de solicitud original.

El esquema se usa en la generación de vínculos que afecta al flujo de autenticación con proveedores externos. La pérdida del esquema seguro (https) da como resultado que la aplicación genere direcciones URL de redirección incorrectas no seguras.

Use middleware de encabezados reenviados para que la información de solicitud original esté disponible para la aplicación para procesar las solicitudes.

Para obtener más información, consulte Configurar ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.

Solución de problemas

  • Si el proveedor de cuentas de Microsoft le redirige a una página de error de inicio de sesión, anote los parámetros de cadena de consulta de título y descripción del error directamente después de la # (almohadilla) en el URI.

    Aunque el mensaje de error parece indicar un problema con la autenticación de Microsoft, la causa más común es que el URI de la aplicación no coincida con ninguno de los URI de redirección especificados para la plataforma web .

  • Si Identity no se configura llamando a services.AddIdentity en ConfigureServices, al intentar autenticarse se producirá una ArgumentException: La opción 'SignInScheme' debe proporcionarse. La plantilla de proyecto que se usa en este ejemplo garantiza que esto se realice.

  • Si la base de datos del sitio no se ha creado aplicando la migración inicial, obtendrá el error Una operación de base de datos falló mientras se procesaba la solicitud. Pulse Aplicar migraciones para crear la base de datos y actualizar para omitir el error y continuar.

Pasos siguientes

  • En este artículo se muestra cómo se puede autenticar con Microsoft. Puede seguir un enfoque similar para autenticarse con otros proveedores enumerados en la página anterior .
  • Una vez que publique el sitio web en la aplicación web de Azure, cree un nuevo secreto de cliente en el Centro de administración de Microsoft Entra.
  • Establezca el Authentication:Microsoft:ClientId y Authentication:Microsoft:ClientSecret como configuración de la aplicación en el Centro de administración de Microsoft Entra. El sistema de configuración está configurado para leer claves de variables de entorno.