Proteger aplicativos WebLogic usando grupos e declarações de grupo

Este artigo mostra como criar um aplicativo WebLogic que conecta usuários com a MSAL (Biblioteca de Autenticação da Microsoft) para Java. O aplicativo também restringe o acesso a páginas com base na associação ao grupo de segurança do Microsoft Entra ID.

O diagrama a seguir mostra a topologia do aplicativo:

Diagrama que mostra a topologia do aplicativo.

O aplicativo cliente usa o MSAL para Java (MSAL4J) para conectar os usuários a um locatário 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 assistir a um vídeo que aborda esse cenário, consulte Implementar autorização nos seus aplicativos usando funções de aplicativo, grupos de segurança, escopos e funções de diretório.

Pré-requisitos

Recomendações

  • Alguma familiaridade com o Java/Jakarta Servlets.
  • Alguma familiaridade com o terminal Linux/OSX.
  • jwt.ms para inspecionar seus tokens.
  • Fiddler para monitorar sua atividade de rede e solução de problemas.
  • Siga o Blog do Microsoft Entra para ficar up-to-date com os desenvolvimentos mais recentes.

Configurar o exemplo

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

Clone ou baixe o repositório de exemplo.

Para clonar o exemplo, abra uma janela do 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

Como alternativa, navegue até o repositório ms-identity-msal-java-samples, baixe-o como um arquivo .zip e extraia-o para o 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 próximo à raiz do 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 locatário do Microsoft Entra ID no qual você deseja criar seus aplicativos

Siga as etapas a seguir para escolher o locatário:

  1. Entre no portal do Azure.

  2. Se sua conta estiver presente em mais de um locatário do Microsoft Entra ID, selecione seu perfil no canto do portal do Azure e selecione Mudar diretório para alterar sua sessão para o locatário desejado do Microsoft Entra ID.

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

Primeiro, registre um novo aplicativo no portal do Azure seguindo as instruções no Início Rápido: Registar um aplicativo com a plataforma de identidade da Microsoft.

Em seguida, siga as etapas a seguir para concluir o registro:

  1. Navegue até a página de registros de aplicativo da plataforma de identidade da Microsoft para desenvolvedores.

  2. Selecione Novo registro.

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

    • Na secção Nome, insira um nome de aplicativo relevante para exibição aos usuários do aplicativo: por exemplo, java-servlet-webapp-groups.
    • Em Tipos de contas com suporte, selecione Contas somente neste diretório organizacional.
    • Na seção URI de redirecionamento, selecione Web na caixa de combinação e insira o seguinte URI de redirecionamento: http://localhost:8080/msal4j-servlet-groups/auth/redirect
  4. Selecione Registrar para criar o aplicativo.

  5. Na página de registro do aplicativo, localize e copie o valor do ID do aplicativo (cliente) para uso posterior. Use esse valor no(s) arquivo(s) de configuração do aplicativo.

  6. Selecione Salvar para salvar as alterações.

  7. Na página de registro do aplicativo, selecione Certificados & segredos no painel de navegação para abrir a página na qual você pode gerar segredos e carregar certificados.

  8. Na seção Segredos do Cliente, escolha Novo Segredo do Cliente.

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

  10. Selecione uma data de expiração para o segredo ou especifique um tempo de vida personalizado. Os segredos do cliente são limitados a um tempo de vida máximo de 24 meses e Microsoft recomenda uma expiração inferior a 12 meses. Para aplicativos de produção, prefira uma credencial de identidade federada ou certificado em vez de um segredo do cliente.

  11. Selecione Adicionar. O valor gerado é exibido.

  12. Copie e salve o valor gerado para uso nas etapas posteriores. Esse valor é necessário para os arquivos de configuração do código. Esse valor não é exibido novamente e você não pode recuperá-lo por outros meios. Portanto, salve-o no 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 para adicionar acesso às APIs de que o aplicativo precisa.

  14. Selecione Adicionar permissão.

  15. Verifique se a guia APIs da Microsoft está selecionada.

  16. Na seção APIs da Microsoft frequentemente utilizadas, 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. GroupMember.Read.All requer consentimento do administrador, portanto, selecione Conceder/revogar consentimento do administrador para {locatário} e selecione Sim quando for perguntado se você deseja conceder consentimento para as permissões solicitadas para todas as contas no locatário. Você precisa ser um administrador de locatário do Microsoft Entra ID para executar essa ação.


Configure o aplicativo (java-servlet-webapp-groups) para usar seu registro de aplicativo

Use as seguintes etapas para configurar o aplicativo:

Observação

Nas etapas a seguir, ClientID é o mesmo que Application ID ou AppId.

  1. Abrir o projeto no seu IDE.

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

  3. Encontre a cadeia de caracteres {enter-your-tenant-id-here}. Substitua o valor existente pela ID de locatário do Microsoft Entra se você registrou seu aplicativo com a opção Contas somente neste diretório organizacional.

  4. Localize a cadeia de caracteres {enter-your-client-id-here} e substitua o valor existente pelo ID do aplicativo ou clientId do aplicativo java-servlet-webapp-groups copiado do portal do Azure.

  5. Localize a cadeia de caracteres {enter-your-client-secret-here} e substitua o valor existente pelo valor que você salvou durante a criação do aplicativo java-servlet-webapp-groups, 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 declaração de grupos:

Observação

Para obter o samAccountName ou o On Premises Group Security Identifier do grupo on-premises, em vez do ID do grupo, consulte a seção Pré-requisitos para usar atributos de grupo sincronizados do Active Directory em Configurar declarações de grupo para aplicativos usando o Microsoft Entra ID.

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

Siga as etapas a seguir para configurar o aplicativo:

  1. Na página de registro do aplicativo, selecione Configuração de Token no painel de navegação para abrir a página em que você pode configurar os tokens fornecidos por declarações emitidos para o seu aplicativo.

  2. Selecione Adicionar declaração de grupos para abrir a tela 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 nega o efeito da opção Grupos de segurança.

  4. Na seção ID, selecione ID do Grupo. Essa seleção faz com que o Microsoft Entra ID envie a ID de objeto dos grupos aos quais o usuário está atribuído na declaração de grupos do token de ID que seu aplicativo recebe depois de conectar um usuário.

Configurar o 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

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

  • Seu aplicativo está interessado em um conjunto selecionado de grupos aos quais um usuário conectado pode ser atribuído.
  • Seu aplicativo não está interessado em todos os grupos de segurança aos quais esse usuário está atribuído no locatário.

Essa opção ajuda o aplicativo a evitar o problema excedente.

Observação

Esse recurso 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 ao usar essa opção.

Para habilitar essa opção em seu aplicativo, siga as etapas a seguir:

  1. Na página de registro do aplicativo, selecione Configuração de Token no painel de navegação para abrir a página em que você pode configurar os tokens fornecidos por declarações emitidos para o seu aplicativo.

  2. Selecione Adicionar declaração de grupos para abrir a tela 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 o aplicativo recebe ao optar por usar essa opção.

  4. Na seção ID, selecione ID do Grupo. Essa seleção faz com que o Microsoft Entra ID envie a ID do objeto dos grupos aos quais o usuário foi atribuído na declaração "groups" do token de identificação.

  5. Se você estiver expondo uma API Web usando a opção Expor uma API, também poderá escolher a opção ID de Grupo na seção Acesso. Essa opção faz com que o Microsoft Entra ID envie o ID do objeto dos grupos aos quais o usuário foi atribuído na declaração "groups" 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 aplicativo em Aplicativo gerenciado no diretório local. Este título de campo pode ser truncado, por exemplo Managed application in .... Ao selecionar esse link, você navega até a página Visão geral do aplicativo empresarial associada à entidade de serviço do aplicativo no locatário em que você o 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 na qual você pode atribuir usuários e grupos ao seu aplicativo.

  9. Selecione Adicionar usuário.

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

  11. Escolher os grupos que 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 em grupo.

    Seu aplicativo agora recebe esses grupos selecionados na declaração de grupos quando um usuário que se conecta ao 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 do aplicativo. Defina a marcação Atribuição de usuário necessária? como Sim.

Importante

Quando você define Atribuição de usuário necessária? como Sim, o Microsoft Entra ID verifica se somente os usuários atribuídos ao seu aplicativo no painel Usuários e grupos podem entrar no seu aplicativo. É possível atribuir usuários diretamente ou por meio da atribuição de 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 de Token, se você escolher qualquer opção diferente de groupID como DNSDomain\sAMAccountName você deverá inserir o nome do grupo nas seguintes etapas, por exemplo, contoso.com\Test Group em vez da ID de objeto:

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

  2. Localize a cadeia de caracteres {enter-your-admins-group-id-here} e substitua o valor existente pela ID de objeto do GroupAdmin grupo, que você copiou do portal do Azure. Remova também as chaves {} do valor do placeholder.

  3. Localize a cadeia de caracteres {enter-your-users-group-id-here} e substitua o valor existente pela ID de objeto do GroupMember grupo, que você copiou do portal do Azure. Remova também as chaves {} do valor do placeholder.

Compilar o exemplo

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

mvn clean package

Esse comando gera um arquivo .war que pode ser executado em vários servidores de aplicativos.

Implante o exemplo

Estas instruções pressupõem que você instalou o WebLogic e configurou algum domínio de servidor.

Antes de implantar no WebLogic, use as etapas a seguir para alterar algumas configurações no próprio exemplo e, depois, compilar ou recompilar o pacote:

  1. No exemplo, localize o arquivo application.properties ou authentication.properties no qual você configurou a ID do cliente, o locatário, a URL de redirecionamento e assim por diante.

  2. Neste arquivo, altere as referências para localhost:8080 ou localhost:8443 para a URL e a porta em que o WebLogic é executado, que por padrão deve ser localhost:7001.

  3. Você também precisa fazer a mesma alteração no registro do aplicativo do Azure, em que você a define no portal do Azure como o valor do URI de redirecionamento na guia Autenticação.

Use as etapas a seguir para implantar o exemplo no WebLogic por meio do console da Web:

  1. Inicie o servidor WebLogic com DOMAIN_NAME\bin\startWebLogic.cmd.

  2. Navegue até o console web do WebLogic em seu navegador, em http://localhost:7001/console.

  3. Acesse Estrutura do domínio>Implantações, selecione Instalar, selecione Enviar seus arquivos e, então, localize o arquivo .war que você gerou com o Maven.

  4. Selecione Instalar esta implantação como um aplicativo, selecione Avançar, selecione Concluir e selecione Salvar.

  5. A maioria das configurações padrão deve estar correta, exceto que você deve nomear o aplicativo para corresponder ao URI de redirecionamento definido na configuração de exemplo ou no registro do aplicativo do Azure. Ou seja, se o URI de redirecionamento for http://localhost:7001/msal4j-servlet-auth, você deverá nomear o aplicativo msal4j-servlet-auth.

  6. Volte para Estrutura de Domínio>Implantações e inicie seu aplicativo.

  7. Depois que o aplicativo for iniciado, navegue até http://localhost:7001/<application-name>/, e você poderá acessá-lo.

Explore o exemplo

Use as seguintes etapas para explorar o exemplo:

  1. Observe o status de conectado ou desconectado exibido no centro da tela.
  2. Selecione o botão sensível ao contexto no canto. Esse botão lê Entrar quando você executa o aplicativo pela primeira vez.
  3. Na próxima página, siga as instruções e entre com uma conta do tenant do Microsoft Entra ID.
  4. Na tela de consentimento, observe os escopos que estão sendo solicitados.
  5. Observe que o botão contextual agora diz Sair e exibe seu nome de usuário.
  6. Selecione Detalhes do Token de ID para ver algumas das declarações decodificadas do token de ID.
  7. Selecione Grupos para ver todas as informações sobre a associação ao grupo de segurança do usuário conectado.
  8. Selecione Somente Administrador ou Usuário Regular para acessar os endpoints protegidos pelo claim de grupos.
    • Se o usuário conectado estiver no grupo GroupAdmin, ele poderá inserir as duas páginas.
    • Se o usuário conectado estiver no grupo GroupMember, ele poderá entrar somente na página Usuário Regular .
    • 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 sair, selecione Detalhes do token de ID para observar que a aplicação exibe um erro 401: unauthorized em vez das declarações de token de ID quando o usuário não está autorizado.

Observações sobre o código

Este exemplo usa a MSAL para Java (MSAL4J) para conectar um usuário e obter um token de ID que pode conter a declaração grupos. Se houver muitos grupos para emissão no token de ID, o exemplo usará o SDK do Microsoft Graph para Java para obter os dados de associação de grupo do Microsoft Graph. Com base nos grupos aos quais o usuário pertence, o usuário conectado pode acessar nenhuma, uma ou ambas as páginas protegidas Admins Only e Regular Users.

Se quiser replicar o comportamento desse exemplo, você deverá adicionar o MSAL4J e o Microsoft Graph SDK aos projetos usando o Maven. Você pode copiar o arquivo pom.xml e o conteúdo das pastas helpers e authservlets na pasta src/main/java/com/microsoft/azuresamples/msal4j . Você também precisa do arquivo authentication.properties. Essas classes e arquivos contêm código genérico que pode ser usado em uma grande variedade de aplicativos. Você também pode copiar o restante do exemplo, mas as outras classes e arquivos foram criados especificamente para atender ao objetivo deste exemplo.

Conteúdos

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

Arquivo/pasta Descrição
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Esse diretório contém as classes que definem a lógica comercial de back-end do aplicativo.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Este diretório contém as classes usadas nos endpoints de login e logout.
*Servlet.java Todos os pontos de extremidade disponíveis são definidos em classes Java com nomes que terminam em Servlet.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Classes auxiliares para autenticação.
AuthenticationFilter.java Redireciona solicitações não autenticadas feitas a endpoints protegidos para uma página 401.
src/main/resources/authentication.properties Configuração do Microsoft Entra ID e do programa.
src/main/webapp/ Este diretório contém a interface do usuário - modelos JSP
CHANGELOG.md Lista de alterações no exemplo.
CONTRIBUTING.md Diretrizes para contribuir com o exemplo.
LICENÇA A licença do exemplo.

Processar uma declaração de grupos em tokens, incluindo o tratamento de excedentes

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

Os grupos afirmam

A ID de objeto dos grupos de segurança dos quais o usuário conectado é membro retorna na declaração de grupos do token, como mostra o exemplo a seguir:

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

A declaração de excesso de 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 excedente é 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á os IDs de grupo na declaração de grupos no token. Em vez disso, ele inclui uma declaração de excedente no token que indica ao aplicativo para consultar a API do Microsoft Graph para recuperar a associação do usuário ao grupo, conforme mostra o exemplo a seguir:

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

Criar o cenário de excedente neste exemplo para teste

Você pode usar as etapas a seguir para criar o cenário de excedente:

  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 excedente durante o desenvolvimento. Lembre-se de alterar o objectId do usuário fornecido no script BulkCreateGroups.ps1.

  2. Ao executar esse exemplo e ocorrer um excedente, você verá a mensagem _claim_names na página inicial depois que o usuário se conectar.

  3. Recomendamos veementemente o uso do recurso de filtragem de grupos, se possível, para evitar o excedente de grupos. Para obter mais informações, consulte a seção Configurar o aplicativo para receber os valores de reivindicação de grupos de um conjunto filtrado de grupos aos quais um usuário pode ser atribuído.

  4. Caso não consiga evitar o excedente de grupos, sugerimos usar as etapas a seguir para processar a solicitação de grupos no token:

    1. Verifique a declaração _claim_names com um dos valores sendo grupos. Esta declaração indica excedente.
    2. Se encontrado, faça uma chamada para o ponto de extremidade especificado em _claim_sources para buscar os grupos de usuários.
    3. Se nenhum for encontrado, verifique a declaração groups para os grupos aos quais o usuário pertence.

Observação

O tratamento do excedente requer uma chamada para o Microsoft Graph para ler as associações de grupo do usuário conectado, portanto, seu aplicativo precisa ter a permissão GroupMember.Read.All para que a função getMemberObjects seja executada com sucesso.

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

Uma ConfidentialClientApplication instância é criada no arquivo AuthHelper.java , conforme mostrado no exemplo a seguir. Esse objeto ajuda a criar a URL de autorização do Microsoft Entra e também 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 a instanciação:

  • A ID do cliente do aplicativo.
  • O segredo do cliente, que é um requisito para aplicativos cliente confidenciais.
  • A Autoridade do Microsoft Entra ID, que inclui o 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. A primeira etapa do processo de entrada é enviar uma solicitação para o ponto de extremidade /authorize para o locatário do Microsoft Entra ID. A instância da MSAL4J ConfidentialClientApplication é utilizada para construir uma URL de solicitação de autorização. O aplicativo redireciona o navegador para essa URL, que é onde o usuário se conecta.

    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:

    • AuthorizationRequestUrlParameters: parâmetros que devem ser definidos para criar uma AuthorizationRequestUrl.
    • REDIRECT_URI: onde o Microsoft Entra redireciona o navegador, juntamente com o código de autenticação, após coletar as credenciais do usuário. Ele deve corresponder ao URI de redirecionamento no registo do aplicativo Microsoft Entra ID no portal do Azure.
    • SCOPES: Escopos são permissões solicitadas pelo aplicativo.
      • Normalmente, os três escopos openid profile offline_access são suficientes para receber uma resposta com um token de ID.
      • A lista completa de escopos solicitados pelo aplicativo pode ser encontrada no arquivo authentication.properties. Você pode adicionar mais escopos, como User.Read.
  2. O usuário recebe um prompt de entrada do Microsoft Entra ID. Se a tentativa de login for bem-sucedida, o navegador do usuário será redirecionado para o endpoint de redirecionamento do aplicativo. Uma solicitação válida ao ponto de extremidade conterá um código de autorização.

  3. Em seguida, a ConfidentialClientApplication instância troca esse código de autorização por um token de ID e um token de acesso 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:

    • AuthorizationCodeParameters: parâmetros que devem ser definidos para trocar o código de autorização por uma ID e/ou token de acesso.
    • authCode: O código de autorização recebido no endpoint de redirecionamento.
    • REDIRECT_URI: o URI de redirecionamento usado na etapa anterior deve ser passado novamente.
    • SCOPES: os escopos usados na etapa anterior devem ser passados novamente.
  4. Se acquireToken tiver êxito, as claims do token são extraídas. Se a verificação do nonce for bem-sucedida, os resultados são colocados em context - uma instância de IdentityContextData - e salvos na sessão. O aplicativo pode então instanciar o IdentityContextData a partir da sessão por meio de uma instância de IdentityContextAdapterServlet sempre que precisar acessá-lo, como mostrado no código a seguir:

    // 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 a etapa anterior, você pode extrair associações de grupo chamando context.getGroups() usando uma instância de IdentityContextData.

  6. Se o usuário for membro de muitos grupos, mais de 200, uma chamada para context.getGroups() poderá estar vazia se não for pela chamada para handleGroupsOverage(). Enquanto isso, context.getGroupsOverage() retorna true, sinalizando que ocorreu um excedente e que obter a lista completa de grupos requer uma chamada para o Microsoft Graph. Consulte o método handleGroupsOverage() em AuthHelper.java para ver como este aplicativo usa context.setGroups() quando há excesso.

Proteger as rotas

Consulte AuthenticationFilter.java para ver como o aplicativo de exemplo filtra o acesso a rotas. No arquivo authentication.properties, a app.protect.authenticated propriedade contém as rotas separadas por vírgulas que somente usuários autenticados podem acessar, conforme mostrado no exemplo a seguir:

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

As rotas listadas nos conjuntos de regras separados por vírgula em app.protect.groups também são inacessíveis para usuários não autenticados, conforme mostrado no exemplo a seguir. No entanto, essas rotas também contêm uma lista de pertencimento 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

Escopos

Escopos informam ao Microsoft Entra ID qual é o nível de acesso que o aplicativo está solicitando.

Com base nos escopos solicitados, o Microsoft Entra ID apresenta uma caixa de diálogo de consentimento para o usuário no momento da entrada. Se o usuário consentir com um ou mais escopos e obtiver um token, os escopos aos quais foi dado consentimento serão codificados no access_token resultante.

Para os escopos solicitados pelo aplicativo, consulte authentication.properties. Por padrão, o aplicativo define o valor de escopos como GroupMember.Read.All. 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

Próxima etapa

Implantar aplicativos Java WebLogic no WebLogic em máquinas virtuais do Azure