Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
A partir de 1º de maio de 2025, o Azure AD B2C não estará mais disponível para compra para novos clientes. Saiba mais em nossas perguntas frequentes.
Muitos aplicativos modernos têm um front-end SPA (aplicativo de página única) escrito principalmente em JavaScript. Geralmente, o aplicativo é escrito usando uma estrutura como React, Angular ou Vue.js. Os SPAs e outros aplicativos JavaScript executados principalmente em um navegador têm alguns desafios adicionais para autenticação:
As características de segurança desses aplicativos são diferentes dos aplicativos Web tradicionais baseados em servidor.
Muitos servidores de autorização e provedores de identidade não dão suporte a solicitações CORS (compartilhamento de recursos entre origens).
Os redirecionamentos do navegador de página inteira para longe do aplicativo podem ser invasivos para a experiência do usuário.
Aviso
A Microsoft recomenda que você não use o fluxo de concessão implícita. A maneira recomendada de dar suporte a SPAs é o fluxo de código de autorização do OAuth 2.0 (com PKCE). Algumas configurações desse fluxo exigem um grau muito alto de confiança no aplicativo e traz riscos que não estão presentes em outros fluxos. Use-o somente quando outros fluxos mais seguros não forem viáveis. Para obter mais informações, consulte as preocupações de segurança com o fluxo de concessão implícito.
Algumas estruturas, como MSAL.js 1.x, dão suporte apenas ao fluxo de concessão implícita. Nesses casos, o Azure AD B2C (Azure Active Directory B2C) dá suporte ao fluxo de concessão implícita de autorização do OAuth 2.0. O fluxo é descrito na seção 4.2 da especificação OAuth 2.0. No fluxo implícito, o aplicativo recebe tokens diretamente do ponto de extremidade de autorização do Azure AD B2C, sem nenhuma troca entre servidores. Toda a lógica de autenticação e o tratamento de sessão são feitos inteiramente no cliente JavaScript com um redirecionamento de página ou uma caixa pop-up.
O Azure AD B2C estende o fluxo implícito OAuth 2.0 padrão para mais do que autenticação e autorização simples. O Azure AD B2C apresenta o parâmetro de política. Com o parâmetro de política, você pode usar o OAuth 2.0 para adicionar políticas ao seu aplicativo, como fluxos de usuário de inscrição, entrada e gerenciamento de perfil. No exemplo de solicitações HTTP neste artigo, usamos {tenant}.onmicrosoft.com para ilustração. Substitua {tenant}pelo nome do seu locatário se você tiver um. Além disso, você precisa ter criado um fluxo de usuário.
Usamos a figura a seguir para ilustrar o fluxo de login implícito. Cada etapa é descrita em detalhes mais adiante no artigo.
Enviar solicitações de autenticação
Quando seu aplicativo Web precisa autenticar o usuário e executar um fluxo de usuário, ele direciona o usuário para o ponto de extremidade do /authorize Azure AD B2C. O usuário toma medidas dependendo do fluxo do usuário.
Nesta solicitação, o cliente indica as permissões que precisa adquirir do usuário no scope parâmetro e o fluxo do usuário a ser executado. Para ter uma ideia de como a solicitação funciona, tente colar a solicitação em um navegador e executá-la. Substituir:
{tenant}pelo nome do locatário do Azure AD B2C.00001111-aaaa-2222-bbbb-3333cccc4444pela ID do aplicativo que você já havia registrado no seu locatário.{policy}pelo nome de uma política que você criou no seu locatário, por exemplob2c_1_sign_in.
GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=id_token+token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=fragment
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
Os parâmetros na solicitação HTTP GET são explicados na tabela abaixo.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| {inquilino} | Sim | O nome de seu locatário do Azure AD B2C |
| {política} | Sim | O nome do fluxo de usuário que você deseja executar. Especifique o nome de um fluxo de usuário que você criou em seu locatário do Azure AD B2C. Por exemplo: b2c_1_sign_in, b2c_1_sign_up, ou b2c_1_edit_profile. |
| ID do cliente | Sim | A ID do aplicativo que o portal do Azure atribuiu ao seu aplicativo. |
| tipo_de_resposta | Sim | Deve incluir id_token para login no OpenID Connect. Ele também pode incluir o tipo de resposta token. Se você usar token, seu aplicativo poderá receber imediatamente um token de acesso do ponto de extremidade autorizado, sem fazer uma segunda solicitação para o ponto de extremidade autorizado. Se você usar o token tipo de resposta, o scope parâmetro deverá conter um escopo que indique para qual recurso emitir o token. |
| URI de redirecionamento | Não | O URI de redirecionamento do seu aplicativo, onde as respostas de autenticação podem ser enviadas e recebidas pelo aplicativo. Ele deve corresponder exatamente a uma das URIs de redirecionamento que você adicionou a um aplicativo registrado no portal, exceto que ela deve ser codificada em URL. |
| modo_de_resposta | Não | Especifica o método a ser usado para enviar o token resultante de volta ao seu aplicativo. Para fluxos implícitos, use fragment. |
| âmbito | Sim | Uma lista separada por espaços de âmbitos. Um único valor de escopo indica à ID do Microsoft Entra ambas as permissões que estão sendo solicitadas. O escopo openid indica uma permissão para entrar no usuário e obter dados sobre ele na forma de tokens de ID. O offline_access escopo é opcional para aplicativos Web. Isso indica que seu aplicativo precisa de um token de atualização para acesso de longa duração aos recursos. |
| estado | Não | Um valor incluído na solicitação que também é retornado na resposta do token. Pode ser uma cadeia de caracteres de qualquer conteúdo que você deseja usar. Normalmente, um valor exclusivo gerado aleatoriamente é usado para evitar ataques de falsificação de solicitação entre sites. O estado também é usado para codificar informações sobre o estado do usuário no aplicativo antes da solicitação de autenticação ocorrer, por exemplo, a página em que o usuário estava ou o fluxo de usuário que estava sendo executado. |
| Nonce | Sim | Um valor incluído na solicitação (gerada pelo aplicativo) que é incluído no token de ID resultante como uma declaração. O aplicativo pode então verificar esse valor para prevenir ataques de reprodução de token. Normalmente, o valor é uma cadeia de caracteres aleatória e exclusiva que pode ser usada para identificar a origem da solicitação. |
| solicitação | Não | O tipo de interação do usuário que é necessário. Atualmente, o único valor válido é login. Esse parâmetro força o usuário a inserir suas credenciais nessa solicitação. O logon único não entra em vigor. |
Essa é a parte interativa do fluxo. O usuário é solicitado a concluir o fluxo de trabalho da política. O usuário pode ter que inserir seu nome de usuário e senha, entrar com uma identidade social, inscrever-se em uma conta local ou qualquer outro número de etapas. As ações do usuário dependem de como o fluxo de usuário é definido.
Depois que o usuário concluir o fluxo de usuário, o Azure AD B2C retornará uma resposta ao seu aplicativo por meio do redirect_uri. Ele usa o método especificado no response_mode parâmetro. A resposta é exatamente a mesma para cada um dos cenários de ação do usuário, independentemente do fluxo de usuário que foi executado.
Resposta bem-sucedida
Uma resposta bem-sucedida que utiliza response_mode=fragment e response_type=id_token+token se parece com a seguinte, com quebras de linha para legibilidade:
GET https://aadb2cplayground.azurewebsites.net/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&token_type=Bearer
&expires_in=3599
&scope="00001111-aaaa-2222-bbbb-3333cccc4444 offline_access",
&id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=arbitrary_data_you_sent_earlier
| Parâmetro | Descrição |
|---|---|
| token_de_acesso | O token de acesso que o aplicativo solicitou do Azure AD B2C. |
| tipo_de_token | O valor do tipo de token. O único tipo que o Azure AD B2C dá suporte é o Bearer. |
| expira_em | O período de tempo em que o token de acesso é válido (em segundos). |
| âmbito | Os escopos para os quais o token é válido. Você também pode usar os escopos para armazenar tokens em cache para uso posterior. |
| token_de_identidade | O token de ID que o aplicativo solicitou. Você pode usar o token de ID para verificar a identidade do usuário e iniciar uma sessão com o usuário. Para obter mais informações sobre tokens de ID e seu conteúdo, consulte a referência de tokens do Azure AD B2C. |
| estado | Se um parâmetro state for incluído na solicitação, o mesmo valor deverá aparecer na resposta. O aplicativo deve verificar se os state valores na solicitação e resposta são idênticos. |
Resposta de erro
As respostas de erro também podem ser enviadas para o URI de redirecionamento para que o aplicativo possa tratá-las adequadamente:
GET https://aadb2cplayground.azurewebsites.net/#
error=access_denied
&error_description=the+user+canceled+the+authentication
&state=arbitrary_data_you_can_receive_in_the_response
| Parâmetro | Descrição |
|---|---|
| erro | Um código usado para classificar tipos de erros que ocorrem. |
| descrição_do_erro | Uma mensagem de erro específica que pode ajudar você a identificar a causa raiz de um erro de autenticação. |
| estado | Se um parâmetro state for incluído na solicitação, o mesmo valor deverá aparecer na resposta. O aplicativo deve verificar se os state valores na solicitação e resposta são idênticos. |
Validar o token de ID
O recebimento de um token de ID não é suficiente para autenticar o usuário. Valide a assinatura do token de ID e verifique as declarações no token de acordo com os requisitos do aplicativo. O Azure AD B2C usa JWTs (Tokens Web JSON) e criptografia de chave pública para assinar tokens e verificar se eles são válidos.
Muitas bibliotecas de software livre estão disponíveis para validar JWTs, dependendo do idioma que você prefere usar. Considere explorar bibliotecas de software livre disponíveis em vez de implementar sua própria lógica de validação. Você pode usar as informações neste artigo para ajudá-lo a aprender a usar essas bibliotecas corretamente.
Azure AD B2C tem um endpoint de metadados do OpenID Connect. O aplicativo pode usar o endpoint para buscar informações sobre o Azure AD B2C em tempo de execução. Essas informações incluem pontos de extremidade, conteúdos de token e chaves de assinatura de token. Há um documento de metadados JSON para cada fluxo de usuário em seu locatário do Azure AD B2C. Por exemplo, o documento de metadados de um fluxo do usuário chamado b2c_1_sign_in em um locatário do fabrikamb2c.onmicrosoft.com está localizado em:
https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_sign_in/v2.0/.well-known/openid-configuration
Uma das propriedades deste documento de configuração é a jwks_uri. O valor para o mesmo fluxo de usuário seria:
https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_sign_in/discovery/v2.0/keys
Para determinar de qual fluxo de usuário foi usado para assinar um token de ID (e de onde buscar os metadados), você pode usar qualquer uma das seguintes opções:
O nome de fluxo do usuário está incluído na declaração
acremid_token. Para obter informações sobre como analisar as declarações de um token de ID, consulte a referência de token do Azure AD B2C.Codificar o fluxo do usuário no valor do parâmetro
stateao fazer a solicitação. Em seguida, decodificar ostateparâmetro para determinar qual fluxo de usuário foi usado.
Depois de adquirir o documento de metadados do ponto de extremidade de metadados do OpenID Connect, você pode usar as chaves públicas RSA-256 (localizadas neste ponto de extremidade) para validar a assinatura do token de ID. Poderá haver várias chaves listadas nesse ponto de extremidade em qualquer momento, cada uma identificada por um kid. O id_token cabeçalho também contém uma kid declaração. Indica quais dessas chaves foram usadas para assinar o token de ID. Para obter mais informações, incluindo o aprendizado sobre a validação de tokens, consulte a referência de token do Azure AD B2C.
Depois de validar a assinatura do token de ID, várias declarações exigem verificação. Por exemplo:
Valide a declaração
noncepara evitar ataques de reprodução de token. O valor deve ser aquele que você especificou no pedido de login.Valide a declaração
audpara garantir que o token de ID foi emitido para seu aplicativo. Seu valor deve ser a ID do aplicativo do seu aplicativo.Valide as reivindicações
iateexppara garantir que o token de ID não expirou.
Várias outras validações que você deve executar são descritas em detalhes na Especificação do OpenID Connect Core. Talvez você também queira validar declarações adicionais, dependendo do seu cenário. Algumas validações comuns incluem:
Garantindo que o usuário ou a organização tenha se inscrito no aplicativo.
Garantindo que o usuário tenha autorização e privilégios adequados.
Garantir que um determinado nível de autenticação tenha ocorrido, por exemplo, utilizando a autenticação multifator do Microsoft Entra.
Para obter mais informações sobre as reivindicações em um token de ID, consulte a referência de token do Azure AD B2C.
Depois de validar o token de ID, você pode iniciar uma sessão com o usuário. Em seu aplicativo, use as declarações no token de ID para obter informações sobre o usuário. Essas informações podem ser usadas para exibição, registros, autorização e assim por diante.
Obter tokens de acesso
Se a única coisa que seus aplicativos Web precisam fazer é executar fluxos de usuário, você pode ignorar as próximas seções. As informações nas seções a seguir são aplicáveis somente a aplicativos Web que precisam fazer chamadas autenticadas para uma API Web protegida pelo próprio Azure AD B2C.
Agora que você registrou o usuário na sua SPA, você pode obter tokens de acesso para chamar APIs Web protegidas pelo Microsoft Entra ID. Mesmo que você já tenha recebido um token usando o token tipo de resposta, poderá usar esse método para adquirir tokens para recursos adicionais sem redirecionar o usuário para entrar novamente.
Em um fluxo típico de aplicativo web, você faria uma solicitação para o /token endpoint. No entanto, o endpoint não dá suporte a requisições CORS, portanto fazer requisições AJAX para obter um token de atualização não é uma opção. Em vez disso, você pode usar o fluxo implícito em um elemento iframe HTML oculto para obter novos tokens para outras APIs Web. Aqui está um exemplo, com quebras de linha para legibilidade:
https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&scope=https%3A%2F%2Fapi.contoso.com%2Ftasks.read
&response_mode=fragment
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&prompt=none
| Parâmetro | Obrigatório? | Descrição |
|---|---|---|
| {inquilino} | Obrigatório | O nome de seu locatário do Azure AD B2C |
| {política} | Obrigatório | O fluxo do usuário a ser executado. Especifique o nome de um fluxo de usuário que você criou em seu locatário do Azure AD B2C. Por exemplo: b2c_1_sign_in, b2c_1_sign_up, ou b2c_1_edit_profile. |
| ID do cliente | Obrigatório | A ID do aplicativo atribuída ao seu aplicativo no portal do Azure. |
| tipo_de_resposta | Obrigatório | Deve incluir id_token para conexão do OpenID Connect. Também pode incluir o tipo de resposta token. Se você usar token aqui, seu aplicativo poderá receber imediatamente um token de acesso do ponto de extremidade autorizado, sem fazer uma segunda solicitação para o ponto de extremidade autorizado. Se você usar o token tipo de resposta, o scope parâmetro deverá conter um escopo que indique para qual recurso emitir o token. |
| URI de redirecionamento | Recomendado | O URI de redirecionamento do seu aplicativo, onde as respostas de autenticação podem ser enviadas e recebidas pelo aplicativo. Ele deve coincidir exatamente com um dos URIs de redirecionamento registrados no portal, exceto que deve ser codificado em URL. |
| âmbito | Obrigatório | Uma lista separada por espaços de âmbitos. Para obter tokens, inclua todos os escopos necessários para o recurso desejado. |
| modo_de_resposta | Recomendado | Especifica o método usado para enviar o token resultante de volta ao seu aplicativo. Para o fluxo implícito, use fragment. Dois outros modos podem ser especificados query e form_post, mas não funcionam no fluxo implícito. |
| estado | Recomendado | Um valor incluído na solicitação retornada na resposta do token. Pode ser uma cadeia de caracteres de qualquer conteúdo que você deseja usar. Normalmente, um valor exclusivo gerado aleatoriamente é usado para evitar ataques de falsificação de solicitação entre sites. O estado também é usado para codificar informações sobre o estado do usuário no aplicativo, antes que a solicitação de autenticação tenha ocorrido. Por exemplo, a página ou a exibição do usuário estava ativada. |
| Nonce | Obrigatório | Um valor incluído na solicitação, gerado pelo aplicativo, que é incluído no token de ID resultante como uma reivindicação. O aplicativo pode então verificar esse valor para prevenir ataques de reprodução de token. Normalmente, o valor é uma cadeia de caracteres aleatória e exclusiva que identifica a origem da solicitação. |
| solicitação | Obrigatório | Para atualizar e obter tokens em um iframe oculto, use prompt=none para garantir que o iframe não fique preso na página de entrada e retorne imediatamente. |
| login_hint | Obrigatório | Para atualizar e obter tokens em um iframe oculto, inclua o nome de usuário do usuário nesta dica para distinguir entre várias sessões que o usuário pode ter em um determinado momento. Você pode extrair o nome de usuário de uma entrada anterior usando a declaração preferred_username (o escopo profile é necessário para receber a declaração preferred_username). |
| domain_hint | Obrigatório | Pode ser consumers ou organizations. Para atualizar e obter tokens em um iframe oculto, inclua o valor domain_hint na solicitação. Extraia a declaração tid do token de ID de uma entrada anterior para determinar qual valor usar (o escopo profile é necessário para receber a declaração tid). Se o valor da declaração tid for 9188040d-6c67-4c5b-b112-36a304b66dad, use domain_hint=consumers. Caso contrário, use domain_hint=organizations. |
Ao definir o prompt=none parâmetro, essa solicitação é bem-sucedida ou falha imediatamente e retorna ao seu aplicativo. Uma resposta bem-sucedida é enviada ao seu aplicativo por meio do URI de redirecionamento usando o método especificado no response_mode parâmetro.
Resposta bem-sucedida
Uma resposta bem-sucedida usando response_mode=fragment se parece com este exemplo:
GET https://aadb2cplayground.azurewebsites.net/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=arbitrary_data_you_sent_earlier
&token_type=Bearer
&expires_in=3599
&scope=https%3A%2F%2Fapi.contoso.com%2Ftasks.read
| Parâmetro | Descrição |
|---|---|
| token_de_acesso | O token solicitado pelo aplicativo. |
| tipo_de_token | O tipo de token sempre será Portador. |
| estado | Se um parâmetro state for incluído na solicitação, o mesmo valor deverá aparecer na resposta. O aplicativo deve verificar se os state valores na solicitação e resposta são idênticos. |
| expira_em | Por quanto tempo o token de acesso é válido (em segundos). |
| âmbito | Os escopos para os quais o token de acesso é válido. |
Resposta de erro
As respostas de erro também podem ser enviadas para o URI de redirecionamento para que o aplicativo possa tratá-las adequadamente. Para prompt=none, um erro esperado se parece com este exemplo:
GET https://aadb2cplayground.azurewebsites.net/#
error=user_authentication_required
&error_description=the+request+could+not+be+completed+silently
| Parâmetro | Descrição |
|---|---|
| erro | Uma cadeia de caracteres de código de erro que pode ser usada para classificar tipos de erros que ocorrem. Você também pode usar a cadeia de caracteres para reagir a erros. |
| descrição_do_erro | Uma mensagem de erro específica que pode ajudar você a identificar a causa raiz de um erro de autenticação. |
Se você receber esse erro na solicitação do iframe, o usuário deverá entrar novamente de forma interativa para recuperar um novo token.
Tokens de atualização
Tokens de ID e tokens de acesso expiram após um curto período de tempo. Seu aplicativo deve estar preparado para atualizar esses tokens periodicamente. Os fluxos implícitos não permitem que você obtenha um token de atualização devido a motivos de segurança. Para atualizar qualquer tipo de token, use o fluxo implícito em um elemento iframe HTML oculto. Na solicitação de autorização, inclua o prompt=none parâmetro. Para receber um novo valor id_token, certifique-se de usar response_type=id_token e scope=openid, e um parâmetro nonce.
Enviar uma solicitação de saída
Quando você quiser desconectar o usuário do aplicativo, redirecione o usuário para o endereço de logout do Azure AD B2C. Em seguida, você pode limpar a sessão do usuário no aplicativo. Se você não redirecionar o usuário, ele poderá reautenticar seu aplicativo sem inserir suas credenciais novamente porque ele tem uma sessão de Sign-On única válida com o Azure AD B2C.
Você pode simplesmente redirecionar o usuário para o end_session_endpoint que está listado no mesmo documento de metadados do OpenID Connect descrito em Validar o token de ID. Por exemplo:
GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/logout?post_logout_redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| {inquilino} | Sim | O nome do seu locatário do Azure AD B2C. |
| {política} | Sim | O fluxo de usuário que você deseja usar para tirar o usuário do aplicativo. Esse precisa ser o mesmo fluxo de usuário que o aplicativo usou para conectar o usuário. |
| post_logout_redirect_uri | Não | A URL para a qual o usuário deve ser redirecionado após a saída bem-sucedida. Se não estiver incluído, o Azure AD B2C mostrará ao usuário uma mensagem genérica. |
| estado | Não | Se um parâmetro state for incluído na solicitação, o mesmo valor deverá aparecer na resposta. O aplicativo deve verificar se os state valores na solicitação e resposta são idênticos. |
Observação
Direcionar o usuário para end_session_endpoint limpa alguns dos estados de logon único do usuário com o Azure AD B2C. No entanto, ele não desconecta o usuário da sessão do provedor de identidade social. Se o usuário selecionar o mesmo provedor de identidade durante uma entrada subsequente, o usuário será autenticado novamente, sem inserir suas credenciais. Se um usuário quiser sair do aplicativo Azure AD B2C, isso não significa necessariamente que ele deseja sair completamente da conta do Facebook, por exemplo. No entanto, para contas locais, a sessão do usuário será encerrada corretamente.
Próximas etapas
Confira o exemplo de código: Entre com o Azure AD B2C em um SPA JavaScript.