Proteja aplicativos Java Spring Boot usando grupos e declarações de grupo
Este artigo demonstra um aplicativo Web Java Spring Boot que usa a biblioteca de cliente Microsoft Entra ID Spring Boot Starter para Java para autenticação, autorização e aquisição de token. O aplicativo usa o protocolo OpenID Connect para entrar em usuários e 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 a biblioteca de cliente Microsoft Entra ID Spring Boot Starter para Java 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 contém a declaração groups. O aplicativo carrega declarações na lista Spring GrantedAuthorities
para o usuário conectado. Esses valores determinam quais páginas o usuário está autorizado a acessar.
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 15. Este exemplo foi desenvolvido em um sistema com Java 15, mas pode ser compatível com outras versões.
- Maven 3
- Java Extension Pack para Visual Studio Code é recomendado para executar este exemplo no Visual Studio Code.
- Um locatário do Microsoft Entra ID. Para obter mais informações, consulte Guia de início rápido: configurar um locatário.
- Uma conta de usuário em seu locatário do Microsoft Entra ID. Este exemplo não funciona com uma conta pessoal da Microsoft. Portanto, se você entrou no portal do Azure com uma conta pessoal e não tem uma conta de usuário em seu diretório, precisa criar uma agora.
- Dois grupos de segurança, denominados
AdminGroup
eUserGroup
, que contêm o usuário ou usuários que você deseja assinar e testar este exemplo. Como alternativa, você pode adicionar o usuário a dois grupos de segurança existentes em seu locatário. Se você optar por usar grupos existentes, certifique-se de modificar a configuração de exemplo para usar o nome e a ID do objeto dos grupos de segurança existentes. - Visual Studio Code
- Ferramentas do Azure para Visual Studio Code
Recomendações
- Alguma familiaridade com o Quadro da primavera.
- 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 4-spring-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-spring-webapp-groups)
Para registrar o aplicativo, use as seguintes etapas:
Navegue até o portal do Azure e selecione Microsoft Entra ID.
Selecione Registos de Aplicações no painel de navegação e, em seguida, selecione Novo registo.
Na página Registrar um aplicativo que aparece, 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-spring-webapp-groups
. - Em Tipos de conta suportados, selecione Contas somente neste diretório organizacional.
- Na seção Redirecionar URI (opcional), selecione Web na caixa de combinação e digite o seguinte URI de redirecionamento:
http://localhost:8080/login/oauth2/code/
.
- 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.
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: 6 meses, 12 meses ou Personalizada.
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 onde você pode 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 GroupMember.Read.All na lista. Use a caixa de pesquisa, se necessário. Essa permissão é necessária para obter associações de grupo via Graph se o cenário de excesso de idade ocorrer.
Selecione o botão para conceder consentimento de administrador para
GroupMember.Read.All
o .Selecione Adicionar permissões.
Criar grupos de segurança
Para criar grupos de segurança, use as seguintes etapas:
Navegue até o portal do Azure e selecione Microsoft Entra ID.
Selecione Grupos no painel de navegação.
No painel Grupos, selecione Novo Grupo e forneça as seguintes informações:
- Em Tipo de Grupo, selecione Segurança.
- Em Nome do Grupo, insira AdminGroup.
- Em Descrição do Grupo, insira Grupo de Segurança do Administrador.
- Adicione Proprietários de Grupo e Membros de Grupo que você deseja usar e testar neste exemplo.
- Selecione Criar.
No painel Grupos, selecione Novo Grupo e forneça as seguintes informações:
- Em Tipo de Grupo, selecione Segurança.
- Em Nome do Grupo, insira UserGroup.
- Em Descrição do Grupo, insira Grupo de Segurança do Usuário.
- Adicione Proprietários de Grupo e Membros de Grupo que você deseja usar e testar neste exemplo.
- Selecione Criar.
Para obter mais informações, consulte Gerenciar grupos e associação a grupos do Microsoft Entra.
Configurar grupos de segurança
Você tem as seguintes opções sobre como configurar ainda mais seu aplicativo 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 o 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 Todos os grupos (inclui listas de distribuição, mas não grupos atribuídos ao aplicativo). A escolha de ambos 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 e não selecione nenhuma outra opção. Se você escolher mais opções, como Grupos de Segurança ou Todos os grupos (inclui listas de distribuição, mas não grupos atribuídos ao aplicativo), essas opções negarão o efeito da opção Grupos atribuídos ao aplicativo .
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.
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 seleção faz com que o 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 acesso emitido para os aplicativos cliente da sua API.
Na página de registro do aplicativo, selecione Visão geral no painel de navegação para abrir a tela 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, Aplicação gerida em .... 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.
Configure seu exemplo de código para usar seu registro de aplicativo e grupos de segurança (java-spring-webapp-groups)
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\application.yml .
Localize o espaço reservado
Enter_Your_Tenant_ID_Here
e substitua o valor existente pelo ID de locatário do Microsoft Entra.Localize o espaço reservado
Enter_Your_Client_ID_Here
e substitua o valor existente pela ID do aplicativo ouclientId
dojava-spring-webapp-groups
aplicativo copiado do portal do Azure.Localize o espaço reservado
Enter_Your_Client_Secret_Here
e substitua o valor existente pelo valor que você salvou durante a criação dojava-spring-webapp-groups
copiado do portal do Azure.Localize o espaço reservado
Enter_Your_Admin_Group_ID_Here
e substituaobjectId
o valor existente pelo valor do seu AdminGroup.Localize o espaço reservado
Enter_Your_User_Group_ID_Here
e substituaobjectId
o valor existente pelo valor do seu UserGroup.Abra o arquivo src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java .
Localize o espaço reservado
Enter_Your_Admin_Group_ID_Here
e substituaobjectId
o valor existente pelo valor do seu AdminGroup.Localize o espaço reservado
Enter_Your_User_Group_ID_Here
e substituaobjectId
o valor existente pelo valor do seu UserGroup.
Executar o exemplo
As seções a seguir mostram como implantar o exemplo em Aplicativos de Contêiner do Azure.
Pré-requisitos
- Uma conta do Azure. Se não tiver uma subscrição, crie uma conta gratuita. Você precisa da permissão de Colaborador ou Proprietário na assinatura do Azure para continuar. Para obter mais informações, consulte Atribuir funções do Azure utilizando o portal do Azure.
- CLI do Azure.
- A extensão da CLI dos Aplicativos de Contêiner do Azure, versão
0.3.47
ou superior. Para instalar a versão mais recente, use oaz extension add --name containerapp --upgrade --allow-preview
comando. - O Java Development Kit, versão 17 ou superior.
- Maven.
Preparar o projeto primavera
Use as seguintes etapas para preparar o projeto:
Use o seguinte comando Maven para criar o projeto:
mvn clean verify
Execute o projeto de exemplo localmente usando o seguinte comando:
mvn spring-boot:run
Configurar
Para entrar no Azure a partir da CLI, execute o seguinte comando e siga os prompts para concluir o processo de autenticação.
az login
Para garantir que você esteja executando a versão mais recente da CLI, execute o comando upgrade.
az upgrade
Em seguida, instale ou atualize a extensão Aplicativos de Contêiner do Azure para a CLI.
Se você receber erros sobre parâmetros ausentes ao executar az containerapp
comandos na CLI do Azure, certifique-se de ter a versão mais recente da extensão Aplicativos de Contêiner do Azure instalada.
az extension add --name containerapp --upgrade
Nota
A partir de maio de 2024, as extensões da CLI do Azure não habilitam mais recursos de visualização por padrão. Para acessar os recursos de visualização do Container Apps, instale a extensão Container Apps com --allow-preview true
o .
az extension add --name containerapp --upgrade --allow-preview true
Agora que a extensão ou módulo atual está instalado, registre os Microsoft.App
namespaces e Microsoft.OperationalInsights
.
Nota
Os recursos dos Aplicativos de Contêiner do Azure migraram do Microsoft.Web
namespace para o Microsoft.App
namespace. Consulte Migração de namespace de Microsoft.Web para Microsoft.App em março de 2022 para obter mais detalhes.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Criar o ambiente de Aplicativos de Contêiner do Azure
Agora que a configuração da CLI do Azure está concluída, você pode definir as variáveis de ambiente usadas ao longo deste artigo.
Defina as seguintes variáveis em seu shell bash.
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
Crie um grupo de recursos.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
Crie um ambiente com um espaço de trabalho do Log Analytics gerado automaticamente.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Mostrar o domínio padrão do ambiente do aplicativo de contêiner. Anote este domínio para usar em seções posteriores.
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
Preparar o aplicativo para implantação
Quando você implanta seu aplicativo nos Aplicativos de Contêiner do Azure, sua URL de redirecionamento muda para a URL de redirecionamento da instância do aplicativo implantado nos Aplicativos de Contêiner do Azure. Use as seguintes etapas para alterar essas configurações no arquivo application.yml :
Navegue até o arquivo src\main\resources\application.yml do seu aplicativo e altere o valor de para o nome de domínio do
post-logout-redirect-uri
aplicativo implantado, conforme mostrado no exemplo a seguir. Certifique-se de substituir<API_NAME>
e<default-domain-of-container-app-environment>
com seus valores reais. Por exemplo, com o domínio padrão para seu ambiente de Aplicativo de Contêiner do Azure da etapa anterior ems-identity-api
para o nome do seu aplicativo, você usariahttps://ms-identity-api.<default-domain>
para opost-logout-redirect-uri
valor.post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
Depois de salvar esse arquivo, use o seguinte comando para reconstruir seu aplicativo:
mvn clean package
Importante
O arquivo application.yml do aplicativo atualmente contém o valor do segredo do cliente no client-secret
parâmetro. Não é uma boa prática manter esse valor neste arquivo. Você também pode estar correndo um risco se confirmar o arquivo em um repositório Git. Para obter a abordagem recomendada, consulte Gerenciar segredos em Aplicativos de Contêiner do Azure.
Atualizar o registo da aplicação Microsoft Entra ID
Como o URI de redirecionamento é alterado para seu aplicativo implantado em Aplicativos de Contêiner do Azure, você também precisa alterar o URI de redirecionamento no registro do aplicativo Microsoft Entra ID. Use as seguintes etapas para fazer essa alteração:
Navegue até a página Registros de aplicativos da plataforma de identidade da Microsoft para desenvolvedores.
Use a caixa de pesquisa para pesquisar o registro do seu aplicativo - por exemplo,
java-servlet-webapp-authentication
.Abra o registro do aplicativo selecionando seu nome.
Selecione Autenticação a partir do menu.
Na seção URIs de redirecionamento da Web - , selecione Adicionar URI.
Preencha o URI do seu aplicativo, anexando
/login/oauth2/code/
- por exemplo,https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
.Selecione Guardar.
Implementar a aplicação
Implante o pacote JAR nos Aplicativos de Contêiner do Azure.
Nota
Se necessário, você pode especificar a versão do JDK nas variáveis de ambiente de construção Java. Para obter mais informações, consulte Criar variáveis de ambiente para Java em Aplicativos de Contêiner do Azure.
Agora você pode implantar seu arquivo WAR com o az containerapp up
comando CLI.
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
Nota
A versão padrão do JDK é 17. Se você precisar alterar a versão do JDK para compatibilidade com seu aplicativo, poderá usar o --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
argumento para ajustar o número da versão.
Para obter mais variáveis de ambiente de compilação, consulte Criar variáveis de ambiente para Java em Aplicativos de Contêiner do Azure.
Validar a aplicação
Neste exemplo, o containerapp up
comando inclui o --query properties.configuration.ingress.fqdn
argumento, que retorna o nome de domínio totalmente qualificado (FQDN), também conhecido como URL do aplicativo. Use as seguintes etapas para verificar os logs do aplicativo para investigar qualquer problema de implantação:
Acesse a URL do aplicativo de saída na página Saídas da seção Implantação .
No painel de navegação da página Visão Geral da instância dos Aplicativos de Contêiner do Azure, selecione Logs para verificar os logs do 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. Como alternativa, selecione detalhes do token, somente administradores ou usuários comuns. Como essas páginas são protegidas e exigem autenticação, você é automaticamente redirecionado para a página de login.
- 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.
- Após a conclusão bem-sucedida do fluxo de entrada, você deve ser redirecionado para a página inicial - que mostra o status de entrada - ou uma das outras páginas, dependendo de qual botão acionou seu fluxo de login.
- Observe que o botão sensível ao contexto agora diz Sair e exibe seu nome de usuário.
- Se você estiver na página inicial, selecione Detalhes do token de ID para ver algumas das declarações decodificadas do token de ID, incluindo grupos.
- Selecione Somente administradores para exibir o
/admin_only
arquivo . Apenas os utilizadores pertencentes aoAdminGroup
grupo de segurança podem visualizar esta página. Caso contrário, uma mensagem de falha de autorização será exibida. - Selecione Usuários regulares para visualizar a
/regular_user
página. Apenas os utilizadores pertencentes aoUserGroup
grupo de segurança podem visualizar esta página. Caso contrário, uma mensagem de falha de autorização será exibida. - Use o botão no canto para sair. A página de status reflete o novo estado.
Sobre o código
Este exemplo demonstra como usar a biblioteca de cliente Microsoft Entra ID Spring Boot Starter para Java para entrar usuários em seu locatário do Microsoft Entra ID. O exemplo também faz uso dos iniciadores de inicialização do Spring Oauth2 Client e do Spring Web. O exemplo usa declarações do token de ID obtido do Microsoft Entra ID para exibir os detalhes do usuário conectado e para restringir o acesso a algumas páginas usando a declaração de grupos para autorização.
Conteúdos
A tabela a seguir mostra o conteúdo da pasta de projeto de exemplo:
Ficheiro/pasta | Description |
---|---|
pom.xml | Dependências de aplicativos. |
src/main/recursos/modelos/ | Modelos Thymeleaf para UI. |
src/principal/recursos/application.yml | Configuração da biblioteca de inicialização do aplicativo e do Microsoft Entra ID. |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Este diretório contém o ponto de entrada principal do aplicativo, controlador e classes de configuração. |
.../MsIdentitySpringBootWebappApplication.java | Classe principal. |
.../SampleController.java | Controlador com mapeamentos de pontos finais. |
.../SecurityConfig.java | Configuração de segurança - por exemplo, quais rotas exigem autenticação. |
.../Utilities.java | Classe de utilitário - por exemplo, declarações de token de ID de filtro. |
CHANGELOG.md | Lista de alterações à amostra. |
CONTRIBUTING.md | Orientações para contribuir para a amostra. |
LICENÇA | A licença para a amostra. |
Declarações de token de ID
Para extrair detalhes do token, o aplicativo usa o AuthenticationPrincipal
objeto e OidcUser
o objeto do Spring Security em um mapeamento de solicitação, conforme mostrado no exemplo a seguir. Consulte o Controlador de exemplo para obter os detalhes completos de como este aplicativo usa as declarações de token de ID.
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Map<String, Object> claims = principal.getIdToken().getClaims();
}
Processar uma declaração de grupos no token de ID
A declaração groups do token inclui os nomes dos grupos aos quais o usuário conectado está atribuído, conforme mostrado no exemplo a seguir:
{
...
"groups": [
"xyz-id-xyz",
"xyz-id-xyz",]
...
}
Uma maneira comum de acessar os nomes dos grupos está documentada na seção de declarações de token de ID.
O Microsoft Entra ID Boot Starter v3.5 e superior analisa a declaração de grupos automaticamente e adiciona cada grupo ao .Authorities
Essa configuração permite que os desenvolvedores façam uso de grupos com anotações de condição Spring PrePost
usando o hasAuthority
método. Por exemplo, você pode encontrar as seguintes @PreAuthorize
condições demonstradas em SampleController.java:
@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
// restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
// restrict to users who belong to any of UserGroup or AdminGroup
}
O código a seguir obtém uma lista completa de autoridades para um determinado usuário:
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}
Links de entrada e saída
Para entrar, o aplicativo faz uma solicitação ao ponto de extremidade de entrada do Microsoft Entra ID configurado automaticamente pela biblioteca de cliente Microsoft Entra ID Spring Boot Starter para Java, conforme mostrado no exemplo a seguir:
<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>
Para sair, o aplicativo faz uma solicitação POST para o logout
ponto de extremidade, conforme mostrado no exemplo a seguir:
<form action="#" th:action="@{/logout}" method="post">
<input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
Elementos da interface do usuário dependentes de autenticação
O aplicativo tem alguma lógica simples nas páginas de modelo da interface do usuário para determinar o conteúdo a ser exibido com base na autenticação do usuário, conforme mostrado no exemplo a seguir usando as tags Spring Security Thymeleaf:
<div sec:authorize="isAuthenticated()">
this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
this content only shows to not-authenticated users
</div>
Proteja rotas com AADWebSecurityConfigurerAdapter
Por padrão, o aplicativo protege as páginas Detalhes do token de ID, Somente administradores e Usuários regulares para que apenas usuários conectados possam acessá-las. O aplicativo configura essas rotas usando a app.protect.authenticated
propriedade do arquivo application.yml. Para configurar os requisitos específicos do seu aplicativo, você pode estender AADWebSecurityConfigurationAdapter
em uma de suas classes. Para obter um exemplo, consulte a classe SecurityConfig deste aplicativo, mostrada no código a seguir:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
@Value( "${app.protect.authenticated}" )
private String[] protectedRoutes;
@Override
public void configure(HttpSecurity http) throws Exception {
// use required configuration form AADWebSecurityAdapter.configure:
super.configure(http);
// add custom configuration:
http.authorizeRequests()
.antMatchers(protectedRoutes).authenticated() // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
.antMatchers("/**").permitAll(); // allow all other routes.
}
}
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 é 150 para tokens SAML, 200 para tokens JWT, 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.
O Microsoft Entra ID Boot Starter v3.5 e superior analisa a declaração de grupos automaticamente e adiciona cada grupo ao .Authorities
O acionador de partida lida automaticamente com o cenário de excesso de idade dos grupos.
Nota
Recomendamos vivamente que utilize a funcionalidade de filtragem de grupos, 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.
Criar o cenário de excesso de idade para teste
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 .
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 as permissões User.Read e GroupMember.Read.All para que a função getMemberGroups seja executada com êxito.
Importante
Para o cenário de overage, certifique-se de ter concedido Admin Consent
o escopo da API GroupMember.Read.All
do Microsoft Graph para os aplicativos cliente e de serviço. Para obter mais informações, consulte as etapas de registro do aplicativo anteriormente neste artigo.
Atualizar o registro do aplicativo Microsoft Entra ID (java-spring-webapp-groups)
Para atualizar o registro do aplicativo, use as seguintes etapas:
Navegue de volta para o portal do Azure.
No painel de navegação, selecione Azure Ative Directory e, em seguida, selecione Registos de aplicações (Pré-visualização).
Na tela resultante, selecione o
java-spring-webapp-groups
aplicativo.Na página de registro do aplicativo, selecione Autenticação no menu.
Na seção Redirecionar URIs, atualize as URLs de resposta para que correspondam à URL do site da sua implantação do Azure - por exemplo,
https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/
.
Importante
Se o seu aplicativo estiver usando um armazenamento na memória , os Serviços de Aplicativo do Azure desativarão seu site se ele estiver inativo e todos os registros que seu aplicativo estava mantendo serão esvaziados. Além disso, se você aumentar a contagem de instâncias do seu site, as solicitações serão distribuídas entre as instâncias. Assim, os registros de seus aplicativos não são os mesmos em todas as instâncias.
Mais informações
- Documentação da plataforma de identidade da Microsoft
- Visão geral da Biblioteca de Autenticação da Microsoft (MSAL)
- Início Rápido: Registar uma aplicação na plataforma de identidade da Microsoft
- Guia de início rápido: configurar um aplicativo cliente para acessar APIs da Web
- Noções básicas sobre experiências de consentimento de aplicativo do Microsoft Entra ID
- Compreender o consentimento do utilizador e do administrador
- Objetos de aplicação e de principal de serviço no Azure Active Directory
- Nuvens Nacionais
- Exemplos de código MSAL
Para obter mais informações sobre como os protocolos OAuth 2.0 funcionam neste cenário e em outros cenários, consulte Cenários de autenticação para o Microsoft Entra ID.