Configurar a segurança para um aplicativo Tomcat, JBoss ou Java SE no Serviço de Aplicativo do Azure

Este artigo mostra como definir configurações de segurança específicas do Java no Serviço de Aplicativo. As aplicações Java que correm em App Service têm o mesmo conjunto de boas práticas de segurança que outras aplicações.

O Azure App Service executa aplicações web Java em três tipos num serviço totalmente gerido:

  • Java Standard Edition (SE). O Java SE pode executar uma aplicação implementada como um pacote Java archive (JAR) que contenha um servidor embutido, como Spring Boot, Quarkus, Dropwizard, ou uma aplicação com um servidor Tomcat ou Jetty embutido.
  • Tomcat. O servidor Tomcat incorporado pode executar uma aplicação implementada como um pacote de arquivo de aplicações web (WAR).
  • JBoss Enterprise Application Platform (EAP): O servidor JBoss EAP integrado pode executar um aplicativo implantado como um pacote WAR ou Enterprise Archive (EAR). Esta opção é suportada para aplicações Linux num conjunto de preços que incluem Free, Premium v3 e Isolated v2.

Observação

O JBoss EAP no App Service agora suporta faturação Bring Your Own License (BYOL). O BYOL permite que os clientes que já têm subscrições Red Hat apliquem essas licenças diretamente às suas implementações JBoss EAP no Azure App Service. Para mais informações, consulte o Suporte BYOL para JBoss EAP no App Service.

Autenticar usuários (autenticação fácil)

Configure a autenticação de aplicativo no portal do Azure com a opção Autenticação e Autorização . A partir daí, você pode habilitar a autenticação usando o Microsoft Entra ID ou logins sociais como Facebook, Google ou GitHub. A configuração do portal do Azure só funciona ao configurar um único provedor de autenticação. Para obter mais informações, consulte Configurar a sua aplicação de Serviço de Aplicativo para usar a autenticação do Microsoft Entra e os artigos relacionados para outros fornecedores de identidade. Se precisar de habilitar múltiplos fornecedores de início de sessão, consulte Personalizar inícios e encerramentos de sessão.

Os desenvolvedores do Spring Boot podem usar o Microsoft Entra Spring Boot starter para proteger aplicativos usando anotações e APIs familiares do Spring Security. Certifique-se de aumentar o tamanho máximo do cabeçalho no arquivo application.properties . Sugerimos um valor de 16384.

Seu aplicativo Tomcat pode acessar as declarações do usuário diretamente do servlet convertendo o objeto Principal em um objeto Map. O Map objeto mapeia cada tipo de declaração para uma coleção de declarações para esse tipo. No exemplo de código a seguir, request é uma instância de HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

Agora pode inspecionar o objeto Map em busca de qualquer afirmação específica. Por exemplo, o trecho de código a seguir passa por todos os tipos de reivindicação e imprime o conteúdo de cada coleção.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

Para encerrar a sessão dos utilizadores, use o /.auth/ext/logout caminho. Para realizar outras ações, consulte Personalizar inícios e fins de sessão. Há também documentação oficial sobre a interface Tomcat HttpServletRequest e seus métodos. Os seguintes métodos de servlet também são hidratados com base na configuração do App Service:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

Para desativar esse recurso, crie uma Configuração do Aplicativo nomeada WEBSITE_AUTH_SKIP_PRINCIPAL com um valor de 1. Para desativar todos os filtros de servlet adicionados pelo Serviço de Aplicativo, crie uma configuração nomeada WEBSITE_SKIP_FILTERS com o valor de 1.

Para JBoss EAP, consulte a guia Tomcat.

Configurar TLS

Para carregar um certificado TLS existente e associá-lo ao nome de domínio da sua aplicação, consulte Ativar HTTPS para um domínio personalizado no Azure App Service. Também podes configurar a aplicação para aplicar o TLS.

Utilize as referências do Azure Key Vault

O Azure Key Vault fornece gestão centralizada de segredos com políticas de acesso e histórico de auditoria. Pode armazenar segredos, como palavras-passe ou cadeias de ligação, num cofre de chaves. Pode aceder a estes segredos na sua aplicação através de variáveis de ambiente.

Primeiro, conceda à sua aplicação acesso a um cofre de chaves e faça uma referência no Cofre de Chaves ao seu segredo numa Configuração de Aplicação. Você pode validar que a referência se resolve para o segredo imprimindo a variável de ambiente enquanto acede remotamente ao terminal do Serviço de Aplicações.

Para ficheiros de configuração Spring, veja Configuração Externalizada.

Para injetar esses segredos no arquivo de configuração do Spring, use a sintaxe de injeção de variável de ambiente (${MY_ENV_VAR}).

Para injetar esses segredos no arquivo de configuração do Tomcat, use a sintaxe de injeção de variável de ambiente (${MY_ENV_VAR}).

Usar o armazenamento de chaves Java no Linux

Por defeito, quaisquer certificados públicos ou privados carregados para o App Service Linux são carregados nos respetivos armazenamentos de chaves Java quando o contentor inicia. Depois de carregar o seu certificado, terá de reiniciar o Serviço de Aplicações para que este seja carregado na loja de chaves Java. Os certificados públicos são carregados no armazenamento de chaves em $JRE_HOME/lib/security/cacerts. Os certificados privados são armazenados em $JRE_HOME/lib/security/client.jks.

Pode ser necessária mais configuração para encriptar a sua ligação JDBC com certificados na loja de chaves Java:

Inicializar o armazenamento de chaves Java no Linux

Para inicializar o import java.security.KeyStore objeto, carregue o arquivo keystore com a senha. A senha padrão para ambos os armazenamentos de chaves é changeit.

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

Importe manualmente o armazenamento de chaves no Linux

Pode carregar certificados manualmente no repositório de chaves. Para desabilitar o Serviço de Aplicações de carregar automaticamente os certificados na loja de chaves, crie uma configuração de aplicação, SKIP_JAVA_KEYSTORE_LOAD, com um valor de 1. Todos os certificados públicos carregados para o App Service através do portal Azure são armazenados em /var/ssl/certs/. Os certificados privados são armazenados em /var/ssl/private/.

Para interagir ou depurar a Java Key Tool, abra uma ligação SSH ao seu Serviço de Aplicações e execute o comando keytool. Consulte a documentação da Key Tool para obter uma lista de comandos. Para mais informações sobre a API KeyStore, consulte Class KeyStore.

Visite o Centro de Desenvolvedores do Azure para Java para encontrar inícios rápidos, tutoriais e documentação de referência Java do Azure.