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 SE - Pode executar um aplicativo implantado como um pacote JAR que contém um servidor incorporado (como Spring Boot, Dropwizard, Quarkus ou um com um servidor Tomcat ou Jetty incorporado).
  • Tomcat - O servidor Tomcat integrado pode executar um aplicativo implantado como um pacote WAR.
  • JBoss EAP - Suportado apenas para aplicativos Linux nos níveis de preços Free, Premium v3 e Isolated v2. O servidor JBoss EAP integrado pode executar um aplicativo implantado como um pacote WAR ou EAR.

Nota

Para aplicativos Spring, recomendamos o uso do Azure Spring Apps. No entanto, você ainda pode usar o Serviço de Aplicativo do Azure como destino. Consulte Java Workload Destination Guidance para obter conselhos.

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 seu aplicativo do Serviço de Aplicativo para usar a entrada do Microsoft Entra e os artigos relacionados para outros provedores 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 você pode inspecionar o Map objeto em busca de qualquer reivindicação específica. Por exemplo, o trecho de código a seguir itera por todos os tipos de declaraçã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 sair dos usuários, 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 Serviço de Aplicativo:

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 resolve para o segredo imprimindo a variável de ambiente enquanto acessa remotamente o terminal do Serviço de Aplicativo.

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 seu certificado, você precisará reiniciar o Serviço de Aplicativo para que ele seja carregado no armazenamento de chaves Java. 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.

Mais configuração pode ser necessária para criptografar 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());

Carregue manualmente o armazenamento de chaves no Linux

Você pode carregar certificados manualmente no armazenamento de chaves. Crie uma configuração de aplicativo, SKIP_JAVA_KEYSTORE_LOAD, com um valor de para desabilitar o Serviço de 1 Aplicativo de carregar os certificados no armazenamento de chaves automaticamente. 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.

Próximos passos

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.