Proteja aplicativos Java WebSphere usando grupos e declarações de grupo

Este artigo mostra-lhe como criar uma aplicação Java WebSphere que permite aos utilizadores iniciar sessão com a Biblioteca de Autenticação da Microsoft (MSAL) para Java. O aplicativo também restringe o acesso a páginas com base na associação ao grupo de segurança Microsoft Entra ID.

O diagrama a seguir mostra a topologia do aplicativo:

Diagrama que mostra a topologia da aplicação.

A aplicação cliente utiliza o MSAL para Java (MSAL4J) para iniciar sessão dos utilizadores num inquilino do Microsoft Entra ID e obter um token de ID do Microsoft Entra ID. O token de ID prova que um usuário está autenticado com esse locatário. O aplicativo protege suas rotas de acordo com o status de autenticação do usuário e a associação ao grupo.

Para ver um vídeo que aborda este cenário, veja Implementar a autorização nas suas aplicações com funções da aplicação, grupos de segurança, âmbitos e funções de diretório.

Pré-requisitos

  • JDK versão 8 ou posterior
  • Maven 3
  • Um inquilino do Microsoft Entra ID. Para obter mais informações, consulte Como obter um inquilino do Microsoft Entra ID.
  • Uma conta de usuário em seu próprio locatário do Microsoft Entra ID.
  • Dois grupos de segurança, e , que contenham os utilizadores com os quais pretende fazer testes.
  • 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/3-Authorization-II/groups

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.

Registrar o aplicativo de exemplo com seu locatário do Microsoft Entra ID

Há um projeto neste exemplo. As seções a seguir mostram como registrar o aplicativo usando o portal do Azure.

Escolha o inquilino do Microsoft Entra ID no qual pretende criar as suas aplicações

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 de um inquilino do Microsoft Entra ID, selecione o seu perfil no canto do portal do Azure e, em seguida, selecione Switch directory para alterar a sua sessão para o inquilino pretendido do Microsoft Entra ID.

Registrar o aplicativo (java-servlet-webapp-groups)

Primeiro, registe uma nova aplicação no portal do Azure, seguindo as instruções em Início Rápido: Registar uma aplicação com a plataforma de identidades da Microsoft.

Em seguida, use as seguintes etapas para concluir o registro:

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

  2. Selecione Novo registo.

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

    • Na secção Nome, introduza um nome significativo para a aplicação para apresentar aos utilizadores da aplicação - por exemplo, .
    • Em Tipos de conta suportados, selecione Contas apenas neste diretório organizacional.
    • Na secção URI de redirecionamento, 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.

  13. Na página de registro do aplicativo, selecione Permissões de API no painel de navegação para abrir a página e adicionar acesso às APIs de que seu aplicativo precisa.

  14. Selecione Adicionar uma permissão.

  15. Certifique-se de que o separador Microsoft APIs está selecionado.

  16. Na seção APIs da Microsoft comumente usadas, selecione Microsoft Graph.

  17. Na seção Permissões delegadas, selecione User.Read e GroupMember.Read.All na lista. Use a caixa de pesquisa, se necessário.

  18. Selecione Adicionar permissões.

  19. requer consentimento de administrador, por isso, selecione Conceder/revogar consentimento de administrador para {tenant} e, em seguida, selecione Sim quando lhe for perguntado se pretende conceder consentimento para as permissões solicitadas para todas as contas no tenant. Você precisa ser um administrador de locatário do Microsoft Entra ID para executar essa ação.


Configurar a aplicação (java-servlet-webapp-groups) para usar o registo da sua aplicação

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 cadeia de caracteres . Substitua o valor existente pelo ID do tenant do Microsoft Entra, se tiver registado a sua aplicação com a opção Contas apenas neste diretório organizacional.

  4. Encontre a cadeia e substitua o valor existente pelo ID da aplicação ou da aplicação copiado do portal do Azure.

  5. Localize a cadeia e substitua o valor existente pelo valor que guardou durante a criação da aplicação , no portal do Azure.

Configurar grupos de segurança

Você tem as seguintes opções disponíveis sobre como configurar ainda mais seus aplicativos para receber a reivindicação de grupos:

  • Receba todos os grupos aos quais o usuário conectado está atribuído em um locatário do Microsoft Entra ID, incluindo grupos aninhados. Para obter mais informações, consulte a secção Configurar a sua aplicação para receber todos os grupos a que o utilizador com sessão iniciada pertence, incluindo grupos aninhados.

  • Receba os valores de declaração de grupos de um conjunto filtrado de grupos com os quais seu aplicativo está programado para trabalhar. Para obter mais informações, consulte a secção Configurar a sua aplicação para receber os valores da reivindicação de grupos de um conjunto filtrado de grupos aos quais um utilizador pode estar atribuído. Esta opção não está disponível na edição gratuita do Microsoft Entra ID.

Nota

Para obter o ou o do grupo no local, em vez da ID do grupo, consulte a secção Pré-requisitos para utilizar atributos de grupo sincronizados a partir do Active Directory em Configurar declarações de grupo para aplicações ao utilizar o Microsoft Entra ID.

Configure seu aplicativo para receber todos os grupos aos quais o usuário conectado está atribuído, incluindo grupos aninhados

Para configurar seu aplicativo, use as seguintes etapas:

  1. Na página de registo da aplicação, selecione Token Configuration no painel de navegação para abrir a página onde pode configurar as reivindicações fornecidas nos tokens emitidos para a sua aplicação.

  2. Selecione Adicionar declaração de grupos para abrir o Editar declaração de grupos.

  3. Selecione Grupos de segurança OU a opção Todos os grupos (inclui listas de distribuição, mas não grupos atribuídos ao aplicativo). Escolher ambas as opções anula o efeito da opção Security Groups.

  4. Na secção ID, selecione ID do grupo. Esta seleção faz com que o Microsoft Entra ID envie o ID de objeto dos grupos aos quais o utilizador está atribuído na afirmação de grupos do token de ID que a sua aplicação recebe depois de o utilizador iniciar sessão.

Configure seu aplicativo para receber os valores de declaração de grupos de um conjunto filtrado de grupos aos quais um usuário pode ser atribuído

Esta opção é útil quando os seguintes casos são verdadeiros:

  • A sua aplicação tem interesse num conjunto selecionado de grupos aos quais um utilizador que inicia sessão possa estar atribuído.
  • A sua aplicação não tem interesse em todos os grupos de segurança aos quais este utilizador foi atribuído no tenant.

Esta opção ajuda a sua aplicação a evitar o problema de overage.

Nota

Esta funcionalidade não está disponível na edição gratuita do Microsoft Entra ID.

As atribuições de grupos aninhados não estão disponíveis quando utiliza esta opção.

Para habilitar essa opção em seu aplicativo, use as seguintes etapas:

  1. Na página de registo da aplicação, selecione Token Configuration no painel de navegação para abrir a página onde pode configurar as reivindicações fornecidas nos tokens emitidos para a sua aplicação.

  2. Selecione Adicionar declaração de grupos para abrir o Editar declaração de grupos.

  3. Selecione Grupos atribuídos ao aplicativo.

    Escolher outras opções - como Grupos de Segurança ou Todos os grupos (inclui listas de distribuição, mas não grupos atribuídos ao aplicativo) - nega os benefícios que seu aplicativo obtém ao escolher usar essa opção.

  4. Na secção ID, selecione ID do grupo. Esta seleção faz com que o Microsoft Entra ID envie o ID de objeto dos grupos aos quais o utilizador está atribuído na afirmação de grupos do token de ID.

  5. Se estiver a expor uma API da Web com a opção Expor uma API, também pode escolher a opção ID do Grupo na secção Acesso. Esta opção faz com que o Microsoft Entra ID envie o ID do objeto dos grupos aos quais o utilizador está atribuído na afirmação de grupos do token de acesso.

  6. Na página de registro do aplicativo, selecione Visão geral no painel de navegação para abrir a tela de visão geral do aplicativo.

  7. Selecione o hiperlink com o nome do seu aplicativo em Aplicativo gerenciado no diretório local. Este título de campo pode estar truncado - por exemplo . Ao selecionar esta ligação, é encaminhado para a página Enterprise Application Overview associada ao principal de serviço da sua aplicação no inquilino onde a criou. Você pode navegar de volta para a página de registro do aplicativo usando o botão Voltar do seu navegador.

  8. Selecione Usuários e grupos no painel de navegação para abrir a página onde você pode atribuir usuários e grupos ao seu aplicativo.

  9. Selecione Adicionar utilizador.

  10. Selecione Usuário e Grupos na tela resultante.

  11. Escolha os grupos que você deseja atribuir a este aplicativo.

  12. Selecione Selecionar para concluir a seleção dos grupos.

  13. Selecione Atribuir para concluir o processo de atribuição de grupo.

    Seu aplicativo agora recebe esses grupos selecionados na declaração de grupos quando um usuário que entra em seu aplicativo é membro de um ou mais desses grupos atribuídos.

  14. Selecione Propriedades no painel de navegação para abrir a página que lista as propriedades básicas da sua aplicação. Defina a opção Atribuição de utilizador necessária? como Sim.

Importante

Quando você define Atribuição de usuário necessária? , como Sim, a ID do Microsoft Entra verifica se apenas os usuários atribuídos ao seu aplicativo no painel Usuários e grupos podem entrar no seu aplicativo. Você pode atribuir usuários diretamente ou atribuindo grupos de segurança aos quais eles pertencem.

Configurar o aplicativo (java-servlet-webapp-groups) para reconhecer IDs de grupo

Use as seguintes etapas para configurar o aplicativo:

Importante

Na página Configuração do Token, se tiver escolhido qualquer opção que não groupID — como DNSDomain\sAMAccountName — introduza o nome do grupo nos passos seguintes — por exemplo, — em vez da ID de objeto:

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

  2. Encontre a sequência e substitua o valor existente pela ID do objeto do grupo , que copiou do portal do Azure. Remova também as chaves do valor do marcador de posição.

  3. Encontre a sequência e substitua o valor existente pela ID do objeto do grupo , que copiou do portal do Azure. Remova também as chaves do valor do marcador de posição.

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 entre com uma conta no locatário do Microsoft Entra ID.
  4. Na tela de consentimento, observe os escopos que estão sendo solicitados.
  5. Observe que o botão sensível ao contexto agora diz Sair e exibe seu nome de usuário.
  6. Selecione Detalhes do token de ID para ver algumas das declarações descodificadas do token de ID.
  7. Selecione Grupos para ver todas as informações sobre a associação ao grupo de segurança para o usuário conectado.
  8. Selecione Somente administrador ou Usuário regular para acessar os grupos que reivindicam pontos de extremidade protegidos.
    • Se o utilizador com sessão iniciada estiver no grupo , o utilizador pode aceder a ambas as páginas.
    • Se o utilizador com sessão iniciada estiver no grupo , o utilizador só pode aceder à página Utilizador normal.
    • Se o usuário conectado não estiver em nenhum dos grupos, o usuário não poderá acessar nenhuma das duas páginas.
  9. Use o botão no canto para sair.
  10. Depois de terminar sessão, selecione ID Token Details para verificar que a aplicação apresenta o erro em vez das declarações do token de ID quando o utilizador não está autorizado.

Sobre o código

Este exemplo utiliza o MSAL para Java (MSAL4J) para iniciar sessão de um utilizador e obter um token de identificação que poderá conter o atributo "groups". Se houver demasiados grupos para serem emitidos no token de ID, o exemplo utiliza Microsoft Graph SDK for Java para obter do Microsoft Graph os dados de pertença aos grupos. Com base nos grupos a que o utilizador pertence, o utilizador com sessão iniciada pode não aceder a nenhuma, a uma ou a ambas as páginas protegidas, e .

Se você quiser replicar o comportamento deste exemplo, você deve adicionar MSAL4J e Microsoft Graph SDK para seus projetos usando Maven. Você pode copiar o ficheiro pom.xml e o conteúdo das pastas helpers e authservlets da pasta src/main/java/com/microsoft/azuresamples/msal4j. Também precisa do ficheiro authentication.properties. Essas classes e arquivos contêm código genérico que você pode usar em uma ampla variedade de aplicativos. Você também pode copiar o restante do exemplo, mas as outras classes e arquivos são criados especificamente para abordar o objetivo deste exemplo.

Conteúdos

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

Ficheiro/pasta Descrição
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Este diretório contém as classes que definem a lógica de negócios de back-end do aplicativo.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Este diretório contém as classes que são usadas para entrar e sair pontos de extremidade.
*Servlet.java Todos os endpoints disponíveis são definidos em classes Java com nomes terminados em Servlet.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Classes auxiliares para autenticação.
AuthenticationFilter.java Redireciona pedidos não autenticados para endpoints protegidos para a página 401.
src/main/resources/authentication.properties Microsoft Entra ID e configuração do programa.
src/main/webapp/ Este diretório contém os modelos UI - JSP
CHANGELOG.md Lista de alterações à amostra.
CONTRIBUTING.md Orientações para contribuir para a amostra.
LICENÇA A licença para a amostra.

Processar uma declaração de grupo num token, incluindo o tratamento de excesso

As seções a seguir descrevem como o aplicativo processa uma declaração de grupo.

Os grupos reivindicam

A ID do objeto dos grupos de segurança dos quais o usuário conectado é membro é retornada na declaração groups do token, mostrada no exemplo a seguir:

{
  ...
  "groups": [
    "0bbe91cc-b69e-414d-85a6-a043d6752215",
    "48931dac-3736-45e7-83e8-015e6dfd6f7c",]
  ...
}

A reclamação de excedente dos grupos

Para garantir que o tamanho do token não exceda os limites de tamanho do cabeçalho HTTP, a plataforma de identidade da Microsoft limita o número de IDs de objeto que inclui na declaração de grupos.

O limite de ultrapassagem é de 150 para tokens SAML, 200 para tokens JWT e 6 para aplicativos de página única. Se um usuário for membro de mais grupos do que o limite de excedente, a plataforma de identidade da Microsoft não emitirá as IDs de grupo na declaração de grupos no token. Em vez disso, inclui uma declaração de excedente no token que indica à aplicação que consulte a Microsoft Graph API para obter a pertença do utilizador aos grupos, conforme mostrado no exemplo seguinte:

{
  ...
  "_claim_names": {
    "groups": "src1"
    },
    {
   "_claim_sources": {
    "src1": {
        "endpoint":"[Graph Url to get this user's group membership from]"
        }
    }
  ...
}

Crie o cenário de excedente neste exemplo para testes

Para criar o cenário de excedente, pode utilizar os seguintes passos:

  1. Você pode usar o arquivo BulkCreateGroups.ps1 fornecido na pasta AppCreationScripts para criar um grande número de grupos e atribuir usuários a eles. Esse arquivo ajuda a testar cenários de sobrecarga durante o desenvolvimento. Lembre-se de alterar o fornecido pelo utilizador no script BulkCreateGroups.ps1.

  2. Quando executas este exemplo e ocorre um excedente, vês o _claim_names na página inicial depois que o utilizador entra na conta.

  3. Recomendamos vivamente que utilize a funcionalidade de filtragem de grupo, se possível, para evitar excessos de grupo. Para obter mais informações, consulte a secção Configurar a sua aplicação para receber os valores da reivindicação de grupos de um conjunto filtrado de grupos aos quais um utilizador pode estar atribuído.

  4. Caso não consiga evitar o excesso de grupos, sugerimos que utilize os seguintes passos para processar a declaração de grupos no seu token:

    1. Verifique a declaração _claim_names com um dos valores sendo grupos. Esta reclamação indica excesso.
    2. Caso seja encontrado, faça uma chamada para o endpoint especificado em _claim_sources para buscar os grupos de utilizador.
    3. Se não for encontrado nenhum, consulte a afirmação groups para os grupos do utilizador.

Nota

Gerir o excesso requer uma chamada ao Microsoft Graph para ler as pertenças a grupos do utilizador com sessão iniciada, pelo que a sua aplicação tem de ter a permissão GroupMember.Read.All para que a função getMemberObjects seja executada com êxito.

Para obter mais informações sobre programação para o Microsoft Graph, consulte o vídeo Uma introdução ao Microsoft Graph para desenvolvedores.

ConfidentialClientApplication

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

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                      .builder(CLIENT_ID, secret)
                      .authority(AUTHORITY)
                      .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 de ID do Microsoft Entra, que inclui sua ID de locatário do Microsoft Entra.

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 no seu inquilino do Microsoft Entra ID. A instância da MSAL4J é usada para construir um URL de pedido de autorização. A aplicação redireciona o navegador para este URL, que é onde o utilizador inicia sessão.

    final ConfidentialClientApplication client = getConfidentialClientInstance();
    AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES))
            .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString();
    contextAdapter.redirectUser(authorizeUrl);
    

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

    • : Parâmetros que têm de ser definidos para construir um AuthorizationRequestUrl.
    • : Local para onde o Microsoft Entra redireciona o navegador — juntamente com o código de autorização — depois de recolher as credenciais do utilizador. Ele deve corresponder ao URI de redirecionamento no registo da aplicação Microsoft Entra ID no Azure portal.
    • : Scopes são as permissões solicitadas pela aplicação.
      • Normalmente, os três âmbitos são suficientes para receber uma resposta de token de ID.
      • A lista completa dos âmbitos solicitados pela aplicação pode ser consultada no ficheiro authentication.properties. Você pode adicionar mais escopos, como .
  2. Ao utilizador é apresentado um pedido de início de sessão pelo Microsoft Entra ID. 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 este código de autorização por um token de ID e um token de acesso junto do Microsoft Entra ID.

    // First, validate the state, then parse any error codes in response, then extract the authCode. Then:
    // build the auth code params:
    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
            .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build();
    
    // Get a client instance and leverage it to acquire the token:
    final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance();
    final IAuthenticationResult result = client.acquireToken(authParams).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 associadas ao token são extraídas. Se a verificação do nonce for bem-sucedida, os resultados são colocados em - uma instância de - e guardados na sessão. A aplicação pode então instanciar o a partir da sessão, por meio de uma instância de , sempre que precisar de aceder ao mesmo, conforme mostrado no código seguinte:

    // parse IdToken claims from the IAuthenticationResult:
    // (the next step - validateNonce - requires parsed claims)
    context.setIdTokenClaims(result.idToken());
    
    // if nonce is invalid, stop immediately! this could be a token replay!
    // if validation fails, throws exception and cancels auth:
    validateNonce(context);
    
    // set user to authenticated:
    context.setAuthResult(result, client.tokenCache().serialize());
    
    // handle groups overage if it has occurred.
    handleGroupsOverage(contextAdapter);
    
  5. Após o passo anterior, pode extrair as pertenças a grupos ao chamar usando uma instância de .

  6. Se o utilizador for membro de demasiados grupos - mais de 200 - uma chamada a pode ficar vazia se não fosse a chamada a . Entretanto, devolve , assinalando que foi excedido o limite e que, para obter a lista completa de grupos, é necessária uma chamada ao Microsoft Graph. Consulte o método em AuthHelper.java para ver como esta aplicação usa quando há um excesso.

Proteja as rotas

Consulte AuthenticationFilter.java para ver como o aplicativo de exemplo filtra o acesso às rotas. No ficheiro authentication.properties, a propriedade contém as rotas separadas por vírgulas a que só os utilizadores autenticados podem aceder, conforme mostrado no exemplo seguinte:

# for example, /token_details requires any user to be signed in and does not require special groups claim
app.protect.authenticated=/token_details

Qualquer uma das rotas listadas nos conjuntos de regras separados por vírgulas sob o também está vedada a utilizadores não autenticados, conforme mostrado no exemplo seguinte. No entanto, estas rotas também contêm uma lista de pertenças a grupos separada por espaços. Somente usuários pertencentes a pelo menos um dos grupos correspondentes podem acessar essas rotas após a autenticação.

# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}

# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/admin_only admin, /regular_user admin user

Âmbitos

Escopos indicam ao Microsoft Entra ID o nível de acesso que a aplicação está a pedir.

Com base nos escopos solicitados, o Microsoft Entra ID apresenta uma caixa de diálogo de consentimento ao usuário ao entrar. Se o utilizador der o seu consentimento a um ou mais âmbitos e obtiver um token, os âmbitos aos quais foi dado consentimento ficam codificados no .

Para os escopos solicitados pela aplicação, consulte authentication.properties. Por predefinição, a aplicação define o valor de scopes como . Esse escopo específico da API do Microsoft Graph é necessário caso o aplicativo precise chamar o Graph para obter as associações de grupo do usuário.

Mais informações

  • Biblioteca de Autenticação da Microsoft (MSAL) para Java
  • Plataforma de identidade da Microsoft (Microsoft Entra ID para desenvolvedores)
  • Início Rápido: Registar uma aplicação na plataforma de identidade da Microsoft
  • Compreender as experiências de consentimento da aplicação no Microsoft Entra ID
  • Compreender o consentimento do utilizador e do administrador
  • Exemplos de código MSAL

Próximo passo

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