Aktivieren der Anmeldung für Java WebLogic-Apps mithilfe der Microsoft Entra-ID
In diesem Artikel wird eine Java WebLogic-App veranschaulicht, die Benutzer mit der Microsoft-Authentifizierungsbibliothek (MSAL) für Java bei Ihrem Microsoft Entra ID-Mandanten anmeldet.
Das folgende Diagramm zeigt die Topologie der App:
Die Client-App verwendet MSAL für Java (MSAL4J), um Benutzer bei ihrem eigenen Microsoft Entra ID-Mandanten anzumelden und ein ID-Token von Microsoft Entra ID abzurufen. Das ID-Token beweist, dass ein Benutzer bei diesem Mandanten authentifiziert wird. Die App schützt ihre Routen entsprechend dem Authentifizierungsstatus des Benutzers.
Voraussetzungen
- JDK Version 8 oder höher
- Maven 3
- Microsoft Entra ID-Mandant. Weitere Informationen finden Sie unter Abrufen eines Microsoft Entra ID-Mandanten.
- Ein Benutzerkonto in Ihrem eigenen Microsoft Entra ID-Mandanten, wenn Sie nur mit Konten in Ihrem Organisationsverzeichnis arbeiten möchten – d. h. im Einzelmandantenmodus. Wenn Sie noch kein Benutzerkonto in Ihrem Microsoft Entra ID-Mandanten erstellt haben, sollten Sie dies tun, bevor Sie fortfahren. Weitere Informationen finden Sie unter Erstellen, Einladen und Löschen von Benutzern.
- Ein Benutzerkonto im Microsoft Entra ID-Mandanten einer organisation, wenn Sie mit Konten in einem beliebigen Organisationsverzeichnis arbeiten möchten – d. h. im Mehrinstanzenmodus. Sie müssen dieses Beispiel ändern, um mit einem persönlichen Microsoft-Konto zu arbeiten. Wenn Sie noch kein Benutzerkonto in Ihrem Microsoft Entra ID-Mandanten erstellt haben, sollten Sie dies tun, bevor Sie fortfahren. Weitere Informationen finden Sie unter Erstellen, Einladen und Löschen von Benutzern.
- Ein persönliches Microsoft-Konto , z. B. Xbox, Hotmail, Live usw., wenn Sie mit persönlichen Microsoft-Konten arbeiten möchten.
Empfehlungen
- Einige Kenntnisse mit den Java / Jakarta Servlets.
- Vertrautheit mit Linux/OSX-Terminal oder Windows PowerShell.
- jwt.ms zum Überprüfen Ihrer Token.
- Fiddler zur Überwachung Ihrer Netzwerkaktivität und Problembehandlung.
- Folgen Sie dem Microsoft Entra ID-Blog , um mit den neuesten Entwicklungen auf dem neuesten Stand zu bleiben.
Einrichten des Beispiels
In den folgenden Abschnitten wird gezeigt, wie Sie die Beispielanwendung einrichten.
Klonen oder Herunterladen des Beispiel-Repositorys
Um das Beispiel zu klonen, öffnen Sie ein Bash-Fenster, und verwenden Sie den folgenden Befehl:
git clone https://github.com/Azure-Samples/ms-identity-java-servlet-webapp-authentication.git
cd 1-Authentication/sign-in
Navigieren Sie alternativ zum Repository "ms-identity-java-servlet-webapp-authentication ", und laden Sie sie dann als .zip Datei herunter, und extrahieren Sie sie auf Ihre Festplatte.
Wichtig
Um Dateipfadlängenbeschränkungen für Windows zu vermeiden, klonen Oder extrahieren Sie das Repository in ein Verzeichnis in der Nähe des Stammverzeichnisses Ihrer Festplatte.
Registrieren der Beispielanwendung bei Ihrem Microsoft Entra ID-Mandanten
In diesem Beispiel gibt es ein Projekt. Um die App auf dem Azure-Portal zu registrieren, können Sie entweder manuelle Konfigurationsschritte ausführen oder ein PowerShell-Skript verwenden. Das Skript führt folgende Aufgaben aus:
- Erstellt die Microsoft Entra-ID-Anwendungen und verwandte Objekte, z. B. Kennwörter, Berechtigungen und Abhängigkeiten.
- Ändert die Projektkonfigurationsdateien.
- Richten Sie standardmäßig eine Anwendung ein, die nur mit Konten in Ihrem Organisationsverzeichnis funktioniert.
Führen Sie die folgenden Schritte aus, um das PowerShell-Skript auszuführen:
Öffnen Sie unter Windows PowerShell, und navigieren Sie zum Stammverzeichnis des geklonten Verzeichnisses.
Verwenden Sie den folgenden Befehl, um die Ausführungsrichtlinie für PowerShell festzulegen:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
Verwenden Sie die folgenden Befehle, um das Konfigurationsskript auszuführen:
cd .\AppCreationScripts\ .\Configure.ps1
Hinweis
Weitere Methoden zum Ausführen der Skripts werden in App-Erstellungsskripts beschrieben. Die Skripts bieten auch einen Leitfaden zur automatisierten Anwendungsregistrierung, Konfiguration und Entfernung, die in Ihren CI/CD-Szenarien hilfreich sein kann.
Konfigurieren der App für die Verwendung der App-Registrierung
Führen Sie die folgenden Schritte aus, um die App zu konfigurieren:
Hinweis
In den folgenden Schritten ClientID
ist identisch mit Application ID
oder AppId
.
Öffnen Sie das Projekt in Ihrer IDE.
Öffnen Sie die Datei ./src/Standard/resources/authentication.properties.
Suchen Sie die Zeichenfolge
{enter-your-tenant-id-here}
. Ersetzen Sie den vorhandenen Wert durch einen der folgenden Werte:- Ihre Microsoft Entra ID-Mandanten-ID, wenn Sie Ihre App mit den Konten in diesem Organisationsverzeichnis nur registriert haben.
- Das Wort
organizations
, wenn Sie Ihre App mit den Konten in einer beliebigen Organisationsverzeichnisoption registriert haben. - Das Wort
common
, wenn Sie Ihre App mit den Konten in einem beliebigen Organisationsverzeichnis und persönlichen Microsoft-Kontenoption registriert haben. - Das Wort
consumers
, wenn Sie Ihre App mit der Option "Persönliche Microsoft-Konten " registriert haben.
Suchen Sie die Zeichenfolge
{enter-your-client-id-here}
, und ersetzen Sie den vorhandenen Wert durch die Anwendungs-ID oderclientId
die Anwendung, diejava-servlet-webapp-authentication
aus der Azure-Portal kopiert wurde.Suchen Sie die Zeichenfolge
{enter-your-client-secret-here}
, und ersetzen Sie den vorhandenen Wert durch den Wert, den Sie während der Erstellung derjava-servlet-webapp-authentication
App gespeichert haben, im Azure-Portal.
Erstellen des Beispiels
Um das Beispiel mit Maven zu erstellen, navigieren Sie zu dem Verzeichnis, das die pom.xml Datei für das Beispiel enthält, und führen Sie dann den folgenden Befehl aus:
mvn clean package
Dieser Befehl generiert eine WAR-Datei , die Sie auf einer Vielzahl von Anwendungsservern ausführen können.
Bereitstellen des Beispiels
Bei diesen Anweisungen wird davon ausgegangen, dass Sie WebLogic installiert und einen Server eingerichtet haben Standard.
Bevor Sie webLogic bereitstellen können, führen Sie die folgenden Schritte aus, um einige Konfigurationsänderungen im Beispiel selbst vorzunehmen und dann das Paket zu erstellen oder neu zu erstellen:
Suchen Sie im Beispiel die Datei "application.properties" oder "authentication.properties ", in der Sie die Client-ID, den Mandanten, die Umleitungs-URL usw. konfiguriert haben.
Ändern Sie in dieser Datei Verweise auf
localhost:8080
oderlocalhost:8443
auf die URL und den Port, auf dem WebLogic ausgeführt wird. Dies sollte standardmäßig der Fall seinlocalhost:7001
.Außerdem müssen Sie dieselbe Änderung in der Azure-App-Registrierung vornehmen, bei der Sie sie im Azure-Portal als Umleitungs-URI-Wert auf der Registerkarte "Authentifizierung" festlegen.
Führen Sie die folgenden Schritte aus, um das Beispiel über die Webkonsole für WebLogic bereitzustellen:
Starten Sie den WebLogic-Server mit DOMAIN_NAME\bin\startWebLogic.cmd.
Navigieren Sie in Ihrem Browser zur WebLogic-Webkonsole unter
http://localhost:7001/console
.Wechseln Sie zu "Do Standard Strukturbereitstellungen>", wählen Sie "Installieren", wählen Sie "Dateien hochladen" aus, und suchen Sie dann die WAR-Datei, die Sie mit Maven erstellt haben.
Wählen Sie "Diese Bereitstellung als Anwendung installieren", wählen Sie "Weiter", dann "Fertig stellen" und dann "Speichern" aus.
Die meisten Standardeinstellungen sollten einwandfrei sein, mit der Ausnahme, dass Sie die Anwendung benennen sollten, um dem Umleitungs-URI zu entsprechen, den Sie in der Beispielkonfiguration oder azure-App-Registrierung festgelegt haben. Das heißt, wenn der Umleitungs-URI lautet
http://localhost:7001/msal4j-servlet-auth
, dann sollten Sie die Anwendungmsal4j-servlet-auth
benennen.Wechseln Sie zurück zu "Do Standard Strukturbereitstellungen>", und starten Sie Ihre Anwendung.
Navigieren Sie nach dem Start der Anwendung zu
http://localhost:7001/<application-name>/
, und Sie sollten auf die Anwendung zugreifen können.
Untersuchen des Beispiels
Führen Sie die folgenden Schritte aus, um das Beispiel zu erkunden:
- Beachten Sie den angemeldeten oder abgemeldeten Status, der in der Mitte des Bildschirms angezeigt wird.
- Wählen Sie in der Ecke die Schaltfläche "Kontextsensitiv" aus. Diese Schaltfläche liest die Anmeldung , wenn Sie die App zum ersten Mal ausführen.
- Folgen Sie auf der nächsten Seite den Anweisungen, und melden Sie sich mit einem Konto im Microsoft Entra ID-Mandanten an.
- Beachten Sie auf dem Zustimmungsbildschirm die bereiche, die angefordert werden.
- Beachten Sie, dass die Kontextsensitive Schaltfläche jetzt "Abmelden" anzeigt und Ihren Benutzernamen anzeigt.
- Wählen Sie ID-Tokendetails aus, um einige der decodierten Ansprüche des ID-Tokens anzuzeigen.
- Verwenden Sie die Schaltfläche in der Ecke, um sich abzumelden.
- Nachdem Sie sich abgemeldet haben, wählen Sie ID-Tokendetails aus, um zu beobachten, dass die App einen
401: unauthorized
Fehler anstelle der ID-Tokenansprüche anzeigt, wenn der Benutzer nicht autorisiert ist.
Informationen zum Code
In diesem Beispiel wird gezeigt, wie Sie MSAL für Java (MSAL4J) verwenden, um Benutzer bei Ihrem Microsoft Entra ID-Mandanten anzumelden. Wenn Sie MSAL4J in Ihren eigenen Anwendungen verwenden möchten, müssen Sie es zu Ihren Projekten mit Maven hinzufügen.
Wenn Sie das Verhalten dieses Beispiels replizieren möchten, können Sie die pom.xml Datei und den Inhalt der Hilfs- und Authentifizierungsordner im Ordner "src/Standard/java/com/microsoft/azuresamples/msal4j" kopieren. Außerdem benötigen Sie die Datei "authentication.properties ". Diese Klassen und Dateien enthalten generischen Code, den Sie in einer breiten Palette von Anwendungen verwenden können. Sie können auch den Rest des Beispiels kopieren, aber die anderen Klassen und Dateien werden speziell für das Ziel dieses Beispiels erstellt.
Contents
Die folgende Tabelle zeigt den Inhalt des Beispielprojektordners:
Datei/Ordner | Beschreibung |
---|---|
AppCreationScripts/ | Skripts zum automatischen Konfigurieren von Microsoft Entra ID-App-Registrierungen. |
src/Standard/java/com/microsoft/azuresamples/msal4j/authwebapp/ | Dieses Verzeichnis enthält die Klassen, die die Back-End-Geschäftslogik der App definieren. |
src/Standard/java/com/microsoft/azuresamples/msal4j/authservlets/ | Dieses Verzeichnis enthält die Klassen, die für Anmelde- und Abmeldeendpunkte verwendet werden. |
____Servlet.java | Alle verfügbaren Endpunkte werden in .java Klassen definiert, die auf ____Servlet.java enden. |
src/Standard/java/com/microsoft/azuresamples/msal4j/helpers/ | Hilfsklassen für die Authentifizierung. |
AuthenticationFilter.java | Leitet nicht authentifizierte Anforderungen an geschützte Endpunkte auf eine 401-Seite um. |
src/Standard/resources/authentication.properties | Microsoft Entra ID und Programmkonfiguration. |
src/Standard/webapp/ | Dieses Verzeichnis enthält die Benutzeroberfläche – JSP-Vorlagen |
CHANGELOG.md | Liste der Änderungen am Beispiel. |
CONTRIBUTING.md | Richtlinien für einen Beitrag zur Stichprobe. |
LIZENZ | Die Lizenz für das Beispiel. |
ConfidentialClientApplication
Eine ConfidentialClientApplication
Instanz wird in der datei AuthHelper.java erstellt, wie im folgenden Beispiel gezeigt. Dieses Objekt hilft beim Erstellen der Microsoft Entra ID-Autorisierungs-URL und hilft auch beim Austauschen des Authentifizierungstokens für ein Zugriffstoken.
// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.authority(AUTHORITY)
.build();
Die folgenden Parameter werden für die Instanziierung verwendet:
- Die Client-ID der App.
- Der geheime Clientschlüssel, der eine Anforderung für vertrauliche Clientanwendungen ist.
- Die Microsoft Entra ID Authority, die Ihre Microsoft Entra ID-Mandanten-ID enthält.
In diesem Beispiel werden diese Werte aus der Datei "authentication.properties " mithilfe eines Eigenschaftenlesers in der datei Config.java gelesen.
Ausführliche exemplarische Vorgehensweise
Die folgenden Schritte bieten eine exemplarische Vorgehensweise für die Funktionalität der App:
Der erste Schritt des Anmeldevorgangs besteht darin, eine Anforderung an den
/authorize
Endpunkt für Ihren Microsoft Entra ID-Mandanten zu senden. Die MSAL4J-InstanzConfidentialClientApplication
wird verwendet, um eine Autorisierungsanforderungs-URL zu erstellen. Die App leitet den Browser zu dieser URL um, wo sich der Benutzer anmeldet.final ConfidentialClientApplication client = getConfidentialClientInstance(); AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES)) .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString(); contextAdapter.redirectUser(authorizeUrl);
In der folgenden Liste werden die Features dieses Codes beschrieben:
AuthorizationRequestUrlParameters
: Parameter, die festgelegt werden müssen, um eine AuthorizationRequestUrl zu erstellen.REDIRECT_URI
: Wo die Microsoft Entra-ID den Browser zusammen mit dem Authentifizierungscode umleitet, nachdem die Benutzeranmeldeinformationen gesammelt wurden. Sie muss mit dem Umleitungs-URI in der Microsoft Entra ID-App-Registrierung im Azure-Portal übereinstimmen.SCOPES
: Bereiche sind Berechtigungen, die von der Anwendung angefordert werden. Normalerweise reichen die drei Bereicheopenid profile offline_access
für den Empfang einer ID-Tokenantwort aus.Eine vollständige Liste der Bereiche, die von der App angefordert werden, finden Sie in der Datei "authentication.properties ". Sie können weitere Bereiche hinzufügen, z
User.Read
. B. .
Microsoft Entra ID zeigt der*dem Benutzer*in eine Anmeldeeingabeaufforderung an. Wenn der Anmeldeversuch erfolgreich ist, wird der Browser des Benutzers an den Umleitungsendpunkt der App umgeleitet. Eine gültige Anforderung an diesen Endpunkt enthält einen Autorisierungscode.
Anschließend wechselt die
ConfidentialClientApplication
Instanz diesen Autorisierungscode für ein ID-Token und Zugriffstoken aus der Microsoft Entra-ID.// First, validate the state, then parse any error codes in response, then extract the authCode. Then: // build the auth code params: final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build(); // Get a client instance and leverage it to acquire the token: final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance(); final IAuthenticationResult result = client.acquireToken(authParams).get();
In der folgenden Liste werden die Features dieses Codes beschrieben:
AuthorizationCodeParameters
: Parameter, die festgelegt werden müssen, um den Autorisierungscode für eine ID und/oder ein Zugriffstoken auszutauschen.authCode
: Der Autorisierungscode, der am Umleitungsendpunkt empfangen wurde.REDIRECT_URI
: Der im vorherigen Schritt verwendete Umleitungs-URI muss erneut übergeben werden.SCOPES
: Die im vorherigen Schritt verwendeten Bereiche müssen erneut übergeben werden.
Wenn
acquireToken
erfolgreich ausgeführt wird, werden die Tokenansprüche extrahiert. Wenn die Nonce-Prüfung erfolgreich ist, werden die Ergebnisse -context
eine Instanz vonIdentityContextData
- in der Sitzung gespeichert. Die Anwendung kann die Anwendung dann über eine InstanzIdentityContextAdapterServlet
instanziierenIdentityContextData
, wenn sie darauf zugreifen muss, wie im folgenden Code gezeigt:// parse IdToken claims from the IAuthenticationResult: // (the next step - validateNonce - requires parsed claims) context.setIdTokenClaims(result.idToken()); // if nonce is invalid, stop immediately! this could be a token replay! // if validation fails, throws exception and cancels auth: validateNonce(context); // set user to authenticated: context.setAuthResult(result, client.tokenCache().serialize());
Schützen der Routen
Informationen dazu, wie die Beispiel-App den Zugriff auf Routen filtert, finden Sie unter AuthenticationFilter.java. In der Datei "authentication.properties " enthält die app.protect.authenticated
Eigenschaft die durch Trennzeichen getrennten Routen, auf die nur authentifizierte Benutzer zugreifen können, wie im folgenden Beispiel gezeigt:
# for example, /token_details requires any user to be signed in and does not require special roles claim(s)
app.protect.authenticated=/token_details
Bereiche
Bereiche teilen Microsoft Entra-ID mit, welche Zugriffsebene die Anwendung anfordert.
Basierend auf den angeforderten Bereichen stellt die Microsoft Entra-ID dem Benutzer bei der Anmeldung einen Zustimmungsdialog vor. Wenn der Benutzer einem oder mehreren Bereichen zustimmt und ein Token abruft, werden die Bereiche, die zugestimmt haben, in das resultierende access_token
codiert.
Die von der Anwendung angeforderten Bereiche finden Sie unter "authentication.properties". Diese drei Bereiche werden von MSAL angefordert und standardmäßig von Microsoft Entra ID angegeben.
Weitere Informationen
- MSAL (Microsoft Authentication Library) für Java
- MSAL Java-Referenzdokumentation
- Microsoft Identity Platform (Microsoft Entra-ID für Entwickler)
- Schnellstart: Registrieren einer Anwendung bei Microsoft Identity Platform
- Grundlegendes zur Zustimmung der Microsoft Entra-ID-Anwendung
- Grundlegendes zur Benutzer- und Administratoreinwilligung
- MSAL-Codebeispiele
Nächster Schritt
Bereitstellen von Java WebLogic-Apps in WebLogic auf virtuellen Azure-Computern
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für