Proteja aplicativos Java WebLogic usando grupos e declarações de grupo
Este artigo mostra como criar um aplicativo Java WebLogic que entra em usuários com a Microsoft Authentication Library (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:
O aplicativo cliente usa o MSAL para Java (MSAL4J) para entrar usuários em 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 em seus aplicativos usando funções de aplicativo, grupos de segurança, escopos e funções de diretório.
Pré-requisitos
- JDK versão 8 ou superior
- Maven 3
- Um locatário do Microsoft Entra ID. Para obter mais informações, consulte Como obter um locatário do Microsoft Entra ID.
- Uma conta de usuário em seu próprio locatário do Microsoft Entra ID.
- Dois grupos
GroupAdmin
de segurança eGroupMember
, contendo usuários com os quais você deseja testar.
Recomendações
- Alguma familiaridade com os servlets Java / Jacarta.
- Alguma familiaridade com o terminal Linux/OSX.
- jwt.ms para inspecionar seus tokens.
- Fiddler para monitorizar a sua atividade de rede e resolução de problemas.
- Siga o Blog do Microsoft Entra ID para ficar atualizado com os ú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
Como alternativa, navegue até o repositório ms-identity-msal-java-samples , faça o download 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 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 locatário do Microsoft Entra ID onde você deseja criar seus aplicativos
Para escolher seu locatário, use as seguintes etapas:
Inicie sessão no portal do Azure.
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 Alternar 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 em Guia de início rápido: registrar um aplicativo com a plataforma de identidade da Microsoft.
Em seguida, use as seguintes etapas para concluir o registro:
Navegue até a página Registros de aplicativos da plataforma de identidade da Microsoft para desenvolvedores.
Selecione Novo registo.
Na página Registrar um aplicativo exibida, insira as seguintes informações de registro do aplicativo:
- Na seção Nome, insira um nome de aplicativo significativo para exibição aos usuários do aplicativo - por exemplo,
java-servlet-webapp-groups
. - Em Tipos de conta suportados, selecione Contas somente neste diretório organizacional.
- Na seção URI de redirecionamento, selecione Web na caixa de combinação e digite o seguinte URI de redirecionamento:
http://localhost:8080/msal4j-servlet-groups/auth/redirect
.
- Na seção Nome, insira um nome de aplicativo significativo para exibição aos usuários do aplicativo - por exemplo,
Selecione Registar para criar a aplicação.
Na página de registro do aplicativo, localize e copie o valor da ID do aplicativo (cliente) para usar mais tarde. Você usa esse valor no(s) arquivo(s) de configuração do seu aplicativo.
Selecione Guardar para guardar as alterações.
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.
Na seção Segredos do cliente, selecione Novo segredo do cliente.
Digite uma descrição - por exemplo, segredo do aplicativo.
Selecione uma das durações disponíveis: Em 1 ano, Em 2 anos ou Nunca expira.
Selecione Adicionar. O valor gerado é exibido.
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.
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.
Selecione Adicionar uma permissão.
Verifique se a guia APIs da Microsoft está selecionada.
Na seção APIs da Microsoft comumente usadas, selecione Microsoft Graph.
Na seção Permissões delegadas, selecione User.Read e GroupMember.Read.All na lista. Use a caixa de pesquisa, se necessário.
Selecione Adicionar permissões.
GroupMember.Read.All
requer o consentimento do administrador, portanto, selecione Conceder/revogar o consentimento do administrador para {locatário} e, em seguida, selecione Sim quando for perguntado se 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 o registro do aplicativo
Use as seguintes etapas para configurar o aplicativo:
Nota
Nas etapas a seguir, ClientID
é o mesmo que Application ID
ou AppId
.
Abra o projeto no seu IDE.
Abra o arquivo ./src/main/resources/authentication.properties .
Localize a cadeia de caracteres
{enter-your-tenant-id-here}
. Substitua o valor existente pela sua ID de locatário do Microsoft Entra se você registrou seu aplicativo com a opção Somente Contas neste diretório organizacional.Localize a cadeia de caracteres
{enter-your-client-id-here}
e substitua o valor existente pela ID do aplicativo ouclientId
dojava-servlet-webapp-groups
aplicativo copiado do portal do Azure.Localize a cadeia de caracteres
{enter-your-client-secret-here}
e substitua o valor existente pelo valor que você salvou durante ajava-servlet-webapp-groups
criação do aplicativo, 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 seção Configurar seu aplicativo para receber todos os grupos aos quais o usuário conectado está atribuído, 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 seção Configurar 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 não está disponível na edição gratuita do Microsoft Entra ID.
Nota
Para obter a ID do samAccountName
grupo local ou On Premises Group Security Identifier
em vez da ID do grupo, consulte a seção Pré-requisitos para usar atributos de grupo sincronizados do Ative Directory em Configurar declarações de grupo para aplicativos usando a ID do Microsoft Entra.
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:
Na página de registro do aplicativo, selecione Configuração de Token no painel de navegação para abrir a página onde você pode configurar os tokens fornecidos pelas declarações emitidos para seu aplicativo.
Selecione Adicionar declaração de grupos para abrir a tela Editar declaração de grupos.
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 Security Groups .
Na seção ID, selecione ID do grupo. Essa seleção faz com que a ID do Microsoft Entra envie a ID do 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 entrar em um usuário.
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:
- Seu aplicativo está interessado em um conjunto selecionado de grupos aos quais um usuário de entrada 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 seu aplicativo a evitar o problema de excesso de idade .
Nota
Este recurso não está disponível na edição gratuita do Microsoft Entra ID.
As atribuições de grupo aninhadas não estão disponíveis quando você usa essa opção.
Para habilitar essa opção em seu aplicativo, use as seguintes etapas:
Na página de registro do aplicativo, selecione Configuração de Token no painel de navegação para abrir a página onde você pode configurar os tokens fornecidos pelas declarações emitidos para seu aplicativo.
Selecione Adicionar declaração de grupos para abrir a tela Editar declaração de grupos.
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.
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 está atribuído na declaração de grupos do token de ID.
Se você estiver expondo uma API da Web usando a opção Expor uma API, também poderá escolher a opção ID do Grupo na seção Acesso. Essa opção faz com que o Microsoft Entra ID envie a ID do objeto dos grupos aos quais o usuário está atribuído na declaração de grupos do token de acesso.
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.
Selecione o hiperlink com o nome do seu 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 seu aplicativo no locatário onde o criou. Você pode navegar de volta para a página de registro do aplicativo usando o botão Voltar do seu navegador.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.
Selecione Adicionar utilizador.
Selecione Usuário e Grupos na tela resultante.
Escolha os grupos que você deseja atribuir a este aplicativo.
Selecione Selecionar para concluir a seleção dos grupos.
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.
Selecione Propriedades no painel de navegação para abrir a página que lista as propriedades básicas do seu aplicativo. Defina o sinalizador Atribuição de usuário 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 de Token, se você escolher qualquer opção diferente de groupID - como DNSDomain\sAMAccountName - insira o nome do grupo nas seguintes etapas - por exemplo, contoso.com\Test Group
- em vez da ID do objeto:
Abra o arquivo ./src/main/resources/authentication.properties .
Localize a cadeia de caracteres
{enter-your-admins-group-id-here}
e substitua o valor existente pela ID do objeto doGroupAdmin
grupo, que você copiou do portal do Azure. Remova também as chaves do valor do espaço reservado.Localize a cadeia de caracteres
{enter-your-users-group-id-here}
e substitua o valor existente pela ID do objeto doGroupMember
grupo, que você copiou do portal do Azure. Remova também as chaves do valor do espaço reservado.
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.
Implantar 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 seguintes etapas para fazer algumas alterações de configuração no próprio exemplo e, em seguida, compilar ou reconstruir o pacote:
No exemplo, localize o arquivo application.properties ou authentication.properties onde você configurou a ID do cliente, o locatário, a URL de redirecionamento e assim por diante.
Neste arquivo, altere as referências para
localhost:8080
oulocalhost:8443
para a URL e a porta em que o WebLogic é executado, que por padrão deve serlocalhost:7001
.Você também precisa fazer a mesma alteração no registro do aplicativo do Azure, onde você o define no portal do Azure como o valor de URI de redirecionamento na guia Autenticação.
Use as seguintes etapas para implantar o exemplo no WebLogic por meio do console da Web:
Inicie o servidor WebLogic com DOMAIN_NAME\bin\startWebLogic.cmd.
Navegue até o console da Web WebLogic em seu navegador em
http://localhost:7001/console
.Vá para Implantações de Estrutura de Domínio>, selecione Instalar, selecione Carregar seus arquivos e localize o arquivo .war que você criou usando o Maven.
Selecione Instalar esta implantação como um aplicativo, selecione Avançar, selecione Concluir e, em seguida, selecione Salvar.
A maioria das configurações padrão deve ser boa, 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
, então você deve nomear o aplicativomsal4j-servlet-auth
.Volte para Implantações de Estrutura de Domínio>e inicie seu aplicativo.
Depois que o aplicativo for iniciado, navegue até
http://localhost:7001/<application-name>/
, e você deverá ser capaz de acessar o aplicativo.
Explorar o exemplo
Use as seguintes etapas para explorar o exemplo:
- Observe o status de entrada ou saída exibido no centro da tela.
- Selecione o botão sensível ao contexto no canto. Este botão lê Iniciar sessão quando executa a aplicação pela primeira vez.
- Na página seguinte, siga as instruções e entre com uma conta no locatário do Microsoft Entra ID.
- Na tela de consentimento, observe os escopos que estão sendo solicitados.
- Observe que o botão sensível ao contexto agora diz Sair e exibe seu nome de usuário.
- Selecione Detalhes do token de ID para ver algumas das declarações decodificadas do token de ID.
- Selecione Grupos para ver todas as informações sobre a associação ao grupo de segurança para o usuário conectado.
- Selecione Somente administrador ou Usuário regular para acessar os grupos que reivindicam pontos de extremidade protegidos.
- Se o usuário conectado estiver no grupo, o usuário poderá inserir ambas as
GroupAdmin
páginas. - Se o
GroupMember
utilizador com sessão iniciada estiver no grupo, o utilizador pode introduzir apenas a 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.
- Se o usuário conectado estiver no grupo, o usuário poderá inserir ambas as
- Use o botão no canto para sair.
- Depois de sair, selecione Detalhes do token de ID para observar que o aplicativo exibe um
401: unauthorized
erro em vez das declarações de token de ID quando o usuário não está autorizado.
Sobre o código
Este exemplo usa o MSAL for Java (MSAL4J) para entrar um usuário e obter um token de ID que pode conter a declaração de grupos. Se houver muitos grupos para emissão no token de ID, o exemplo usa 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 Admins Only
, uma ou ambas as páginas protegidas e Regular Users
.
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 arquivo pom.xml e o conteúdo das pastas auxiliares 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 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 | Description |
---|---|
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 pontos de extremidade disponíveis são definidos em .java classes que terminam em ____Servlet.java. |
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ | Classes auxiliares para autenticação. |
AuthenticationFilter.java | Redireciona solicitações não autenticadas para pontos de extremidade protegidos para uma página 401. |
src/main/resources/authentication.properties | Microsoft Entra ID e configuração do programa. |
src/principal/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 reivindicação de grupos em tokens, incluindo o tratamento de excesso de idade
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",]
...
}
Os grupos de excesso de idade reivindicam
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, ele inclui uma declaração de excesso no token que indica ao aplicativo para consultar a API do Microsoft Graph para recuperar a associação de grupo do usuário, conforme mostrado no exemplo a seguir:
{
...
"_claim_names": {
"groups": "src1"
},
{
"_claim_sources": {
"src1": {
"endpoint":"[Graph Url to get this user's group membership from]"
}
}
...
}
Crie o cenário de excesso de idade neste exemplo para teste
Para criar o cenário de excesso de idade, você pode usar as seguintes etapas:
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
objectId
alterar o fornecido pelo usuário no script BulkCreateGroups.ps1 .Quando você executa este exemplo e ocorre uma exceção, você vê o
_claim_names
na página inicial depois que o usuário entra.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 seção Configurar 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.
Caso você não possa evitar o excesso de grupo, sugerimos que você use as seguintes etapas para processar a reivindicação de grupos em seu token:
- Verifique a reivindicação
_claim_names
com um dos valores sendo grupos. Esta alegação indica excesso de idade. - Se encontrado, faça uma chamada para o ponto de extremidade especificado em
_claim_sources
para buscar grupos de usuários. - Se nenhum for encontrado, examine a declaração de grupos para grupos de usuários.
- Verifique a reivindicação
Nota
Lidar com excesso 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 ê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
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 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 Aplicativos Clientes 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 .
Passo a passo
As etapas a seguir fornecem um passo a passo da funcionalidade do aplicativo:
A primeira etapa do processo de entrada é enviar uma solicitação para o ponto de extremidade para seu
/authorize
locatário do Microsoft Entra ID. A instância MSAL4JConfidentialClientApplication
é usada para construir uma URL de solicitação 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:
AuthorizationRequestUrlParameters
: Parâmetros que devem ser definidos para criar um AuthorizationRequestUrl.REDIRECT_URI
: Onde o Microsoft Entra redireciona o navegador - juntamente com o código de autenticação - depois de coletar as credenciais do usuário. Ele deve corresponder ao URI de redirecionamento no registro do aplicativo Microsoft Entra ID no portal do Azure.SCOPES
: Escopos são permissões solicitadas pelo aplicativo.- Normalmente, os três escopos são suficientes para receber uma resposta de token de
openid profile offline_access
ID. - A lista completa de escopos solicitados pelo aplicativo pode ser encontrada no arquivo authentication.properties . Você pode adicionar mais escopos, como
User.Read
.
- Normalmente, os três escopos são suficientes para receber uma resposta de token de
O usuário recebe um prompt de entrada pela ID do Microsoft Entra. Se a tentativa de entrada for bem-sucedida, o navegador do usuário será redirecionado para o ponto de extremidade de redirecionamento do aplicativo. Uma solicitação válida para este ponto de extremidade contém um código de autorização.
Em seguida, a
ConfidentialClientApplication
instância troca esse código de autorização por um token de ID e 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 um ID e/ou token de acesso.authCode
: O código de autorização que foi recebido no ponto de extremidade 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.
Se
acquireToken
for bem-sucedida, as declarações de token serão extraídas. Se a verificação nonce passar, os resultados serão colocados emcontext
- uma instância deIdentityContextData
- e salvos na sessão. O aplicativo pode então instanciar aIdentityContextData
partir da sessão por meio de uma instância de sempre que precisar acessá-laIdentityContextAdapterServlet
, conforme 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);
Após a etapa anterior, você pode extrair associações de grupo chamando
context.getGroups()
usando uma instância deIdentityContextData
.Se o usuário for membro de muitos grupos - mais de 200 - uma chamada para
context.getGroups()
pode estar vazia se não for a chamada parahandleGroupsOverage()
. Enquanto isso,context.getGroupsOverage()
retornatrue
, sinalizando que ocorreu um excesso de idade e que obter a lista completa de grupos requer uma chamada para o Microsoft Graph. Consulte ohandleGroupsOverage()
método em AuthHelper.java para ver como este aplicativo usacontext.setGroups()
quando há uma sobrecarga.
Proteja as rotas
Consulte AuthenticationFilter.java para ver como o aplicativo de exemplo filtra o acesso às 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
Qualquer uma das rotas listadas nos conjuntos de regras separadas por vírgulas sob o app.protect.groups
também está fora dos limites para usuários autenticados não autenticados, conforme mostrado no exemplo a seguir. No entanto, essas rotas também contêm uma lista separada por espaços de associações de grupo. 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
Os escopos informam ao ID do Microsoft Entra 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 ao usuário ao entrar. Se o usuário consentir com um ou mais escopos e obtiver um token, os escopos consentidos serão codificados no .access_token
Para os escopos solicitados pelo aplicativo, consulte authentication.properties. Por padrão, o aplicativo define o valor dos 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
- 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
- Noções básicas sobre experiências de consentimento de aplicativo do Microsoft Entra ID
- Compreender o consentimento do utilizador e do administrador
- Exemplos de código MSAL
Próximo passo
Implantar aplicativos Java WebLogic no WebLogic em Máquinas Virtuais do Azure