Partilhar via


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. Os aplicativos Java executados no Serviço de Aplicativo têm o mesmo conjunto de práticas recomendadas de segurança que outros aplicativos.

O Serviço de Aplicativo do Azure executa aplicativos Web Java em um serviço totalmente gerenciado em três variantes:

  • Java Standard Edition (SE): Pode executar um aplicativo implantado como um pacote Java Archive (JAR) que contém um servidor incorporado (como Spring Boot, Quarkus, Dropwizard ou um aplicativo com um servidor Tomcat ou Jetty incorporado).
  • Tomcat: O servidor Tomcat integrado pode executar um aplicativo implantado como um pacote WAR (Web Application Archive).
  • JBoss Enterprise Application Platform (EAP): O servidor JBoss EAP integrado pode executar um aplicativo implantado como um pacote WAR ou Enterprise Archive (EAR). Suportado para aplicativos Linux em um conjunto de níveis de preços que inclui Free, Premium v3 e Isolated v2.gti

Observação

O JBoss EAP on App Service agora oferece suporte à cobrança "Bring Your Own License" (BYOL), isso permite que os clientes com assinaturas Red Hat existentes apliquem essas licenças diretamente às implantações do JBoss EAP no Serviço de Aplicativo do Azure. Mais informações.

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 você precisar habilitar vários provedores de entrada, siga as instruções em Personalizar entradas e saídas.

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 executar outras ações, consulte a documentação em Personalizar entradas e saídas. 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/SSL

Para carregar um certificado TLS/SSL existente e associá-lo ao nome de domínio do seu aplicativo, siga as instruções em Proteger um nome DNS personalizado com uma associação TLS/SSL no Serviço de Aplicativo do Azure. Você também pode configurar o aplicativo para impor TLS/SSL.

Usar referências do KeyVault

O Azure KeyVault fornece gerenciamento secreto centralizado com políticas de acesso e histórico de auditoria. Você pode armazenar segredos (como senhas ou cadeias de conexão) no KeyVault e acessar esses segredos em seu aplicativo por meio de variáveis de ambiente.

Primeiro, siga as instruções para conceder ao seu aplicativo acesso a um cofre de chaves e fazer uma referência do KeyVault ao seu segredo em uma Configuração do aplicativo. 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 arquivos de configuração do Spring, consulte esta documentação sobre configurações externalizadas.

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 padrão, todos os certificados públicos ou privados carregados no App Service Linux são carregados nos respetivos armazenamentos de chaves Java quando o contêiner é iniciado. Depois de carregar o seu certificado, terá de reiniciar o App Service para que ele seja carregado no Java KeyStore. Os certificados públicos são carregados no armazenamento de chaves no $JRE_HOME/lib/security/cacerts, e os certificados privados são armazenados no $JRE_HOME/lib/security/client.jks.

Pode ser necessária mais configuração para encriptar a sua conexão JDBC com certificados no armazenamento de chaves Java. Consulte a documentação do driver JDBC escolhido.

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. Crie uma definição de aplicação, SKIP_JAVA_KEYSTORE_LOAD, com um valor de 1 para desativar o carregamento automático dos certificados no armazenamento de chaves pelo App Service. Todos os certificados públicos carregados no Serviço de Aplicativo por meio do portal do Azure são armazenados em /var/ssl/certs/. Os certificados privados são armazenados em /var/ssl/private/.

Você pode interagir ou depurar a Java Key Tool abrindo uma conexão SSH com o Serviço de Aplicativo e executando o comando keytool. Consulte a documentação da Key Tool para obter uma lista de comandos. Para obter mais informações sobre a API KeyStore, consulte a documentação oficial.

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.