Ativar o início de sessão em aplicações Java WebSphere com o MSAL4J e o Azure Active Directory B2C

Este artigo demonstra uma aplicação Java Servlet que autentica utilizadores no Azure Active Directory B2C (Azure AD B2C) utilizando a Biblioteca de Autenticação da Microsoft para Java (MSAL4J).

Nota

Desde 1 de maio de 2025, o Azure Active Directory B2C já não está disponível para compra para novos clientes. Os clientes existentes podem continuar a usar o Azure AD B2C, com suporte fornecido pelo menos até maio de 2030. Para novos projetos de gestão de identidade e acesso de clientes (CIAM), utilize o ID externo Microsoft Entra em vez disso.

O diagrama a seguir mostra a topologia do aplicativo:

Diagrama que mostra a topologia da aplicação.

A aplicação utiliza o MSAL4J para iniciar sessão dos utilizadores e obter um token de ID do Azure AD B2C. O token ID prova que o utilizador está autenticado contra um inquilino B2C do Azure AD.

Pré-requisitos

  • JDK versão 8 ou posterior
  • Maven 3
  • Um inquilino do Azure AD B2C. Para obter mais informações, consulte Tutorial: Criar um inquilino do Azure Active Directory B2C
  • Uma conta de usuário em seu locatário do Azure AD B2C.
  • WebSphere
  • Visual Studio Code
  • Ferramentas do Azure para Visual Studio Code

Recomendações

  • Alguma familiaridade com os Servlets Java / Jakarta.
  • Alguma familiaridade com o terminal Linux/OSX.
  • jwt.ms para inspecionar os seus tokens.
  • Fiddler para monitorizar a atividade da sua rede e diagnosticar e resolver problemas.
  • Siga o Blog do Microsoft Entra para ficar up-toa par dos últimos desenvolvimentos.

Configurar o exemplo

As seções a seguir mostram como configurar o aplicativo de exemplo.

Clone ou faça download do repositório de exemplo

Para clonar o exemplo, abra uma janela Bash e use o seguinte comando:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/1-Authentication/sign-in-b2c

Em alternativa, navegue até ao repositório ms-identity-msal-java-samples, transfira-o como ficheiro .zip e extraia-o para o seu disco rígido.

Importante

Para evitar limitações de comprimento de caminho de arquivo no Windows, clone ou extraia o repositório em um diretório perto da raiz do seu disco rígido.

Registe a aplicação de exemplo no seu inquilino do Azure AD B2C

A amostra vem com um aplicativo pré-registrado para fins de teste. Se você quiser usar seu próprio locatário e aplicativo do Azure AD B2C, siga as etapas nas seções a seguir para registrar e configurar o aplicativo no portal do Azure. Caso contrário, continue com os passos para Executar o exemplo.

Escolha o locatário do Azure AD B2C onde você deseja criar seus aplicativos

Para escolher o seu inquilino, siga os seguintes passos:

  1. Inicie sessão no portal do Azure.

  2. Se a sua conta estiver presente em mais do que um inquilino do Azure AD B2C, selecione o seu perfil no canto do portal do Azure e, em seguida, selecione Switch directory para mudar a sessão para o inquilino pretendido do Azure AD B2C.

Criar fluxos de usuário e políticas personalizadas

Para criar fluxos de utilizador comuns, como registo, início de sessão, edição do perfil e reposição da palavra-passe, consulte Tutorial: Criar fluxos de utilizador no Azure Active Directory B2C.

Também deve considerar criar políticas personalizadas no Azure Active Directory B2C; no entanto, isso está fora do âmbito deste tutorial.

Adicionar provedores de identidade externos

Consulte Tutorial: Adicionar fornecedores de identidade às suas aplicações no Azure Active Directory B2C.

Registrar o aplicativo (ms-identity-b2c-java-servlet-webapp-authentication)

Para registrar o aplicativo, use as seguintes etapas:

  1. Navegue até ao Azure portal e selecione Azure AD B2C.

  2. Selecione Registos de Aplicações no painel de navegação e, em seguida, selecione Novo registo.

  3. Na página Registrar um aplicativo que aparece, insira as seguintes informações de registro do aplicativo:

    • Na secção Name, introduza um nome significativo para a aplicação, para apresentar aos utilizadores da aplicação - por exemplo, .
    • Em Tipos de conta suportados, selecione Contas em qualquer diretório organizacional e contas pessoais da Microsoft (por exemplo, Skype, Xbox, Outlook.com).
    • Na secção URI de Redirecionamento (opcional), selecione Web na caixa de combinação e introduza o seguinte URI de redirecionamento: .
  4. Selecione Registar para criar a aplicação.

  5. Na página de registo da aplicação, localize e copie o valor de ID da aplicação (cliente) para utilizar mais tarde. Você usa esse valor no(s) arquivo(s) de configuração do seu aplicativo.

  6. Selecione Guardar para guardar as alterações.

  7. Na página de registo da aplicação, selecione Certificados & segredos no painel de navegação para abrir a página onde pode gerar segredos e carregar certificados.

  8. Na secção Segredos de cliente, selecione Novo segredo de cliente.

  9. Digite uma descrição - por exemplo, segredo do aplicativo.

  10. Selecione uma expiração para o segredo ou especifique um tempo de vida personalizado. Os segredos dos clientes têm uma duração máxima de 24 meses, e a Microsoft recomenda uma expiração inferior a 12 meses. Para aplicações de produção, prefira um certificado ou uma credencial federada de identidade em vez de um segredo do cliente.

  11. Selecione Adicionar. O valor gerado é exibido.

  12. Copie e salve o valor gerado para uso em etapas posteriores. Você precisa desse valor para os arquivos de configuração do seu código. Esse valor não é exibido novamente e você não pode recuperá-lo por nenhum outro meio. Portanto, certifique-se de salvá-lo do portal do Azure antes de navegar para qualquer outra tela ou painel.

Configure o aplicativo (ms-identity-b2c-java-servlet-webapp-authentication) para usar o registro do aplicativo

Use as seguintes etapas para configurar o aplicativo:

Nota

Nos passos seguintes, corresponde a ou .

  1. Abra o projeto no seu IDE.

  2. Abra o ficheiro ./src/main/resources/authentication.properties.

  3. Encontre a propriedade e substitua o valor existente pelo ID da aplicação ou da aplicação no portal do Azure.

  4. Encontre a propriedade e substitua o valor existente pelo valor que guardou durante a criação da aplicação no portal do Azure.

  5. Encontre a propriedade e substitua o clientId da aplicação existente pelo valor que colocou em no passo 1 desta secção.

  6. Localize a propriedade e substitua a primeira instância de pelo nome do inquilino do Azure AD B2C no qual criou a aplicação no portal do Azure.

  7. Encontre a propriedade e substitua a segunda ocorrência de pelo nome do inquilino do Azure AD B2C em que criou a aplicação no portal do Azure.

  8. Localize a propriedade e substitua-a pelo nome da política de fluxo de utilizador de inscrição/início de sessão que criou no tenant do Azure AD B2C em que criou a aplicação no portal do Azure.

  9. Localize a propriedade e substitua-a pelo nome da política de fluxo de utilizador de reposição da palavra-passe que criou no inquilino do Azure AD B2C no qual criou a aplicação no portal do Azure.

  10. Encontre a propriedade e substitua-a pelo nome da política de fluxo de utilizador de edição de perfil que criou no inquilino do Azure AD B2C em que criou a aplicação no portal do Azure.

Criar o exemplo

Para criar o exemplo usando o Maven, navegue até o diretório que contém o arquivo pom.xml para o exemplo e execute o seguinte comando:

mvn clean package

Este comando gera um arquivo .war que você pode executar em vários servidores de aplicativos.

Executar o exemplo

Estas instruções pressupõem que você instalou o WebSphere e configurou um servidor. Pode utilizar as orientações em Implementar um cluster do WebSphere Application Server (tradicional) em Máquinas Virtuais do Azure para uma configuração básica do servidor.

Antes de implantar no WebSphere, use as seguintes etapas para fazer algumas alterações de configuração no próprio exemplo e, em seguida, compilar ou reconstruir o pacote:

  1. Aceda ao ficheiro authentication.properties da sua aplicação e altere o valor de para o URL do seu servidor e o número da porta que tenciona utilizar, conforme mostrado no exemplo seguinte:

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<server-url>:<port-number>/msal4j-servlet-auth/
    
  2. Depois de salvar esse arquivo, use o seguinte comando para reconstruir seu aplicativo:

    mvn clean package
    
  3. Depois de a compilação do código terminar, copie o ficheiro .war para o sistema de ficheiros do servidor de destino.

Você também precisa de fazer a mesma alteração no registo da aplicação do Azure, onde o define no portal do Azure como valor de URI de redirecionamento no separador Autenticação.

  1. Aceda à página Registos de aplicações da plataforma de identidade da Microsoft para programadores.

  2. Utilize a caixa de pesquisa para procurar o registo da sua aplicação - por exemplo, .

  3. Abra o registro do aplicativo selecionando seu nome.

  4. Selecione Autenticação a partir do menu.

  5. Na secção WebURIs de redirecionamento, selecione Adicionar URI.

  6. Preencha o URI da sua aplicação, acrescentando /auth/redirect — por exemplo, .

  7. Selecione Guardar.

Use as seguintes etapas para implantar o exemplo usando o Console de Soluções Integradas do WebSphere:

  1. Na guia Aplicativos, selecione Novo Aplicativo e, em seguida, Novo Aplicativo Empresarial.

  2. Escolha o ficheiro .war que criou e, em seguida, selecione Seguinte até chegar ao passo de instalação Map context roots for Web modules. As outras configurações padrão devem ser boas.

  3. Para a raiz de contexto, defina-a com o mesmo valor que aparece a seguir ao número da porta no 'URI de redirecionamento' que definiu na configuração de exemplo/no registo da aplicação no Azure. Ou seja, se o URI de redirecionamento for , então a raiz de contexto deve ser .

  4. Selecione Concluir.

  5. Depois de a aplicação concluir a instalação, vá para a secção aplicações empresariais do WebSphere do separador Aplicações.

  6. Selecione o arquivo .war que você instalou na lista de aplicativos e, em seguida, selecione Iniciar para implantar.

  7. Depois de a implantação terminar, aceda a e deverá conseguir ver a aplicação.

Ver o exemplo

Use as seguintes etapas para explorar o exemplo:

  1. Observe o status de entrada ou saída exibido no centro da tela.
  2. Selecione o botão sensível ao contexto no canto. Este botão apresenta Iniciar sessão quando executa a aplicação pela primeira vez.
  3. Na página seguinte, siga as instruções e inicie sessão com uma conta do fornecedor de identidade escolhido.
  4. Observe que o botão sensível ao contexto agora diz Sair e exibe seu nome de usuário.
  5. Selecione Detalhes do token de ID para ver alguns dos claims descodificados do token de ID.
  6. Você também tem a opção de editar seu perfil. Selecione o link para editar detalhes como seu nome para exibição, local de residência e profissão.
  7. Use o botão no canto para sair.
  8. Depois de terminar sessão, navegue para o seguinte URL da página de detalhes do token: . Aqui, pode observar como a aplicação apresenta o erro em vez das declarações do token de ID.

Sobre o código

Este exemplo demonstra como utilizar o MSAL4J para iniciar sessão dos utilizadores no seu inquilino do Azure AD B2C.

Conteúdos

A tabela a seguir mostra o conteúdo da pasta de projeto de exemplo:

Ficheiro/pasta Descrição
AuthHelper.java Funções auxiliares para autenticação.
Config.java É executado na inicialização e configura o leitor de propriedades e o registrador.
authentication.properties Microsoft Entra ID e configuração do programa.
AuthenticationFilter.java Redireciona solicitações não autenticadas para recursos protegidos para uma página 401.
MsalAuthSession Instanciado com um . Armazena todos os atributos de sessão relacionados ao MSAL no atributo session.
*Servlet.java Todos os endpoints disponíveis são definidos em classes Java com nomes terminados em Servlet..
CHANGELOG.md Lista de alterações à amostra.
CONTRIBUTING.md Orientações para contribuir para a amostra.
LICENÇA A licença para a amostra.

ConfidentialClientApplication

É criada uma instância de no ficheiro AuthHelper.java, conforme mostrado no exemplo seguinte. Este objeto ajuda a criar a URL de autorização do Azure AD B2C e também ajuda a trocar o token de autenticação por um token de acesso.

IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                     .builder(CLIENT_ID, secret)
                     .b2cAuthority(AUTHORITY + policy)
                     .build();

Os seguintes parâmetros são usados para instanciação:

  • A ID do cliente do aplicativo.
  • O segredo do cliente, que é um requisito para aplicações cliente confidenciais.
  • A autoridade do Azure AD B2C concatenada com o elemento adequado para registo, início de sessão, edição de perfil ou reposição da palavra-passe.

Neste exemplo, esses valores são lidos do arquivo authentication.properties usando um leitor de propriedades no arquivo Config.java .

Guia passo a passo

As etapas a seguir fornecem um passo a passo da funcionalidade do aplicativo:

  1. O primeiro passo do processo de início de sessão é enviar um pedido para o ponto final do seu inquilino do Azure Active Directory B2C. A instância de MSAL4J é usada para construir um URL de pedido de autorização, e a aplicação redireciona o navegador para esse URL, conforme mostrado no exemplo seguinte:

    final ConfidentialClientApplication client = getConfidentialClientInstance(policy);
    final AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters
        .builder(REDIRECT_URI, Collections.singleton(SCOPES)).responseMode(ResponseMode.QUERY)
        .prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String redirectUrl = client.getAuthorizationRequestUrl(parameters).toString();
    Config.logger.log(Level.INFO, "Redirecting user to {0}", redirectUrl);
    resp.setStatus(302);
    resp.sendRedirect(redirectUrl);
    

    A lista a seguir descreve os recursos desse código:

    • : Parâmetros que têm de ser definidos para construir um AuthorizationRequestUrl.

    • : Onde o Azure AD B2C redireciona o navegador — juntamente com o código de autorização — depois de recolher as credenciais do utilizador.

    • : Escopos são permissões solicitadas pela aplicação.

      Normalmente, os três âmbitos seriam suficientes para receber uma resposta com um token de ID. No entanto, o MSAL4J requer que todas as respostas do Azure AD B2C também contenham um token de acesso.

      Para que o Azure AD B2C dispense um token de acesso, bem como um token de ID, a solicitação deve incluir um escopo de recurso adicional. Como esse aplicativo não requer um escopo de recurso externo, ele adiciona sua própria ID de cliente como um quarto escopo para receber um token de acesso.

      Pode encontrar uma lista completa dos âmbitos solicitados pela aplicação no ficheiro authentication.properties.

    • : O Azure AD B2C pode devolver a resposta como parâmetros de um formulário num pedido HTTP POST ou como parâmetros de cadeia de consulta num pedido HTTP GET.

    • : o Azure AD B2C deve pedir ao utilizador para selecionar a conta com a qual pretende autenticar-se.

    • : Uma variável única definida pela aplicação na sessão em cada pedido de token e destruída após a receção do callback de redirecionamento correspondente do Azure AD B2C. A variável de estado garante que os pedidos do Azure AD B2C para o provêm efetivamente de pedidos de autorização do Azure AD B2C com origem nesta aplicação e nesta sessão, evitando assim ataques de CSRF. Isto é feito no ficheiro AADRedirectServlet.java.

    • : Uma variável exclusiva definida pela aplicação na sessão a cada pedido de token e eliminada após a receção do token correspondente. Este nonce é incluído nos tokens resultantes emitidos pelo Azure AD B2C, garantindo assim que não ocorra qualquer ataque de repetição de tokens.

  2. O usuário recebe um prompt de entrada do Azure Ative Directory B2C. Se a tentativa de início de sessão for bem-sucedida, o navegador do utilizador é redirecionado para o ponto final de redirecionamento da aplicação. Um pedido válido para este ponto final contém um código de autorização.

  3. A instância troca então esse código de autorização por um token de identificação e um token de acesso do Azure Active Directory B2C, conforme mostrado no exemplo seguinte:

    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
                        .builder(authCode, new URI(REDIRECT_URI))
                        .scopes(Collections.singleton(SCOPES)).build();
    
    final ConfidentialClientApplication client = AuthHelper
            .getConfidentialClientInstance(policy);
    final Future<IAuthenticationResult> future = client.acquireToken(authParams);
    final IAuthenticationResult result = future.get();
    

    A lista a seguir descreve os recursos desse código:

    • : Parâmetros que devem ser configurados para trocar o Código de Autorização por um ID e/ou um token de acesso.
    • : O código de autorização recebido na extremidade de redirecionamento.
    • : O URI de redirecionamento utilizado no passo anterior deve ser fornecido novamente.
    • : Os escopos utilizados no passo anterior devem ser passados novamente.
  4. Se for bem-sucedida, as declarações do token são extraídas e a declaração `nonce` é validada face ao nonce armazenado na sessão, conforme mostrado no exemplo seguinte:

    parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache);
    validateNonce(msalAuth)
    processSuccessfulAuthentication(msalAuth);
    
  5. Se o nonce for validado com êxito, o estado de autenticação é armazenado numa sessão no lado do servidor, recorrendo aos métodos expostos pela classe , conforme mostrado no exemplo seguinte:

    msalAuth.setAuthenticated(true);
    msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
    

Mais informações

  • O que é o Azure Active Directory B2C?
  • Tipos de aplicações que podem ser utilizados no Azure Active Directory B2C
  • Recomendações e melhores práticas para o Azure Active Directory B2C
  • Sessão do Azure AD B2C
  • Biblioteca de Autenticação da Microsoft (MSAL) para Java

Para obter mais informações sobre o funcionamento dos protocolos OAuth 2.0 neste cenário e noutros cenários, consulte Cenários de autenticação do Microsoft Entra ID.

Próximo passo

Implementar aplicações WebSphere Java no Traditional WebSphere nas Máquinas Virtuais do Azure