Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo demonstra uma aplicação Web Java Spring Boot que inicia sessão dos utilizadores no seu inquilino do Microsoft Entra ID utilizando a biblioteca de cliente Microsoft Entra ID Spring Boot Starter para Java. Ele usa o protocolo OpenID Connect.
O diagrama a seguir mostra a topologia do aplicativo:
A aplicação cliente utiliza a biblioteca de cliente Microsoft Entra ID Spring Boot Starter para Java para autenticar um utilizador e obter um token de ID a partir do Microsoft Entra ID. O token de ID prova que o usuário está autenticado com o ID do Microsoft Entra e permite que o usuário acesse rotas protegidas.
Pré-requisitos
- versão 17 do JDK. Este exemplo foi desenvolvido em um sistema com Java 17, 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 inquilino do Microsoft Entra ID. Para obter mais informações, consulte Como obter um inquilino do Microsoft Entra ID.
- Uma conta de usuário em seu locatário do Microsoft Entra ID. Este exemplo não funciona com uma conta pessoal da Microsoft. Portanto, se iniciou sessão no portal do Azure com uma conta pessoal e não tem uma conta de utilizador no seu diretório, tem de criar uma agora.
- Visual Studio Code
- Ferramentas do Azure para Visual Studio Code
Recomendações
- Alguma familiaridade com o Spring Framework.
- Alguma familiaridade com o terminal Linux/OSX.
- jwt.ms para inspecionar os seus tokens.
- Fiddler para monitorizar a sua atividade de rede e resolver problemas.
- Siga o Blog do Microsoft Entra para ficar up-toa par dos últimos desenvolvimentos.
Configurar o exemplo
As seções a seguir mostram como configurar o aplicativo de exemplo.
Clone ou faça download do repositório de exemplo
Para clonar o exemplo, abra uma janela Bash e use o seguinte comando:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/1-Authentication/sign-in
Em alternativa, aceda ao repositório ms-identity-msal-java-samples e, em seguida, transfira-o como um ficheiro .zip e extraia-o para o seu disco rígido.
Importante
Para evitar limitações de comprimento de caminho no Windows, recomendamos a clonagem em um diretório próximo à raiz da unidade.
Registre os aplicativos de exemplo com seu locatário do Microsoft Entra ID
Há um projeto neste exemplo. As seções a seguir mostram como registrar o aplicativo usando o portal do Azure.
Escolha o inquilino do Microsoft Entra ID no qual pretende criar as suas aplicações
Para escolher o seu inquilino, siga os passos seguintes:
Inicie sessão no portal do Azure.
Se a sua conta estiver presente em mais do que um tenant do Microsoft Entra ID, selecione o seu perfil no canto do portal do Azure e, em seguida, selecione Alternar diretório para mudar a sua sessão para o tenant do Microsoft Entra ID pretendido.
Registrar o aplicativo (java-spring-webapp-auth)
Para registrar o aplicativo, use as seguintes etapas:
Aceda ao Azure portal e selecione Microsoft Entra ID.
Selecione Registos de aplicações no painel de navegação, depois selecione Nova matrícula.
Na página Registrar um aplicativo que aparece, insira as seguintes informações de registro do aplicativo:
- Na secção Name, introduza um nome significativo para a aplicação, para apresentar aos utilizadores da aplicação - por exemplo,
java-spring-webapp-auth. - Em Tipos de conta suportados, selecione Apenas um locatário - TENANT_NAME (
TENANT_NAMEvaria consoante o locatário). - Na secção URI de redirecionamento (opcional), selecione Web na caixa de combinação e introduza o seguinte URI de redirecionamento:
http://localhost:8080/login/oauth2/code/.
- Na secção Name, introduza um nome significativo para a aplicação, para apresentar aos utilizadores da aplicação - por exemplo,
Selecione Registar para criar a aplicação.
Na página de registo da aplicação, localize e copie o valor de ID da aplicação (cliente) para utilizar mais tarde. Você usa esse valor no(s) arquivo(s) de configuração do seu aplicativo.
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 secçã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: Recomendado: 180 dias (6 meses),90 dias (3 meses),365 dias (12 meses),545 dias (18 meses) ou 730 dias (24 meses).
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.
Configure a aplicação (java-spring-webapp-auth) para utilizar o registo da sua aplicação
Use as seguintes etapas para configurar o aplicativo:
Nota
Nos passos seguintes, ClientID é o mesmo que Application ID ou AppId.
Abra o projeto no seu IDE.
Abra o ficheiro src\main\resources\application.yml.
Localize o marcador de posição
Enter_Your_Tenant_ID_Heree substitua o valor existente pelo ID do inquilino do Microsoft Entra.Encontre o marcador
Enter_Your_Client_ID_Heree substitua o valor existente pelo ID da aplicaçãojava-spring-webapp-authouclientIdque copiou do portal Azure.Localize o marcador de posição
Enter_Your_Client_Secret_Heree substitua o valor existente pelo valor que guardou durante a criação dejava-spring-webapp-auth, copiado do portal do Azure.
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 ainda não tiver uma, crie uma conta gratuita. Você precisa da permissão
ContributorouOwnerna assinatura do Azure para continuar. Para obter mais informações, consulte Atribuir funções do Azure com o portal do Azure. - A CLI do Azure.
- A extensão da CLI das Aplicações de Contentor do Azure, versão
0.3.47ou posterior. Para instalar a versão mais recente, utilize o comandoaz extension add --name containerapp --upgrade --allow-preview. - O Java Development Kit, versão 17 ou posterior.
- Maven.
Preparar o projeto primavera
Use as seguintes etapas para preparar o projeto:
Utilize o seguinte comando Maven para compilar o projeto:
mvn clean verifyExecute o projeto de exemplo localmente usando o seguinte comando:
mvn spring-boot:run
Configuração
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 receber erros sobre parâmetros em falta ao executar comandos az containerapp na CLI do Azure, certifique-se de que tem instalada a versão mais recente da extensão Aplicações em Contentores do Azure.
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 aceder às funcionalidades de pré-visualização do Container Apps , instale a extensão do Container Apps com --allow-preview true.
az extension add --name containerapp --upgrade --allow-preview true
Agora que a extensão ou o módulo atual está instalado, registe os espaços de nomes Microsoft.App e Microsoft.OperationalInsights.
Nota
Os recursos das Aplicações de Contentor do Azure migraram do espaço de nomes Microsoft.Web para o espaço de nomes Microsoft.App. Consulte Migração do espaço de nomes de Microsoft.Web para Microsoft.App em março de 2022 para mais informações.
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é ao ficheiro src\main\resources\application.yml da sua aplicação e altere o valor de
post-logout-redirect-uripara o nome de domínio da sua aplicação implementada, conforme mostrado no exemplo seguinte. Certifique-se de substituir<API_NAME>e<default-domain-of-container-app-environment>pelos seus valores reais. Por exemplo, com o domínio predefinido para o ambiente do Azure Container App do passo anterior ems-identity-apipara o nome da sua aplicação, usariahttps://ms-identity-api.<default-domain>para o valorpost-logout-redirect-uri.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 ficheiro application.yml da aplicação contém atualmente o valor do segredo do cliente no parâmetro client-secret. 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 conhecer a abordagem recomendada, consulte Gerir segredos no Azure Container Apps.
Atualizar o registo da aplicação Microsoft Entra ID
Como o URI de redirecionamento muda para a sua aplicação implementada no Azure Container Apps, também tem de alterar o URI de redirecionamento no registo da aplicação no Microsoft Entra ID. Use as seguintes etapas para fazer essa alteração:
Navegue até à página Registos de aplicações da plataforma de identidade da Microsoft para programadores.
Utilize a caixa de pesquisa para procurar o registo da sua aplicação - por exemplo,
java-servlet-webapp-authentication.Abra o registro do aplicativo selecionando seu nome.
Selecione Autenticação a partir do menu.
Na secção Web - URIs de redirecionamento, selecione Adicionar URI.
Preencha o URI da sua aplicação, acrescentando
/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 Variáveis de ambiente de compilação para Java no Azure Container Apps.
Agora, pode implementar o seu ficheiro WAR com o comando CLI az containerapp up.
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 precisar de alterar a versão do JDK para garantir a compatibilidade com a sua aplicação, pode usar o argumento --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> para ajustar o número da versão.
Para mais informações sobre variáveis de ambiente de compilação, consulte Variáveis de ambiente de compilação para Java no Azure Container Apps.
Validar a aplicação
Neste exemplo, o comando containerapp up inclui o argumento --query properties.configuration.ingress.fqdn, que devolve o nome de domínio totalmente qualificado (FQDN), também conhecido como o URL da aplicação. 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 Overview da instância de Aplicações em Contentores do Azure, selecione Logs para consultar os registos da aplicação.
Explore 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 apresenta Iniciar sessão quando executa a aplicação pela primeira vez. Em alternativa, selecione detalhes do token. Como esta página é protegida e requer autenticação, você é automaticamente redirecionado para a página de entrada.
- 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 com êxito do processo de início de sessão, deverá ser redirecionado para a página inicial — que mostra o estado do início de sessão — ou para a página de detalhes do token, consoante o botão que tiver desencadeado o processo de início de sessão.
- Observe que o botão sensível ao contexto agora diz Sair e exibe seu nome de usuário.
- Se estiver na página inicial, selecione ID Token Details para ver alguns dos atributos descodificados do token de ID.
- 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 utilizar a biblioteca de cliente Microsoft Entra ID Spring Boot Starter para Java para permitir que os utilizadores iniciem sessão no seu tenant 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 ID do Microsoft Entra para exibir os detalhes do usuário conectado.
Conteúdos
A tabela a seguir mostra o conteúdo da pasta de projeto de exemplo:
| Ficheiro/pasta | Descrição |
|---|---|
| pom.xml | Dependências de aplicativos. |
| src/main/recursos/modelos/ | Modelos Thymeleaf para UI. |
| src/main/resources/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 utilitária — por exemplo, para filtrar claims de tokens de ID. |
| CHANGELOG.md | Lista de alterações à amostra. |
| CONTRIBUTING.md | Orientações para contribuir para a amostra. |
| LICENÇA | A licença para a amostra. |
Alegações do token de identificação
Para extrair detalhes do token, a aplicação utiliza os objetos AuthenticationPrincipal e OidcUser do Spring Security num mapeamento de pedidos, conforme mostrado no exemplo seguinte. Consulte o Controlador de exemplo para ver todos os detalhes de como esta aplicação utiliza as declarações do 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();
}
Links de entrada e saída
Para iniciar sessão, a aplicação envia automaticamente um pedido para o ponto final de início de sessão do Microsoft Entra ID, configurado pela biblioteca cliente Microsoft Entra ID Spring Boot Starter para Java, conforme mostrado no exemplo seguinte:
<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>
Para terminar sessão, a aplicação faz um pedido POST para o logout endpoint, como mostrado no exemplo seguinte:
<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 predefinição, a aplicação protege a página ID Token Details para que apenas os utilizadores com sessão iniciada possam aceder-lhe. A aplicação configura estas rotas através da propriedade app.protect.authenticated do ficheiro application.yml. Para configurar os requisitos específicos da sua aplicação, aplique o método AadWebApplicationHttpSecurityConfigurer#aadWebApplication à instância HttpSecurity. Por exemplo, consulte a classe SecurityConfig desta aplicação, mostrada no código seguinte:
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Value("${app.protect.authenticated}")
private String[] allowedOrigins;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// @formatter:off
http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
.and()
.authorizeHttpRequests(auth -> auth
.requestMatchers(allowedOrigins).authenticated()
.anyRequest().permitAll()
);
// @formatter:on
return http.build();
}
@Bean
@RequestScope
public ServletUriComponentsBuilder urlBuilder() {
return ServletUriComponentsBuilder.fromCurrentRequest();
}
}
Mais informações
- Plataforma de identidade da Microsoft (Microsoft Entra ID para desenvolvedores)
- 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 uma aplicação cliente para aceder a APIs Web
- Compreender as experiências de consentimento de aplicações no Microsoft Entra ID
- Compreender o consentimento do utilizador e do administrador
- Objetos de aplicação e de entidade de serviço no Microsoft Entra ID
- Nuvens Nacionais
- Exemplos de código MSAL
- Biblioteca cliente Microsoft Entra ID Spring Boot Starter para Java
- Biblioteca de autenticação da Microsoft para Java (MSAL4J)
- MSAL4J Wiki
- tokens de ID
- Tokens de acesso na plataforma de identidade da Microsoft
Para obter mais informações sobre como os protocolos OAuth 2.0 funcionam neste cenário e noutros cenários, consulte Cenários de autenticação do Microsoft Entra ID.