Configuración de inicio de sesión externo de la cuenta Microsoft 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 microsoft personal, educativa o laboral mediante el proyecto de ASP.NET Core 3.0 creado en la página anterior.

Creación de la aplicación en Desarrollador de Microsoft Portal

Si no tiene una cuenta Microsoft, seleccione Crear una. Después de iniciar sesión, se le redirigirá a la Registros de aplicaciones siguiente:

  • Seleccione Nuevo registro.
  • Escriba un nombre.
  • Seleccione una opción para Tipos de cuenta admitidos.
    • El paquete admite registros de aplicaciones creados con las opciones "Cuentas en cualquier directorio organizativo" o "Cuentas en cualquier directorio organizativo y cuentas MicrosoftAccount Microsoft" de forma predeterminada.
    • Para usar otras opciones, establezca y los miembros de usados para inicializar la autenticación de la cuenta Microsoft en las direcciones URL que se muestran en la página Puntos de conexión del registro de aplicaciones después de crearla (disponible haciendo clic en Puntos de conexión en la página Información AuthorizationEndpoint TokenEndpoint MicrosoftAccountOptions general).
  • En URI de redirección, escriba la dirección URL de desarrollo /signin-microsoft con anexado. Por ejemplo, https://localhost:5001/signin-microsoft. El esquema de autenticación de Microsoft configurado más adelante en este ejemplo controlará automáticamente las solicitudes en /signin-microsoft la ruta para implementar el flujo de OAuth.
  • Seleccione Registrar.

Creación de un secreto de cliente

  • En el panel izquierdo, seleccione Certificados y secretos.

  • En Secretos de cliente, seleccione Nuevo secreto de cliente.

    • Agregue una descripción para el secreto de cliente.
    • Seleccione el botón Agregar.
  • En Secretos de cliente, copie el valor del secreto de cliente.

El segmento URI /signin-microsoft se establece como la devolución de llamada predeterminada del proveedor de autenticación de Microsoft. Puede cambiar el URI de devolución de llamada predeterminado al configurar el middleware de autenticación de Microsoft a través de la propiedad RemoteAuthenticationOptions.CallbackPath heredada de la clase MicrosoftAccountOptions.

Almacenar el identificador de cliente y el secreto de Microsoft

Almacene la configuración confidencial, como el identificador de aplicación de Microsoft (cliente) que se encuentra en la página Información general del registro de aplicaciones y el secreto de cliente que creó en la página Certificados & secretos con secret Manager. Para este ejemplo, siga estos pasos:

  1. Inicialice el proyecto para el almacenamiento de secretos según las instrucciones de Habilitación del 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 : no funciona con claves jerárquicas de variables de entorno en todas las plataformas. __, el carácter de subrayado doble, tiene las siguientes características:

  • Es compatible con todas las plataformas. Por ejemplo, el separador : no es compatible con Bash, pero __ sí.
  • Se reemplaza automáticamente por un signo :.

Configuración de la autenticación de la cuenta Microsoft

Agregue el servicio Cuenta Microsoft a 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 AddAuthentication (String) establece la propiedad DefaultScheme . La sobrecarga AddAuthentication (Action<AuthenticationOptions>) permite configurar las opciones de autenticación, que se pueden usar para configurar esquemas de autenticación predeterminados para propósitos diferentes. Las llamadas subsiguientes a AddAuthentication invalidan las propiedades de AuthenticationOptions configuradas previamente.

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

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

Iniciar sesión con Microsoft cuenta

Ejecute la aplicación y haga clic en Iniciar sesión. Aparece una opción para iniciar sesión con Microsoft. Al hacer clic en Microsoft, se le redirigirá 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 detrás 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 de un equilibrador de carga, parte de la información de solicitud original podría reenviarse a la aplicación en los encabezados de solicitud. Normalmente, esta información incluye 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. El resultado de perder el esquema seguro (https) es que la aplicación genera direcciones URL incorrectas poco 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, consulta Configuración de ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.

Solución de problemas

  • Si el proveedor de la cuenta Microsoft le redirige a una página de error de inicio de sesión, anote los parámetros de cadena de consulta de descripción y título 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 coincide con ninguno de los URI de redireccionamiento especificados para la plataforma web.

  • Si no se configura mediante una llamada a en , el intento de autenticación dará como resultado ArgumentException: se debe proporcionar la opción Identity services.AddIdentity ConfigureServices "SignInScheme". La plantilla de proyecto usada en este ejemplo garantiza que esto se realiza.

  • Si la base de datos del sitio no se ha creado aplicando la migración inicial, se producirá un error en una operación de base de datos al procesar el error de solicitud. Pulse Aplicar migraciones para crear la base de datos y actualizarla para continuar después del error.

Pasos siguientes

  • En este artículo se ha mostrado cómo puede autenticarse 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 Desarrollador de Microsoft Portal.

  • Establezca y Authentication:Microsoft:ClientId como configuración de la aplicación en el Authentication:Microsoft:ClientSecret Azure Portal. El sistema de configuración está configurado para leer claves de variables de entorno.