Beveiliging configureren voor een Tomcat-, JBoss- of Java SE-app in Azure-app Service
In dit artikel wordt beschreven hoe u Java-specifieke beveiligingsinstellingen configureert in App Service. Java-toepassingen die worden uitgevoerd in App Service, hebben dezelfde set aanbevolen beveiligingsprocedures als andere toepassingen.
Azure-app Service voert Java-webtoepassingen uit op een volledig beheerde service in drie varianten:
- Java SE: kan een app uitvoeren die is geïmplementeerd als een JAR-pakket dat een ingesloten server bevat (zoals Spring Boot, Dropwizard, Quarkus of een met een ingesloten Tomcat- of Jetty-server).
- Tomcat: de ingebouwde Tomcat-server kan een app uitvoeren die is geïmplementeerd als een WAR-pakket.
- JBoss EAP : alleen ondersteund voor Linux-apps in de prijscategorieën Free, Premium v3 en Isolated v2. De ingebouwde JBoss EAP-server kan een app uitvoeren die is geïmplementeerd als WAR- of EAR-pakket.
Notitie
Voor Spring-toepassingen wordt u aangeraden Azure Spring Apps te gebruiken. U kunt echter nog steeds Azure-app Service als bestemming gebruiken. Zie de richtlijnen voor java-workloadbestemmingen voor advies.
Gebruikers verifiëren (Easy Auth)
Stel app-verificatie in Azure Portal in met de optie Verificatie en autorisatie . Hier kunt u verificatie inschakelen met behulp van Microsoft Entra ID of sociale aanmeldingen, zoals Facebook, Google of GitHub. Azure Portal-configuratie werkt alleen bij het configureren van één verificatieprovider. Zie Uw App Service-app configureren voor het gebruik van microsoft Entra-aanmelding en de gerelateerde artikelen voor andere id-providers voor meer informatie. Als u meerdere aanmeldingsproviders wilt inschakelen, volgt u de instructies in Aanmeldingen en afmelden aanpassen.
Spring Boot-ontwikkelaars kunnen de Microsoft Entra Spring Boot-starter gebruiken om toepassingen te beveiligen met vertrouwde Spring Security-aantekeningen en API's. Zorg ervoor dat u de maximale headergrootte in het bestand application.properties verhoogt. We stellen een waarde voor 16384
.
Uw Tomcat-toepassing heeft rechtstreeks vanuit de servlet toegang tot de claims van de gebruiker door het principal-object naar een kaartobject te casten. Het Map
object wijst elk claimtype toe aan een verzameling van de claims voor dat type. In het volgende codevoorbeeld request
is dit een exemplaar van HttpServletRequest
.
Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();
Nu kunt u het Map
object controleren op een specifieke claim. Het volgende codefragment doorloopt bijvoorbeeld alle claimtypen en drukt de inhoud van elke verzameling af.
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);
}
}
}
Als u gebruikers wilt afmelden, gebruikt u het /.auth/ext/logout
pad. Zie de documentatie over aanmeldingen en afmeldingen aanpassen om andere acties uit te voeren. Er is ook officiële documentatie over de Tomcat HttpServletRequest-interface en de bijbehorende methoden. De volgende servlet-methoden worden ook gehydrateerd op basis van uw App Service-configuratie:
public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()
Als u deze functie wilt uitschakelen, maakt u een toepassingsinstelling met de naam WEBSITE_AUTH_SKIP_PRINCIPAL
met de waarde .1
Als u alle servlet-filters wilt uitschakelen die door App Service zijn toegevoegd, maakt u een instelling met de naam WEBSITE_SKIP_FILTERS
met de waarde .1
Zie het tabblad Tomcat voor JBoss EAP.
TLS/SSL configureren
Als u een bestaand TLS/SSL-certificaat wilt uploaden en dit wilt binden aan de domeinnaam van uw toepassing, volgt u de instructies in Een aangepaste DNS-naam beveiligen met een TLS/SSL-binding in Azure-app Service. U kunt de app ook configureren om TLS/SSL af te dwingen.
KeyVault-verwijzingen gebruiken
Azure KeyVault biedt gecentraliseerd geheimbeheer met toegangsbeleid en controlegeschiedenis. U kunt geheimen (zoals wachtwoorden of verbindingsreeks s) opslaan in KeyVault en deze geheimen in uw toepassing openen via omgevingsvariabelen.
Volg eerst de instructies voor het verlenen van toegang tot uw app tot een sleutelkluis en het maken van een KeyVault-verwijzing naar uw geheim in een toepassingsinstelling. U kunt controleren of de verwijzing wordt omgezet in het geheim door de omgevingsvariabele af te drukken terwijl u op afstand toegang hebt tot de App Service-terminal.
Raadpleeg deze documentatie over externe configuraties voor Spring-configuratiebestanden.
Als u deze geheimen in uw Spring-configuratiebestand wilt injecteren, gebruikt u syntaxis voor omgevingsvariabeleinjectie (${MY_ENV_VAR}
).
Als u deze geheimen wilt injecteren in uw Tomcat-configuratiebestand, gebruikt u de syntaxis van de omgevingsvariabele injectie (${MY_ENV_VAR}
).
Het Java-sleutelarchief gebruiken in Linux
Standaard worden openbare of persoonlijke certificaten die naar App Service Linux zijn geüpload, geladen in de respectieve Java-sleutelarchieven wanneer de container wordt gestart. Nadat u uw certificaat hebt geüpload, moet u uw App Service opnieuw starten om het te laden in het Java-sleutelarchief. Openbare certificaten worden geladen in het sleutelarchief op $JRE_HOME/lib/security/cacerts
, en persoonlijke certificaten worden opgeslagen in $JRE_HOME/lib/security/client.jks
.
Mogelijk is er meer configuratie nodig voor het versleutelen van uw JDBC-verbinding met certificaten in het Java-sleutelarchief. Raadpleeg de documentatie voor het gekozen JDBC-stuurprogramma.
Het Java-sleutelarchief initialiseren in Linux
Als u het import java.security.KeyStore
object wilt initialiseren, laadt u het sleutelarchiefbestand met het wachtwoord. Het standaardwachtwoord voor beide sleutelarchieven is 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());
Het sleutelarchief handmatig laden in Linux
U kunt certificaten handmatig laden in het sleutelarchief. Maak een app-instelling, SKIP_JAVA_KEYSTORE_LOAD
met de waarde om App Service uit te schakelen voor het automatisch laden van 1
de certificaten in het sleutelarchief. Alle openbare certificaten die via Azure Portal naar App Service zijn geüpload, worden opgeslagen onder /var/ssl/certs/
. Persoonlijke certificaten worden opgeslagen onder /var/ssl/private/
.
U kunt interactie hebben met of fouten opsporen in het Java-sleutelprogramma door een SSH-verbinding met uw App Service te openen en de opdracht keytool
uit te voeren. Raadpleeg de documentatie van het hulpprogramma voor key voor een lijst met opdrachten. Zie de officiële documentatie voor meer informatie over de KeyStore-API.
Volgende stappen
Ga naar het Azure voor Java-ontwikkelaarscentrum om azure-snelstartgidsen, zelfstudies en Java-referentiedocumentatie te vinden.