Activer les options d’authentification dans une application de bureau WPF avec Azure AD B2C

Cet article décrit les méthodes permettant de personnaliser et d’améliorer l’expérience d’authentification Azure Active Directory B2C (Azure AD B2C) pour votre application de bureau WPF.

Avant de commencer, familiarisez-vous en lisant l’article Configurer l’authentification dans un exemple d’application de bureau WPF à l’aide d’Azure AD B2C.

Préremplir le nom de connexion

Pendant le parcours utilisateur pour la connexion, votre application peut cibler un utilisateur spécifique. Quand une application cible un utilisateur, celle-ci peut spécifier, dans la requête d’autorisation, le paramètre de requête login_hint avec le nom de connexion de l’utilisateur. Azure AD B2C remplit automatiquement le nom de connexion, et l’utilisateur n’a que le mot de passe à fournir.

Pour préremplir le nom de connexion, procédez comme suit :

  1. Si vous utilisez une stratégie personnalisée, ajoutez la requête d’entrée requise comme décrit dans Configurer la connexion directe.
  2. Recherchez votre objet de configuration de la Bibliothèque d’authentification Microsoft (MSAL), puis ajoutez la méthode withLoginHint() avec l’indicateur de connexion.
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithLoginHint("bob@contoso.com")
    .ExecuteAsync();

Présélectionner un fournisseur d'identité

Si vous avez configuré la procédure de connexion pour votre application afin d’inclure des comptes de réseaux sociaux comme Facebook, LinkedIn ou Google, vous pouvez spécifier le paramètre domain_hint. Ce paramètre de requête fournit un indicateur à Azure AD B2C concernant le fournisseur d’identité sociale qui doit être utilisé pour la connexion. Par exemple, si l’application spécifie domain_hint=facebook.com, le flux de connexion accède directement à la page de connexion Facebook.

Pour rediriger les utilisateurs vers un fournisseur d’identité externe, procédez comme suit :

  1. Vérifiez le nom de domaine de votre fournisseur d’identité externe. Pour plus d’informations, consultez Rediriger la connexion vers un fournisseur social.
  2. Créez un objet de liste ou utilisez un objet Dictionary existant afin d’y stocker des paramètres de requête supplémentaires.
  3. Ajoutez au dictionnaire le paramètre domain_hint avec le nom de domaine correspondant (par exemple, facebook.com).
  4. Passez l’objet des paramètres de requête supplémentaires dans la méthode WithExtraQueryParameters de l’objet de configuration 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();

Spécifier la langue de l’interface utilisateur

La personnalisation de la langue dans Azure AD B2C permet à votre flux d’utilisateur de prendre en charge plusieurs langues pour répondre aux besoins de votre client. Consultez Personnalisation linguistique pour plus d'informations.

Pour définir la langue par défaut, procédez comme suit :

  1. Configurez la personnalisation de la langue.
  2. Créez un objet de liste ou utilisez un objet Dictionary existant afin d’y stocker des paramètres de requête supplémentaires.
  3. Ajoutez au dictionnaire le paramètre ui_locales avec le code de langue correspondant (par exemple, en-us).
  4. Passez l’objet des paramètres de requête supplémentaires dans la méthode WithExtraQueryParameters de l’objet de configuration 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();

Passer un paramètre de chaîne de requête personnalisé

Avec les stratégies personnalisées, vous pouvez passer un paramètre de chaîne de requête personnalisé. Les cas où vous souhaitez modifier de façon dynamique le contenu d’une page en sont un bon exemple d’utilisation.

Pour passer un paramètre de chaîne de requête personnalisé, procédez comme suit :

  1. Configurez l’élément ContentDefinitionParameters.
  2. Créez un objet de liste ou utilisez un objet Dictionary existant afin d’y stocker des paramètres de requête supplémentaires.
  3. Ajoutez le paramètre de chaîne de requête personnalisé, par exemple campaignId. Définir la valeur du paramètre (par exemple germany-promotion).
  4. Passez l’objet des paramètres de requête supplémentaires dans la méthode WithExtraQueryParameters de l’objet de configuration 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();

Transmission d’indicateur de jeton d’ID

Une application par partie de confiance peut envoyer un Jeton Web JSON (JWT) entrant dans le cadre de la demande d’autorisation OAuth2. Le jeton entrant est une indication de l’utilisateur ou de la demande d’autorisation. Azure AD B2C valide le jeton puis extrait la demande.

Pour inclure un indicateur de jeton d’ID dans la requête d’authentification, procédez comme suit :

  1. Dans votre stratégie personnalisée, définissez un indicateur de jeton d’ID de profil technique.
  2. Dans votre code, générez ou obtenez un jeton d’ID, puis définissez le jeton sur une variable (par exemple idToken).
  3. Créez un objet de liste ou utilisez un objet Dictionary existant afin d’y stocker des paramètres de requête supplémentaires.
  4. Ajoutez le paramètre id_token_hint avec la variable correspondante qui stocke le jeton d’ID.
  5. Passez l’objet des paramètres de requête supplémentaires dans l’attribut extraQueryParameters de l’objet de configuration 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();

Configuration de la journalisation

La bibliothèque MSAL génère des messages de journal qui peuvent aider à diagnostiquer les problèmes. L’application peut configurer la journalisation. L’application peut également vous offrir un contrôle personnalisé sur le niveau de détail et vous permettre de déterminer si des données personnelles et organisationnelles sont journalisées.

Nous vous conseillons de créer un rappel de journalisation MSAL et de donner aux utilisateurs le moyen d’envoyer des journaux lorsqu’ils rencontrent des problèmes d’authentification. MSAL fournit les niveaux de détail de journalisation suivants :

  • Erreur : un problème est survenu et une erreur a été générée. Ce niveau est utilisé pour le débogage et l’identification des problèmes.
  • Avertissement : il n’y a pas nécessairement eu une erreur ou une défaillance, mais l’information pousse à effectuer un diagnostic et met en avant d’éventuels problèmes.
  • Info : MSAL journalise les événements qui sont destinés à des fins d’information et pas nécessairement pour le débogage.
  • Commentaires : il s’agit du niveau par défaut. MSAL enregistre les détails complets du comportement de la bibliothèque.

Par défaut, l’enregistreur d’événements MSAL ne capture aucune donnée personnelle ou d’organisation. La bibliothèque vous offre la possibilité d’activer la journalisation des données personnelles et organisationnelles si vous décidez de le faire.

L’extrait de code suivant montre comment configurer la journalisation 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();

Configurer l’URI de redirection

Pendant le processus d’inscription de l’application de bureau, lorsque vous choisissez un URI de redirection, gardez à l’esprit les considérations importantes suivantes :

  • Développement : Pour l’utilisation du développement dans les applications de bureau, vous pouvez définir l’URI de redirection sur http://localhost, ainsi Azure AD B2C respectera tous les ports de la requête. Si l’URI inscrit contient un port, Azure AD B2C utilisera uniquement ce port. Par exemple, si l’URI de redirection inscrit est http://localhost, l’URI de redirection dans la requête peut être http://localhost:<randomport>. Si l’URI de redirection inscrit est http://localhost:8080, l’URI de redirection dans la requête doit être http://localhost:8080.
  • Unique : le schéma de l'URI de redirection doit être propre à chaque application. Dans l’exemple com.onmicrosoft.contosob2c.exampleapp://oauth/redirect, com.onmicrosoft.contosob2c.exampleapp est le schéma. Ce modèle doit être suivi. Si deux applications partagent le même schéma, les utilisateurs peuvent choisir entre plusieurs applications. Si les utilisateurs choisissent de manière incorrecte, la connexion échoue.
  • Complet : l'URI de redirection doit être doté d'un schéma et d'un chemin. Le chemin doit contenir au moins une barre oblique après le domaine. Par exemple, //oauth/ fonctionne et //oauth échoue. N'incluez pas de caractères spéciaux dans l'URI. Par exemple, le caractère de soulignement (_) n’est pas autorisé.

Étapes suivantes