Configurar opções de autenticação em um aplicativo do React usando o Azure Active Directory B2C
Este artigo descreve como personalizar e aprimorar a experiência de autenticação do Azure AD B2C (Azure Active Directory B2C) para o seu aplicativo de SPA (aplicativo de página única) do React. Antes de começar, familiarize-se com os seguintes artigos: Configurar a autenticação em um SPA do React ou Habilitar autenticação no próprio SPA do React.
Comportamento de entrada e saída
Você pode configurar seu aplicativo de página única para conectar usuários com o MSAL.js de duas maneiras:
- Janela pop-up: a autenticação ocorre em uma janela pop-up, e o estado do aplicativo principal é preservado. Use essa abordagem se você não quiser que os usuários deixem a página do aplicativo durante a autenticação. Observe que há problemas conhecidos com janelas pop-up no Internet Explorer.
- Para entrar com janelas pop-up, use o método
loginPopup
. - Para sair com janelas pop-up, use o método
logoutPopup
.
- Para entrar com janelas pop-up, use o método
- Redirecionamento: o usuário é redirecionado para o Azure AD B2C para concluir o fluxo de autenticação. Use esse método se os usuários tiverem restrições de navegador ou políticas de janelas pop-up desabilitadas.
- Para entrar com redirecionamento, use o método
loginRedirect
. - Para sair com redirecionamento, use o método
logoutRedirect
.
- Para entrar com redirecionamento, use o método
O exemplo a seguir demonstra como entrar e sair:
// src/components/NavigationBar.jsx
instance.loginPopup(loginRequest)
.catch((error) => console.log(error))
instance.logoutPopup({ postLogoutRedirectUri: "/", mainWindowRedirectUri: "/" })
Usar um domínio personalizado
Ao usar um domínio personalizado, você pode recriar por completo a URL de autenticação. Da perspectiva do usuário, os usuários permanecem nos domínios durante o processo de autenticação, em vez de serem redirecionados para o nome de domínio b2clogin.com do Azure AD B2C.
Para remover todas as referências a “b2c” na URL, você também pode substituir o nome do locatário b2c, contoso.onmicrosoft.com, na URL de solicitação de autenticação pelo GUID da ID do locatário. Por exemplo, você pode mudar de https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/
para https://account.contosobank.co.uk/<tenant ID GUID>/
.
Para usar um domínio personalizado para a sua ID de locatário na URL de autenticação, siga as diretrizes em Habilitar domínios personalizados. Encontre seu objeto de configuração da MSAL src/authConfig.js
e altere authorities
e knownAuthorities
para usar o seu nome de domínio personalizado e sua ID do locatário.
O seguinte código JavaScript mostra o objeto de configuração da MSAL antes da alteração:
const msalConfig = {
auth: {
...
authority: "https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/B2C_1_susi",
knownAuthorities: ["fabrikamb2c.b2clogin.com"],
...
},
...
}
O seguinte código JavaScript mostra o objeto de configuração da MSAL após a alteração:
export const b2cPolicies = {
names: {
signUpSignIn: "b2c_1_susi",
forgotPassword: "b2c_1_reset",
editProfile: "b2c_1_edit_profile"
},
authorities: {
signUpSignIn: {
authority: "https://custom.domain.com/00000000-0000-0000-0000-000000000000/b2c_1_susi",
},
forgotPassword: {
authority: "https://custom.domain.com/00000000-0000-0000-0000-000000000000/b2c_1_reset",
},
editProfile: {
authority: "https://custom.domain.com/00000000-0000-0000-0000-000000000000/b2c_1_edit_profile"
}
},
authorityDomain: "custom.domain.com"
}
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.
- Crie um objeto de configuração
PopupRequest
ouRedirectRequest
da MSAL, ou use um existente. - Defina o atributo
loginHint
com a dica de entrada correspondente.
Os snippets de código a seguir demonstram como passar o parâmetro de dica de entrada. Eles usam bob@contoso.com
como o valor de atributo.
// src/components/NavigationBar.jsx
loginRequest.loginHint = "bob@contoso.com";
instance.loginPopup(loginRequest);
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 um objeto de configuração
PopupRequest
ouRedirectRequest
da MSAL, ou use um existente. - Defina o atributo
domainHint
com a dica de domínio correspondente.
Os snippets de código a seguir demonstram como passar o parâmetro de dica de domínio. Eles usam facebook.com
como o valor de atributo.
// src/components/NavigationBar.jsx
loginRequest.domainHint = "facebook.com";
instance.loginPopup(loginRequest);
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 um objeto de configuração
PopupRequest
ouRedirectRequest
da MSAL ou use um existente com atributosextraQueryParameters
. - Adicione o parâmetro
ui_locales
com o código de linguagem correspondente aos atributosextraQueryParameters
.
Os snippets de código a seguir demonstram como passar o parâmetro de dica de domínio. Eles usam es-es
como o valor de atributo.
// src/components/NavigationBar.jsx
loginRequest.extraQueryParameters = {"ui_locales" : "es-es"};
instance.loginPopup(loginRequest);
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 um objeto de configuração
PopupRequest
ouRedirectRequest
da MSAL ou use um existente com atributosextraQueryParameters
. - Adicione o parâmetro de cadeia de caracteres de consulta personalizada, como
campaignId
. Defina o valor do parâmetro.
Os snippets de código a seguir demonstram como passar um parâmetro de cadeia de caracteres de consulta personalizado. Eles usam germany-promotion
como o valor de atributo.
// src/components/NavigationBar.jsx
loginRequest.extraQueryParameters = {"campaignId": 'germany-promotion'};
instance.loginPopup(loginRequest);
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.
- Crie um objeto de configuração
PopupRequest
ouRedirectRequest
da MSAL ou use um existente com atributosextraQueryParameters
. - Adicione o parâmetro
id_token_hint
com a variável correspondente que armazena a ID do token.
Os snippets de código a seguir demonstram como definir uma dica de token de ID:
// src/components/NavigationBar.jsx
loginRequest.extraQueryParameters = {"id_token_hint": idToken};
instance.loginPopup(loginRequest);
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.
Para configurar o registro em log da MSAL, em src/authConfig.js, configure as seguintes chaves:
loggerCallback
é a função de retorno de chamada do agente de log.logLevel
permite especificar o nível de registro em log. Valores possíveis:Error
,Warning
,Info
eVerbose
.piiLoggingEnabled
habilita a entrada de dados pessoais. Valores possíveis:true
oufalse
.
O trecho de código a seguir demonstra como configurar o registro em log na MSAL:
export const msalConfig = {
...
system: {
loggerOptions: {
loggerCallback: (logLevel, message, containsPii) => {
console.log(message);
},
logLevel: LogLevel.Verbose,
piiLoggingEnabled: false
}
}
...
}
Próximas etapas
- Saiba mais sobre as opções de configuração do MSAL.js.