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:
- Se você estiver usando uma política personalizada, adicione a declaração de entrada necessária, conforme descrito em Configurar conexão direta.
- 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:
- Verifique o nome de domínio do seu provedor de identidade externo. Para obter mais informações, consulte redirecionar entrada para um provedor social.
- Crie ou use um objeto
Dictionary
existente para armazenar parâmetros de consulta adicionais. - Adicione o parâmetro
domain_hint
com o nome de domínio correspondente ao dicionário (por exemplo,facebook.com
). - 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:
- Configurar a personalização de linguagem.
- Crie ou use um objeto
Dictionary
existente para armazenar parâmetros de consulta adicionais. - Adicione o parâmetro
ui_locales
com o código de linguagem correspondente ao dicionário (por exemplo,en-us
). - 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:
- Configure o elemento ContentDefinitionParameters.
- Crie ou use um objeto
Dictionary
existente para armazenar parâmetros de consulta adicionais. - Adicione o parâmetro de cadeia de caracteres de consulta personalizada, como
campaignId
. Defina o valor do parâmetro (por exemplo,germany-promotion
). - 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:
- Em sua política personalizada, defina um perfil técnico de dica de token de ID.
- No código, gere ou adquira uma ID do token e, em seguida, defina o token como uma variável (por exemplo,
idToken
). - Crie ou use um objeto
Dictionary
existente para armazenar parâmetros de consulta adicionais. - Adicione o parâmetro
id_token_hint
com a variável correspondente que armazena a ID do token. - 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 forhttp://localhost
, o URI de redirecionamento na solicitação poderá serhttp://localhost:<randomport>
. Se o URI de redirecionamento registrado forhttp://localhost:8080
, o URI de redirecionamento na solicitação precisará serhttp://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
- Para saber mais, confira as opções de configuração do MSAL para .NET, UWP, NetCore e Xamarin.