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/cacerts
och 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.