Habilitación de las opciones de autenticación en una aplicación de escritorio para WPF mediante Azure AD B2C
En este artículo se describen formas para personalizar y mejorar la experiencia de autenticación de Azure Active Directory B2C (Azure AD B2C) para la aplicación de escritorio para Windows Presentation Foundation (WPF).
Antes de empezar, familiarícese con el artículo Configuración de la autenticación en una aplicación de escritorio para WPF de ejemplo mediante Azure AD B2C.
Rellenar previamente el nombre de inicio de sesión
Durante el recorrido de inicio de sesión de un usuario, la aplicación podría tener como destino un usuario específico. Cuando una aplicación se dirige a un usuario, puede especificar, en la solicitud de autorización, el parámetro de consulta login_hint
con el nombre de inicio de sesión de usuario. Azure AD B2C rellena automáticamente el nombre de inicio de sesión y solo es necesario que el usuario proporcione la contraseña.
Para rellenar previamente el nombre de inicio de sesión, haga lo siguiente:
- Si usa una directiva personalizada, agregue la notificación de entrada necesaria, como se describe en Configuración del inicio de sesión directo.
- Busque el objeto de configuración de la Biblioteca de autenticación de Microsoft (MSAL) y agregue el método
withLoginHint()
con la sugerencia de inicio de sesión.
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithLoginHint("bob@contoso.com")
.ExecuteAsync();
Preseleccione un proveedor de identidad
Si se ha configurado el recorrido de inicio de sesión para que la aplicación incluya cuentas de redes sociales como Facebook, LinkedIn o Google, puede especificar el parámetro domain_hint
. Este parámetro de consulta proporciona una sugerencia a Azure AD B2C acerca del proveedor de identidades sociales que debe usarse para iniciar sesión. Por ejemplo, si la aplicación especifica domain_hint=facebook.com
, el flujo de inicio de sesión va directamente a la página de inicio de sesión de Facebook.
Para redirigir a los usuarios a un proveedor de identidades externo, haga lo siguiente:
- Compruebe el nombre de dominio del proveedor de identidades externo. Para más información, consulte Redirección del inicio de sesión a un proveedor social.
- Cree un objeto
Dictionary
o use uno existente para almacenar parámetros de consulta adicionales. - Agregue el parámetro
domain_hint
con el nombre de dominio correspondiente al diccionario (por ejemplo,facebook.com
). - Pase el objeto de parámetros de consulta adicionales al método
WithExtraQueryParameters
del objeto de configuración de MSAL.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("domain_hint", "facebook.com");
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithExtraQueryParameters(extraQueryParameters)
.ExecuteAsync();
Especificación del idioma de la interfaz de usuario
La personalización del idioma en Azure AD B2C permite que el flujo de usuario albergue diversos idiomas a fin de satisfacer las necesidades de los clientes. Para obtener más información, consulte Personalización de idioma.
Para establecer el idioma preferido, haga lo siguiente:
- Configure la personalización de idioma.
- Cree un objeto
Dictionary
o use uno existente para almacenar parámetros de consulta adicionales. - Agregue el parámetro
ui_locales
con el código de lenguaje correspondiente al diccionario (por ejemplo,en-us
). - Pase el objeto de parámetros de consulta adicionales al método
WithExtraQueryParameters
del objeto de configuración de MSAL.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("ui_locales", "en-us");
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithExtraQueryParameters(extraQueryParameters)
.ExecuteAsync();
Paso de un parámetro de cadena de consulta personalizado
Con las directivas personalizadas, puede pasar un parámetro de cadena de consulta personalizado. Un buen ejemplo de caso de uso es cuando se desea cambiar dinámicamente el contenido de la página.
Para pasar un parámetro de cadena de consulta personalizado, haga lo siguiente:
- Configure el elemento ContentDefinitionParameters.
- Cree un objeto
Dictionary
o use uno existente para almacenar parámetros de consulta adicionales. - Agregue el parámetro de cadena de consulta personalizado, como
campaignId
. Establezca el valor del parámetro (por ejemplo,germany-promotion
). - Pase el objeto de parámetros de consulta adicionales al método
WithExtraQueryParameters
del objeto de configuración de MSAL.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("campaignId", "germany-promotion");
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithExtraQueryParameters(extraQueryParameters)
.ExecuteAsync();
Paso de una sugerencia de token de identificador
Una aplicación de usuario de confianza puede enviar un token JSON Web Token (JWT) de entrada como parte de la solicitud de autorización de OAuth2. El token de entrada es una sugerencia sobre el usuario o la solicitud de autorización. Azure AD B2C valida el token y, a continuación, extrae la notificación.
Para incluir una sugerencia de token de identificador en la solicitud de autenticación, haga lo siguiente:
- En la directiva personalizada, defina un perfil técnico de sugerencias de token de identificador.
- En el código, genere o adquiera un token de identificador y, después, establezca el token en una variable (por ejemplo,
idToken
). - Cree un objeto
Dictionary
o use uno existente para almacenar parámetros de consulta adicionales. - Agregue el parámetro
id_token_hint
con la variable correspondiente que almacena el token de identificador. - Pase el objeto de parámetros de consulta adicionales al atributo
extraQueryParameters
del objeto de configuración de MSAL.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("id_token_hint", idToken);
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithExtraQueryParameters(extraQueryParameters)
.ExecuteAsync();
registro
La biblioteca MSAL genera mensajes de registro que pueden ayudar a diagnosticar problemas. La aplicación puede configurar el registro. La aplicación también le da un control personalizado sobre el nivel de detalle y si se registran o no datos de la organización y personales.
Se recomienda establecer una devolución de llamada del registro de MSAL y proporcionar una forma de que los usuarios envíen registros cuando tengan problemas de autenticación. MSAL ofrece varios niveles de detalle de registro:
- Error: indica que algo no ha funcionado bien y se ha generado un error. Este nivel se usa para depurar e identificar problemas.
- Advertencia: no se ha producido necesariamente un error, pero la información está pensada para diagnósticos e identificar problemas.
- Información: MSAL registra eventos diseñados para fines informativos y no necesariamente para la depuración.
- Detallado: este es el nivel predeterminado. MSAL registra todos los detalles del comportamiento de la biblioteca.
De forma predeterminada, el registrador de MSAL no captura datos personales u organizativos. La biblioteca ofrece la opción de habilitar el registro de datos personales y organizativos si decide hacerlo.
En el siguiente fragmento de código se muestra cómo configurar el registro de MSAL:
PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
.WithB2CAuthority(AuthoritySignUpSignIn)
.WithRedirectUri(RedirectUri)
.WithLogging(Log, LogLevel.Info, false) // don't log P(ersonally) I(dentifiable) I(nformation) details on a regular basis
.Build();
Configuración del URI de redirección
Durante el proceso de registro de aplicaciones de escritorio, al elegir un URI de redirección, tenga en cuenta las siguientes consideraciones importantes:
-
Desarrollo: para uso en el desarrollo de aplicaciones de escritorio, puede establecer el URI de redirección en
http://localhost
, y Azure AD B2C respetará todos los puertos de la solicitud. Si el URI registrado contiene un puerto, Azure AD B2C usará solo ese. Por ejemplo, si el URI de redirección registrado eshttp://localhost
, el URI de redirección de la solicitud puede serhttp://localhost:<randomport>
. Si el URI de redirección registrado eshttp://localhost:8080
, el URI de redirección de la solicitud debe serhttp://localhost:8080
. -
Único: el esquema del identificador URI de redirección debe ser único para todas las aplicaciones. En el ejemplo
com.onmicrosoft.contosob2c.exampleapp://oauth/redirect
,com.onmicrosoft.contosob2c.exampleapp
es el esquema. Se debe seguir este patrón. Si dos aplicaciones comparten el mismo esquema, a los usuarios se les permite elegir una. Si los usuarios eligen incorrectamente, se produce un error en el inicio de sesión. -
Completo: el URI de redirección debe tener un esquema y una ruta de acceso. La ruta debe contener al menos un carácter de barra diagonal después del dominio. Por ejemplo,
//oauth/
funciona y//oauth
no funciona. No incluya caracteres especiales en el URI. Por ejemplo, no se permite el carácter de subrayado (_).
Pasos siguientes
- Para obtener más información, vea Opciones de configuración de MSAL para .NET, UWP, NetCore y Xamarin.