Konfigurieren der Sicherheit für eine Tomcat-, JBoss- oder Java SE-App in Azure App Service

In diesem Artikel wird erläutert, wie Java-spezifische Sicherheitseinstellungen in App Service konfiguriert werden. Java-Anwendungen, die in App Service ausgeführt werden, haben die gleichen Sicherheitsbestimmungen wie andere Anwendungen.

Azure App Service führt Java-Webanwendungen in drei Typen in einem vollständig verwalteten Dienst aus:

  • Java Standard Edition (SE). Java SE kann eine App ausführen, die als Java-Archivpaket (JAR) bereitgestellt wird, das einen eingebetteten Server enthält, z. B. Spring Boot, Aspxus, Dropwizard oder eine App mit einem eingebetteten Tomcat- oder Jetty-Server.
  • Tomcat. Der integrierte Tomcat-Server kann eine App ausführen, die als War-Paket (Web Application Archive) bereitgestellt wird.
  • JBoss Enterprise Application Platform (EAP): Der integrierte JBoss EAP-Server kann eine App ausführen, die als WAR- oder Enterprise-Archivpaket (EAR) bereitgestellt wird. Diese Option wird für Linux-Apps in einer Reihe von Preisstufen unterstützt, die free, Premium v3 und Isolated v2 enthalten.

Hinweis

JBoss EAP on App Service unterstützt jetzt die Bring Your Own License (BYOL)-Abrechnung. BYOL ermöglicht Kunden, die über vorhandene Red Hat-Abonnements verfügen, diese Lizenzen direkt auf ihre JBoss EAP-Bereitstellungen in Azure App Service anzuwenden. Weitere Informationen finden Sie unter BYOL-Support für JBoss EAP für App Service.

Authentifizieren von Benutzern (einfache Authentifizierung)

Richten Sie die App-Authentifizierung im Azure-Portal über die Option Authentifizierung und Autorisierung ein. Von dort aus können Sie die Authentifizierung mithilfe von Microsoft Entra ID oder sozialen Netzwerken wie Facebook, Google oder GitHub aktivieren. Die Konfiguration des Azure-Portals funktioniert nur, wenn Sie einen einzelnen Authentifizierungsanbieter konfigurieren. Weitere Informationen finden Sie unter Konfigurieren Ihrer App Service-App zur Verwendung der Microsoft Entra-Anmeldung und in den entsprechenden Artikeln für andere Identitätsanbieter. Wenn Sie mehrere Anmeldeanbieter aktivieren müssen, lesen Sie "Anpassen von Anmeldungen und Abmelden".

Spring Boot-Entwickler können den Microsoft Entra Spring Boot Starter verwenden, um Anwendungen mithilfe von vertrauten Spring Security-Anmerkungen und -APIs abzusichern. Achten Sie darauf, dass Sie die maximale Headergröße in Ihrer application.properties-Datei erhöhen. Wir empfehlen den Wert 16384.

Ihre Tomcat-Anwendung kann direkt aus dem Servlet auf die Ansprüche des Benutzers zugreifen, indem sie das Principal-Objekt in ein Map-Objekt umwandelt. Das Map-Objekt ordnet jeden Anspruchstyp einer Sammlung der Ansprüche für diesen Typ zu. Im folgenden Codebeispiel ist request eine Instanz von HttpServletRequest.

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

Nun können Sie das Map-Objekt auf bestimmte Ansprüche überprüfen. Der folgende Codeausschnitt durchläuft beispielsweise alle Anspruchstypen und gibt den Inhalt der einzelnen Kollektionen aus.

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

Um Benutzer abzumelden, verwenden Sie den Pfad /.auth/ext/logout. Informationen zum Ausführen anderer Aktionen finden Sie unter Anpassen von Anmelde- und Abmelden. Es gibt auch eine offizielle Dokumentation zur HttpServletRequest-Schnittstelle von Tomcat und ihren Methoden. Die folgenden Servletmethoden werden auch basierend auf Ihrer App Service-Konfiguration aktualisiert:

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

Um dieses Feature zu deaktivieren, erstellen Sie eine Anwendungseinstellung mit dem Namen WEBSITE_AUTH_SKIP_PRINCIPAL und dem Wert 1. Um alle Servletfilter zu deaktivieren, die von App Service hinzugefügt wurden, erstellen Sie eine Einstellung namens WEBSITE_SKIP_FILTERS mit dem Wert 1.

Informationen zu JBoss EAP finden Sie auf der Registerkarte „Tomcat“.

Konfigurieren von TLS

Informationen zum Hochladen eines vorhandenen TLS-Zertifikats und zum Binden an den Domänennamen Ihrer Anwendung finden Sie unter Aktivieren von HTTPS für eine benutzerdefinierte Domäne in Azure App Service. Sie können die App auch so konfigurieren, dass TLS erzwungen wird.

Verwenden von Azure Key Vault-Verweisen

Azure Key Vault bietet eine zentrale geheime Verwaltung mit Zugriffsrichtlinien und Überwachungsverlauf. Sie können geheime Schlüssel, z. B. Kennwörter oder Verbindungszeichenfolgen, in einem Schlüsseltresor speichern. Sie können über Umgebungsvariablen auf diese geheimen Schlüssel in Ihrer Anwendung zugreifen.

Gewähren Sie Ihrer App zunächst Zugriff auf einen Schlüsseltresor, und erstellen Sie einen Key Vault-Verweis auf Ihr Geheimnis in den Anwendungseinstellungen. Sie können überprüfen, ob der Verweis auf das Geheimnis aufgelöst wird, indem Sie die Umgebungsvariable ausgeben, während Sie remote auf das App Service-Terminal zugreifen.

Informationen zu Spring-Konfigurationsdateien finden Sie unter "Externalized Configuration".

Um diese Geheimnisse in Ihre Spring-Konfigurationsdatei einzufügen, verwenden Sie die Syntax der Umgebungsvariablen (${MY_ENV_VAR}).

Um diese Geheimnisse in Ihre Tomcat-Konfigurationsdatei einzufügen, verwenden Sie die Syntax der Umgebungsvariablen (${MY_ENV_VAR}).

Verwenden des Java-Keystore in Linux

Standardmäßig werden alle öffentlichen oder privaten Zertifikate, die in App Service Linux hochgeladen werden, in die jeweiligen Java-Schlüsselspeicher geladen, wenn der Container gestartet wird. Nachdem Sie Ihr Zertifikat hochgeladen haben, müssen Sie den App-Dienst neu starten, damit es in den Java-Schlüsselspeicher geladen wird. Öffentliche Zertifikate werden in den Schlüsselspeicher geladen unter $JRE_HOME/lib/security/cacerts. Private Zertifikate werden in $JRE_HOME/lib/security/client.jks gespeichert.

Möglicherweise ist eine weitere Konfiguration erforderlich, um Ihre JDBC-Verbindung mit Zertifikaten im Java-Schlüsselspeicher zu verschlüsseln:

Initialisieren des Java-Keystore in Linux

Zum Initialisieren des import java.security.KeyStore-Objekts laden Sie die Schlüsselspeicherdatei mit dem Kennwort. Das Standardkennwort für beide Schlüsselspeicher lautet 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());

Manuelles Laden des Keystore in Linux

Sie können Zertifikate manuell in den Schlüsselspeicher laden. Erstellen Sie die App-Einstellung SKIP_JAVA_KEYSTORE_LOAD mit dem Wert 1, damit die Zertifikate nicht automatisch von App Service in den Keystore geladen werden. Alle öffentlichen Zertifikate, die mithilfe des Azure-Portals in App Service hochgeladen wurden, werden unter /var/ssl/certs/gespeichert. Private Zertifikate werden unter /var/ssl/private/ gespeichert.

Öffnen Sie zum Interagieren oder Debuggen des Java Key-Tools eine SSH-Verbindung mit Ihrem App-Dienst, und führen Sie den Befehl keytoolaus. Eine Liste mit Befehlen finden Sie in der Dokumentation des Schlüsseltools. Weitere Informationen zur KeyStore-API finden Sie unter Class KeyStore.

Besuchen Sie das Center Azure für Java-Entwickler, um Azure-Schnellstarts, Tutorials und Java-Referenzdokumentation zu finden.