Partilhar via


Ativar opções de autenticação numa aplicação de ambiente de trabalho WPF com Azure AD B2C

Este artigo descreve formas de personalizar e melhorar a experiência de autenticação do Azure Active Directory B2C (Azure AD B2C) para a sua aplicação de ambiente de trabalho Windows Presentation Foundation (WPF).

Antes de começar, familiarize-se com o artigo Configurar autenticação numa aplicação de ambiente de trabalho WPF de exemplo com Azure AD artigo B2C.

Pré-preencher o nome do início de sessão

Durante um percurso de início de sessão do utilizador, a sua aplicação poderá visar um utilizador específico. Quando uma aplicação se destina a um utilizador, pode especificar no pedido de autorização o login_hint parâmetro de consulta com o nome de início de sessão do utilizador. Azure AD B2C preenche automaticamente o nome de início de sessão e o utilizador tem de fornecer apenas a palavra-passe.

Para pré-preencher o nome do início de sessão, faça o seguinte:

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

Pré-selecionar um fornecedor de identidade

Se tiver configurado o percurso de início de sessão para a sua aplicação incluir contas sociais, como o Facebook, LinkedIn ou Google, pode especificar o domain_hint parâmetro. Este parâmetro de consulta fornece uma sugestão para Azure AD B2C sobre o fornecedor de identidade social que deve ser utilizado para o início de sessão. Por exemplo, se a aplicação especificar domain_hint=facebook.com, o fluxo de início de sessão vai diretamente para a página de início de sessão do Facebook.

Para redirecionar os utilizadores para um fornecedor de identidade externo, faça o seguinte:

  1. Verifique o nome de domínio do seu fornecedor de identidade externa. Para obter mais informações, veja Redirecionar o início de sessão para um fornecedor de redes sociais.
  2. Crie ou utilize um objeto existente Dictionary para armazenar parâmetros de consulta adicionais.
  3. Adicione o domain_hint parâmetro com o nome de domínio correspondente ao dicionário (por exemplo, facebook.com).
  4. Transmita o objeto parâmetros de consulta extra para o método do objeto de WithExtraQueryParameters configuração 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 o idioma da IU

A personalização de idiomas no Azure AD B2C permite ao seu fluxo de utilizador acomodar uma variedade de idiomas de acordo com as necessidades dos seus clientes. Para obter mais informações, veja Personalização de idiomas.

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

  1. Configurar a personalização de idiomas.
  2. Create or use an existing Dictionary object to store extra query parameters.
  3. Adicione o ui_locales parâmetro com o código de idioma correspondente ao dicionário (por exemplo, en-us).
  4. Pass the extra query parameters object into the MSAL configuration object's WithExtraQueryParameters method.
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();

Transmitir um parâmetro de cadeia de consulta personalizado

Com as políticas personalizadas, pode transmitir um parâmetro de cadeia de consulta personalizado. Um bom exemplo de caso de utilização é quando pretende alterar dinamicamente o conteúdo da página.

Para transmitir um parâmetro de cadeia de consulta personalizado, faça o seguinte:

  1. Configure o elemento ContentDefinitionParameters .
  2. Create or use an existing Dictionary object to store extra query parameters.
  3. Adicione o parâmetro de cadeia de consulta personalizada, como campaignId. Defina o valor do parâmetro (por exemplo, germany-promotion).
  4. Pass the extra query parameters object into the MSAL configuration object's WithExtraQueryParameters method.
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();

Transmitir uma sugestão de token de ID

Uma aplicação confiadora pode enviar um JSON Web Token (JWT) de entrada como parte do pedido de autorização do OAuth2. O token de entrada é uma sugestão sobre o utilizador ou o pedido de autorização. Azure AD B2C valida o token e, em seguida, extrai a afirmação.

Para incluir uma sugestão de token de ID no pedido de autenticação, faça o seguinte:

  1. Na sua política personalizada, defina um perfil técnico de sugestão de token de ID.
  2. No código, gere ou adquire um token de ID e, em seguida, defina o token como uma variável (por exemplo, idToken).
  3. Create or use an existing Dictionary object to store extra query parameters.
  4. Adicione o id_token_hint parâmetro com a variável correspondente que armazena o token de ID.
  5. Transmita o objeto parâmetros de consulta extra para o atributo do objeto de extraQueryParameters configuração 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 registo

A biblioteca MSAL gera mensagens de registo que podem ajudar a diagnosticar problemas. A aplicação pode configurar o registo. A aplicação também pode dar-lhe controlo personalizado sobre o nível de detalhe e se os dados pessoais e organizacionais são registados.

Recomendamos que crie uma chamada de retorno de registo MSAL e forneça uma forma de os utilizadores submeterem registos quando tiverem problemas de autenticação. O MSAL fornece estes níveis de detalhes de registo:

  • Erro: ocorreu um erro e foi gerado um erro. Este nível é utilizado para depurar e identificar problemas.
  • Aviso: não houve necessariamente um erro ou falha, mas as informações destinam-se a diagnósticos e a identificar problemas.
  • Informações: o MSAL regista eventos que se destinam a fins informativos e não necessariamente para depuração.
  • Verboso: este é o nível predefinido. O MSAL regista todos os detalhes do comportamento da biblioteca.

Por predefinição, o logger MSAL não captura dados pessoais ou organizacionais. A biblioteca dá-lhe a opção de ativar o registo de dados pessoais e organizacionais se decidir fazê-lo.

O fragmento de código seguinte demonstra como configurar o registo 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 registo de aplicações de ambiente de trabalho, quando estiver a escolher um URI de redirecionamento, tenha em atenção as seguintes considerações importantes:

  • Desenvolvimento: para utilização de desenvolvimento em aplicações de ambiente de trabalho, pode definir o URI de redirecionamento para http://localhoste Azure AD B2C respeitará qualquer porta no pedido. Se o URI registado contiver uma porta, Azure AD B2C utilizará apenas essa porta. Por exemplo, se o URI de redirecionamento registado for http://localhost, o URI de redirecionamento no pedido pode ser http://localhost:<randomport>. Se o URI de redirecionamento registado for http://localhost:8080, o URI de redirecionamento no pedido tem de ser http://localhost:8080.
  • Exclusivo: o esquema do URI de redirecionamento tem de ser exclusivo para cada aplicação. No exemplo com.onmicrosoft.contosob2c.exampleapp://oauth/redirect, com.onmicrosoft.contosob2c.exampleapp está o esquema. Este padrão deve ser seguido. Se duas aplicações partilharem o mesmo esquema, é dada aos utilizadores uma escolha de aplicações. Se os utilizadores escolherem incorretamente, o início de sessão falhará.
  • Concluído: o URI de redirecionamento tem de ter um esquema e um caminho. O caminho tem de conter, pelo menos, um caráter de barra após o domínio. Por exemplo, //oauth/ funciona e //oauth falha. Não inclua carateres especiais no URI. Por exemplo, o caráter de sublinhado (_) não é permitido.

Passos seguintes