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
- Agregue el paquete de NuGet Microsoft.AspNetCore.Authentication.MicrosoftAccount al proyecto.
- Vaya a la página Azure Portal - Registros de aplicaciones y cree o inicie sesión en una cuenta Microsoft:
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
MicrosoftAccountMicrosoft" 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
AuthorizationEndpointTokenEndpointMicrosoftAccountOptionsgeneral).
- El paquete admite registros de aplicaciones creados con las opciones "Cuentas en cualquier directorio organizativo" o "Cuentas en cualquier directorio organizativo y cuentas
- En URI de redirección, escriba la dirección URL de desarrollo
/signin-microsoftcon 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-microsoftla 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:
Inicialice el proyecto para el almacenamiento de secretos según las instrucciones de Habilitación del almacenamiento de secretos.
Almacene la configuración confidencial en el almacén de secretos local con las claves secretas
Authentication:Microsoft:ClientIdyAuthentication: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 Sí 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.AddIdentityConfigureServices"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:ClientIdcomo configuración de la aplicación en elAuthentication:Microsoft:ClientSecretAzure Portal. El sistema de configuración está configurado para leer claves de variables de entorno.