Habilitar as opções de autenticação em um aplicativo de área de trabalho do WPF usando o Azure AD B2C

Este artigo descreve as maneiras como você pode personalizar e aprimorar a experiência de autenticação do Azure Active Directory B2C (Azure AD B2C) para o aplicativo de área de trabalho do Windows Presentation Foundation (WPF).

Antes de começar, familiarize-se com o artigo Configurar a autenticação em um aplicativo da área de trabalho do WPF de exemplo usando o Azure AD B2C.

Preencher previamente o nome de usuário

Durante um percurso de entrada do usuário, um aplicativo pode ser direcionado a um usuário específico. Ao direcionar a um usuário, um aplicativo pode especificar, na solicitação de autorização, o parâmetro de consulta login_hint com o nome de entrada do usuário. O Azure AD B2C preenche automaticamente o nome de entrada, e o usuário só precisa fornecer a senha.

Para preencher o nome de logon, faça o seguinte:

  1. Se você estiver usando uma política personalizada, adicione a declaração de entrada necessária, conforme descrito em Configurar conexão direta.
  2. Procure o objeto de configuração da Biblioteca de Autenticação da Microsoft (MSAL) e, em seguida, adicione o método withLoginHint() com a dica de logon.
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithLoginHint("bob@contoso.com")
    .ExecuteAsync();

Pré-selecionar um provedor de identidade

Se você configurou o percurso de entrada para seu aplicativo para incluir contas sociais, como Facebook, LinkedIn ou do Google, você pode especificar o domain_hint parâmetro. Esse parâmetro de consulta fornece uma dica para o Azure AD B2C sobre o provedor de identidade social que deve ser usado para entrar. Por exemplo, se o aplicativo especifica domain_hint=facebook.com, o fluxo de entrada vai diretamente para a página de entrada do Facebook.

Para redirecionar usuários para um provedor de identidade externo, faça o seguinte:

  1. Verifique o nome de domínio do seu provedor de identidade externo. Para obter mais informações, consulte redirecionar entrada para um provedor social.
  2. Crie ou use um objeto Dictionary existente para armazenar parâmetros de consulta adicionais.
  3. Adicione o parâmetro domain_hint com o nome de domínio correspondente ao dicionário (por exemplo, facebook.com).
  4. Passe o objeto de parâmetros de consulta adicional ao método WithExtraQueryParameters do objeto de configuração da 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();

Especificar a linguagem de programação da interface do usuário

A personalização da linguagem de programação no Azure Active Directory B2C permite que o fluxo do usuário acomode uma variedade de linguagens de programação para atender às necessidades dos clientes. Para obter mais informações, consulte Personalização de linguagem de programação.

Para definir o idioma preferencial, faça o seguinte:

  1. Configurar a personalização de linguagem.
  2. Crie ou use um objeto Dictionary existente para armazenar parâmetros de consulta adicionais.
  3. Adicione o parâmetro ui_locales com o código de linguagem correspondente ao dicionário (por exemplo, en-us).
  4. Passe o objeto de parâmetros de consulta adicional ao método WithExtraQueryParameters do objeto de configuração da 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();

Passar um parâmetro de cadeia de caracteres de consulta personalizado

Com as políticas personalizadas, é possível passar um parâmetro de cadeia de caracteres de consulta personalizado. Um bom exemplo de caso de uso é quando você deseja alterar dinamicamente o conteúdo da página.

Para passar um parâmetro de cadeia de caracteres de consulta personalizado, siga estas etapas:

  1. Configure o elemento ContentDefinitionParameters.
  2. Crie ou use um objeto Dictionary existente para armazenar parâmetros de consulta adicionais.
  3. Adicione o parâmetro de cadeia de caracteres de consulta personalizada, como campaignId. Defina o valor do parâmetro (por exemplo, germany-promotion).
  4. Passe o objeto de parâmetros de consulta adicional ao método WithExtraQueryParameters do objeto de configuração da 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();

Passar uma dica de token de ID

Um aplicativo de terceira parte confiável pode enviar um JWT (Token Web JSON) de entrada como parte da solicitação de autorização OAuth2. O token de entrada é uma dica sobre o usuário ou a solicitação de autorização. O Azure AD B2C valida o token e, em seguida, extrai a declaração.

Para incluir uma dica de token de ID na solicitação de autenticação, faça o seguinte:

  1. Em sua política personalizada, defina um perfil técnico de dica de token de ID.
  2. No código, gere ou adquira uma ID do token e, em seguida, defina o token como uma variável (por exemplo, idToken).
  3. Crie ou use um objeto Dictionary existente para armazenar parâmetros de consulta adicionais.
  4. Adicione o parâmetro id_token_hint com a variável correspondente que armazena a ID do token.
  5. Passe o objeto de parâmetros de consulta adicional ao atributo extraQueryParameters do objeto de configuração da 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();

Configurar o registro em log

A biblioteca MSAL gera mensagens de log que podem ajudar a diagnosticar problemas. O aplicativo pode configurar o registro em log. O aplicativo também pode dar a você controle personalizado sobre o nível de detalhes e se os dados pessoais e organizacionais são registrados.

Recomendamos que você crie um retorno de chamada de registro em log da MSAL e forneça uma maneira para os usuários enviarem logs quando estiverem com problemas de autenticação. A MSAL fornece os níveis de detalhes de log a seguir:

  • Erro: indica que algo deu errado e um erro foi gerado. Esse nível é usado para depuração e identificação de problemas.
  • Aviso: as informações são destinadas a diagnosticar e identificar problemas, mesmo que não tenha havido necessariamente um erro ou falha.
  • Informações: a MSAL registra os eventos que são destinados para fins informativos e não necessariamente para depuração.
  • Verbose: esse é o nível padrão. A MSAL registra em log os detalhes completos do comportamento da biblioteca.

Por padrão, o agente da MSAL não captura dados pessoais ou organizacionais. A biblioteca oferecerá a opção para habilitar o registro em log de dados pessoais e organizacionais se você optar por fazer isso.

O trecho de código a seguir demonstra como configurar o registro em log no 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();

Configurar o URI de redirecionamento

Durante o processo de registro do aplicativo de área de trabalho, quando você estiver escolhendo um URI de redirecionamento, tenha em mente as seguintes considerações importantes:

  • Desenvolvimento: para uso de desenvolvimento em aplicativos da área de trabalho, você pode definir o URI de redirecionamento como http://localhost e o Azure AD B2C respeitará qualquer porta na solicitação. Se o URI registrado contiver uma porta, Azure AD B2C usará apenas essa porta. Por exemplo, se o URI de redirecionamento registrado for http://localhost, o URI de redirecionamento na solicitação poderá ser http://localhost:<randomport>. Se o URI de redirecionamento registrado for http://localhost:8080, o URI de redirecionamento na solicitação precisará ser http://localhost:8080.
  • Exclusivo: O esquema do URI de redirecionamento deve ser exclusivo para cada aplicativo. No exemplo com.onmicrosoft.contosob2c.exampleapp://oauth/redirect, com.onmicrosoft.contosob2c.exampleapp é o esquema. Esse padrão deve ser seguido. Se dois aplicativos compartilharem o mesmo esquema, os usuários receberão uma opção de aplicativos. Se os usuários escolherem incorretamente, o acesso falhará.
  • Completo: O URI de redirecionamento deve ter um esquema e um caminho. O caminho deve conter pelo menos um caractere de barra após o domínio. Por exemplo, //oauth/ funciona e //oauth falha. Não inclua caracteres especiais no URI. Por exemplo, o caractere de sublinhado (_) não é permitido.

Próximas etapas