Dela via


Konfigurera säkerhet för en Tomcat-, JBoss- eller Java SE-app i Azure App Service

Den här artikeln visar hur du konfigurerar Java-specifika säkerhetsinställningar i App Service. Java-program som körs i App Service har samma uppsättning rekommenderade säkerhetsmetoder som andra program.

Azure App Service kör Java-webbprogram på en fullständigt hanterad tjänst i tre varianter:

  • Java SE – Kan köra en app som distribueras som ett JAR-paket som innehåller en inbäddad server (till exempel Spring Boot, Dropwizard, Quarkus eller en med en inbäddad Tomcat- eller Jetty-server).
  • Tomcat – Den inbyggda Tomcat-servern kan köra en app som distribueras som ett WAR-paket.
  • JBoss EAP – Stöds endast för Linux-appar på prisnivåerna Kostnadsfri, Premium v3 och Isolerad v2. Den inbyggda JBoss EAP-servern kan köra en app som distribueras som ett WAR- eller EAR-paket.

Kommentar

För Spring-program rekommenderar vi att du använder Azure Spring Apps. Du kan dock fortfarande använda Azure App Service som mål. Mer information finns i Vägledning för Java-arbetsbelastningsmål.

Autentisera användare (Enkel autentisering)

Konfigurera appautentisering i Azure Portal med alternativet Autentisering och auktorisering. Därifrån kan du aktivera autentisering med hjälp av Microsoft Entra-ID eller sociala inloggningar som Facebook, Google eller GitHub. Azure Portal konfiguration fungerar bara när du konfigurerar en enda autentiseringsprovider. Mer information finns i Konfigurera din App Service-app så att den använder Microsoft Entra-inloggning och relaterade artiklar för andra identitetsprovidrar. Om du behöver aktivera flera inloggningsleverantörer följer du anvisningarna i Anpassa inloggningar och utloggningar.

Spring Boot-utvecklare kan använda Microsoft Entra Spring Boot Starter för att skydda program med välbekanta Spring Security-anteckningar och API:er. Se till att öka den maximala sidhuvudstorleken i filen application.properties . Vi föreslår värdet 16384.

Ditt Tomcat-program kan komma åt användarens anspråk direkt från servleten genom att casta objektet Principal till ett Map-objekt. Objektet Map mappar varje anspråkstyp till en samling anspråk för den typen. I följande kodexempel request är en instans av HttpServletRequest.

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

Nu kan du inspektera objektet Map för ett specifikt anspråk. Följande kodfragment itererar till exempel genom alla anspråkstyper och skriver ut innehållet i varje samling.

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);
            }
        }
    }

Om du vill logga ut användare använder du /.auth/ext/logout sökvägen. Om du vill utföra andra åtgärder kan du läsa dokumentationen om Anpassa inloggningar och utloggningar. Det finns också officiell dokumentation om Tomcat HttpServletRequest-gränssnittet och dess metoder. Följande servlet-metoder är också hydratiserade baserat på din App Service-konfiguration:

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

Om du vill inaktivera den här funktionen skapar du en programinställning med namnet WEBSITE_AUTH_SKIP_PRINCIPAL med värdet 1. Om du vill inaktivera alla servlet-filter som lagts till av App Service skapar du en inställning med namnet WEBSITE_SKIP_FILTERS med värdet 1.

Information om JBoss EAP finns på fliken Tomcat.

Konfigurera TLS/SSL

Om du vill ladda upp ett befintligt TLS/SSL-certifikat och binda det till ditt programs domännamn följer du anvisningarna i Skydda ett anpassat DNS-namn med en TLS/SSL-bindning i Azure App Service. Du kan också konfigurera appen för att framtvinga TLS/SSL.

Använda KeyVault-referenser

Azure KeyVault tillhandahåller centraliserad hantering av hemligheter med åtkomstprinciper och granskningshistorik. Du kan lagra hemligheter (till exempel lösenord eller anslutningssträng) i KeyVault och få åtkomst till dessa hemligheter i ditt program via miljövariabler.

Följ först anvisningarna för att ge din app åtkomst till ett nyckelvalv och göra en KeyVault-referens till din hemlighet i en programinställning. Du kan kontrollera att referensen matchar hemligheten genom att skriva ut miljövariabeln vid fjärråtkomst till App Service-terminalen.

Information om Spring-konfigurationsfiler finns i den här dokumentationen om externaliserade konfigurationer.

Om du vill mata in dessa hemligheter i springkonfigurationsfilen använder du syntaxen för miljövariabelinmatning (${MY_ENV_VAR}).

Om du vill mata in dessa hemligheter i tomcat-konfigurationsfilen använder du syntax för miljövariabelinmatning (${MY_ENV_VAR}).

Använda Java-nyckelarkivet i Linux

Som standard läses alla offentliga eller privata certifikat som laddas upp till App Service Linux in i respektive Java-nyckellager när containern startar. När du har laddat upp certifikatet måste du starta om App Service för att det ska läsas in i Java-nyckelarkivet. Offentliga certifikat läses in i nyckelarkivet på $JRE_HOME/lib/security/cacertsoch privata certifikat lagras i $JRE_HOME/lib/security/client.jks.

Det kan krävas mer konfiguration för att kryptera din JDBC-anslutning med certifikat i Java-nyckelarkivet. Se dokumentationen för din valda JDBC-drivrutin.

Initiera Java-nyckelarkivet i Linux

Om du vill initiera import java.security.KeyStore objektet läser du in keystore-filen med lösenordet. Standardlösenordet för båda nyckelarkiven är 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());

Läs in nyckelarkivet manuellt i Linux

Du kan läsa in certifikat manuellt till nyckelarkivet. Skapa en appinställning, SKIP_JAVA_KEYSTORE_LOAD, med värdet 1 för att inaktivera App Service från att läsa in certifikaten i nyckelarkivet automatiskt. Alla offentliga certifikat som laddas upp till App Service via Azure Portal lagras under /var/ssl/certs/. Privata certifikat lagras under /var/ssl/private/.

Du kan interagera eller felsöka Java Key Tool genom att öppna en SSH-anslutning till Din App Service och köra kommandot keytool. En lista över kommandon finns i dokumentationen för nyckelverktyget. Mer information om KeyStore-API :et finns i den officiella dokumentationen.

Nästa steg

Besök Azure for Java Developers Center för att hitta Azure-snabbstarter, självstudier och Java-referensdokumentation.