Aktivieren der Anmeldung für Java JBoss EAP-Apps mit MSAL4J mit Azure Active Directory B2C
In diesem Artikel wird eine Java-JBoss-EAP-Anwendung veranschaulicht, die Benutzer bei Azure Active Directory B2C (Azure AD B2C) mithilfe der Microsoft Authentication Library for Java (MSAL4J) authentifiziert.
Das folgende Diagramm zeigt die Topologie der App:
Die App verwendet MSAL4J, um Benutzer anzumelden und ein ID-Token von Azure AD B2C abzurufen. Das ID-Token beweist, dass der Benutzer bei einem Azure AD B2C-Mandanten authentifiziert wird.
Voraussetzungen
- JDK Version 8 oder höher
- Maven 3
- Einen Azure AD B2C-Mandanten. Weitere Informationen finden Sie im Lernprogramm: Erstellen eines Azure Active Directory B2C-Mandanten
- Ein Benutzerkonto in Ihrem Azure AD B2C-Mandanten.
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-msal-java-samples.git
cd 3-java-servlet-web-app/1-Authentication/sign-in-b2c
Navigieren Sie alternativ zum Repository "ms-identity-msal-java-samples ", 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 Azure AD B2C-Mandanten
Das Beispiel enthält eine vorab registrierte Anwendung zu Testzwecken. Wenn Sie Ihren eigenen Azure AD B2C-Mandanten und Ihre eigene Anwendung verwenden möchten, führen Sie die Schritte in den folgenden Abschnitten aus, um die Anwendung im Azure-Portal zu registrieren und zu konfigurieren. Fahren Sie andernfalls mit den Schritten zum Ausführen des Beispiels fort.
Wählen Sie den Azure AD B2C-Mandanten aus, in dem Sie Ihre Anwendungen erstellen möchten.
Führen Sie die folgenden Schritte aus, um Ihren Mandanten auszuwählen:
Melden Sie sich beim Azure-Portal an.
Wenn Ihr Konto in mehr als einem Azure AD B2C-Mandanten vorhanden ist, wählen Sie Ihr Profil in der Ecke des Azure-Portal aus, und wählen Sie dann "Verzeichnis wechseln" aus, um Ihre Sitzung in den gewünschten Azure AD B2C-Mandanten zu ändern.
Erstellen von Benutzerflüssen und benutzerdefinierten Richtlinien
Informationen zum Erstellen allgemeiner Benutzerflüsse wie Registrierung, Anmeldung, Profilbearbeitung und Kennwortzurücksetzung finden Sie im Lernprogramm: Erstellen von Benutzerflüssen in Azure Active Directory B2C.
Sie sollten auch das Erstellen von benutzerdefinierten Richtlinien in Azure Active Directory B2C in Betracht ziehen, dies liegt jedoch außerhalb des Umfangs dieses Lernprogramms.
Hinzufügen externer Identitätsanbieter
Siehe Lernprogramm: Hinzufügen von Identitätsanbietern zu Ihren Anwendungen in Azure Active Directory B2C.
Registrieren der App (ms-identity-b2c-java-servlet-webapp-authentication)
Führen Sie die folgenden Schritte aus, um die App zu registrieren:
Navigieren Sie zum Azure-Portal, und wählen Sie Azure AD B2C aus.
Wählen Sie im Navigationsbereich "App-Registrierungen" und dann "Neue Registrierung" aus.
Geben Sie auf der angezeigten Seite "Anwendung registrieren" die folgenden Anwendungsregistrierungsinformationen ein:
- Geben Sie im Abschnitt "Name " einen aussagekräftigen Anwendungsnamen ein, der Benutzern der App angezeigt werden soll ,
ms-identity-b2c-java-servlet-webapp-authentication
z. B. . - Wählen Sie unter Unterstützte Kontotypen die Option Konten in allen Organisationsverzeichnissen und persönliche Microsoft-Konten (z.B. Skype, Xbox, Outlook.com) aus.
- Wählen Sie im Abschnitt "Umleitungs-URI (optional)" im Kombinationsfeld "Web" aus, und geben Sie den folgenden Umleitungs-URI ein:
http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_redirect
- Geben Sie im Abschnitt "Name " einen aussagekräftigen Anwendungsnamen ein, der Benutzern der App angezeigt werden soll ,
Wählen Sie Registrieren aus, um die Anwendung zu erstellen.
Suchen Und kopieren Sie auf der Registrierungsseite der App den Wert der Anwendungs-ID (Client-ID ), die Sie später verwenden möchten. Sie verwenden diesen Wert in der Konfigurationsdatei oder -dateien Ihrer App.
Wählen Sie Speichern aus, um Ihre Änderungen zu speichern.
Wählen Sie auf der Registrierungsseite der App im Navigationsbereich zertifikate und geheime Schlüssel aus, um die Seite zu öffnen, auf der Sie Geheime Schlüssel generieren und Zertifikate hochladen können.
Wählen Sie im Abschnitt Geheime Clientschlüssel die Option Neuer geheimer Clientschlüssel aus.
Geben Sie eine Beschreibung ein, z. B. den geheimen App-Schlüssel.
Wählen Sie eine der verfügbaren Dauer aus: In 1 Jahr, in 2 Jahren oder nie abläuft.
Wählen Sie Hinzufügen. Der generierte Wert wird angezeigt.
Kopieren und speichern Sie den generierten Wert für die Verwendung in späteren Schritten. Sie benötigen diesen Wert für die Konfigurationsdateien Ihres Codes. Dieser Wert wird nicht mehr angezeigt, und Sie können ihn nicht auf andere Weise abrufen. Achten Sie daher darauf, sie aus dem Azure-Portal zu speichern, bevor Sie zu einem anderen Bildschirm oder Bereich navigieren.
Konfigurieren der App (ms-identity-b2c-java-servlet-webapp-authentication) 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/main/resources/authentication.properties .
Suchen Sie die
aad.clientId
Eigenschaft, und ersetzen Sie den vorhandenen Wert durch die Anwendungs-ID oderclientId
diems-identity-b2c-java-servlet-webapp-authentication
Anwendung aus dem Azure-Portal.Suchen Sie die
aad.secret
Eigenschaft, und ersetzen Sie den vorhandenen Wert durch den Wert, den Sie während der Erstellung derms-identity-b2c-java-servlet-webapp-authentication
Anwendung aus dem Azure-Portal gespeichert haben.Suchen Sie die Eigenschaft, und ersetzen Sie die
aad.scopes
vorhandene AnwendungsclientId durch den Wert, den Sie in Schritt 1 dieses Abschnitts eingefügtaad.clientId
haben.Suchen Sie die
aad.authority
Eigenschaft, und ersetzen Sie die erste Instanzfabrikamb2c
durch den Namen des Azure AD B2C-Mandanten, in dem Sie diems-identity-b2c-java-servlet-webapp-authentication
Anwendung im Azure-Portal erstellt haben.Suchen Sie die
aad.authority
Eigenschaft, und ersetzen Sie die zweite Instanzfabrikamb2c
durch den Namen des Azure AD B2C-Mandanten, in dem Sie diems-identity-b2c-java-servlet-webapp-authentication
Anwendung im Azure-Portal erstellt haben.Suchen Sie die
aad.signInPolicy
Eigenschaft, und ersetzen Sie sie durch den Namen der Registrierungs-/Anmelde-Benutzerflussrichtlinie, die Sie im Azure AD B2C-Mandanten erstellt haben, in dem Sie diems-identity-b2c-java-servlet-webapp-authentication
Anwendung im Azure-Portal erstellt haben.Suchen Sie die
aad.passwordResetPolicy
Eigenschaft, und ersetzen Sie sie durch den Namen der Richtlinie zum Zurücksetzen des Benutzerflusses, die Sie im Azure AD B2C-Mandanten erstellt haben, in dem Sie diems-identity-b2c-java-servlet-webapp-authentication
Anwendung im Azure-Portal erstellt haben.Suchen Sie die
aad.editProfilePolicy
Eigenschaft, und ersetzen Sie sie durch den Namen der Edit Profile User-Flow-Richtlinie, die Sie im Azure AD B2C-Mandanten erstellt haben, in dem Sie diems-identity-b2c-java-servlet-webapp-authentication
Anwendung im Azure-Portal erstellt haben.
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 verschiedenen Anwendungsservern ausführen können.
Ausführen des Beispiels
In den folgenden Abschnitten wird gezeigt, wie Sie das Beispiel für Azure-App Dienst bereitstellen.
Voraussetzungen
Maven-Plug-In für Azure-App Service-Apps
Wenn Maven nicht Ihr bevorzugtes Entwicklungstool ist, lesen Sie die folgenden ähnlichen Lernprogramme, die andere Tools verwenden:
Konfigurieren des Maven-Plug-Ins
Der Bereitstellungsprozess für Azure App Service verwendet automatisch Ihre Azure-Anmeldeinformation aus der Azure CLI. Wenn die Azure CLI nicht lokal installiert ist, führt das Maven-Plug-In die Authentifizierung über OAuth oder die Geräteanmeldung durch. Weitere Informationen finden Sie unter Authentifizierung mit Maven-Plug-Ins.
Führen Sie die folgenden Schritte aus, um das Plug-In zu konfigurieren:
Führen Sie den als nächstes gezeigten Maven-Befehl aus, um die Bereitstellung zu konfigurieren. Dieser Befehl unterstützt Sie beim Einrichten des App Service-Betriebssystems, der Java-Version und der Tomcat-Version.
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
Drücken Sie für die Konfiguration "Neue Ausführung erstellen" Y, und drücken Sie dann die EINGABETASTE.
Drücken Sie zum Definieren des Werts für das Betriebssystem 2 für Linux, und drücken Sie dann die EINGABETASTE.
Drücken Sie für "Define value for javaVersion" 2 für Java 11, und drücken Sie dann die EINGABETASTE.
Drücken Sie für "Wert definieren" für "webContainer" 1 für JBosseap7, und drücken Sie dann die EINGABETASTE.
Drücken Sie zum Definieren des Werts für "pricingTier" die EINGABETASTE, um die Standardebene "P1v3" auszuwählen.
Drücken Sie für "Bestätigen" Y, und drücken Sie dann die EINGABETASTE.
Das folgende Beispiel zeigt die Ausgabe des Bereitstellungsprozesses:
Please confirm webapp properties
AppName : msal4j-servlet-auth-1707220080695
ResourceGroup : msal4j-servlet-auth-1707220080695-rg
Region : centralus
PricingTier : P1v3
OS : Linux
Java Version: Java 11
Web server stack: JBosseap 7
Deploy to slot : false
Confirm (Y/N) [Y]:
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.196 s
[INFO] Finished at: 2024-02-06T11:48:16Z
[INFO] ------------------------------------------------------------------------
Nachdem Sie Ihre Auswahl bestätigt haben, fügt das Plug-In die Plug-In-Konfiguration und die erforderlichen Einstellungen zur pom.xml Datei Ihres Projekts hinzu, um Ihre App so zu konfigurieren, dass sie in Azure-App Dienst ausgeführt wird.
Der relevante Teil der pom.xml Datei sollte dem folgenden Beispiel ähneln:
<build>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>>azure-webapp-maven-plugin</artifactId>
<version>x.xx.x</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<resourceGroup>your-resourcegroup-name</resourceGroup>
<appName>your-app-name</appName>
...
</configuration>
</plugin>
</plugins>
</build>
Sie können die Konfigurationen für App Service direkt in Ihrem pom.xml ändern. Einige gängige Konfigurationen sind in der folgenden Tabelle aufgeführt:
Eigenschaft | Erforderlich | Beschreibung | Version |
---|---|---|---|
schemaVersion |
false | Die Version des Konfigurationsschemas. Unterstützte Werte: v1 und v2 . |
1.5.2 |
subscriptionId |
false | Die Abonnement-ID. | 0.1.0+ |
resourceGroup |
true | Die Azure-Ressourcengruppe für Ihre App. | 0.1.0+ |
appName |
true | Der Name Ihrer App. | 0.1.0+ |
region |
false | Die Region, in der Ihre App gehostet werden soll. Der Standardwert ist centralus . Gültige Regionen finden Sie unter "Unterstützte Regionen". |
0.1.0+ |
pricingTier |
false | Das Preisniveau für Ihre App. Der Standardwert ist P1v2 für eine Produktionsauslastung. Der empfohlene Mindestwert für die Java-Entwicklung und -Tests ist B2 . Weitere Informationen finden Sie unter App Service – Preise. |
0.1.0+ |
runtime |
false | Die Laufzeitumgebungskonfiguration. Weitere Informationen finden Sie unter Konfigurationsdetails. | 0.1.0+ |
deployment |
false | Die Bereitstellungskonfiguration. Weitere Informationen finden Sie unter Konfigurationsdetails. | 0.1.0+ |
Eine vollständige Liste der Konfigurationen finden Sie in der Dokumentation zur Plug-In-Referenz. Alle Azure Maven-Plug-Ins teilen einen gemeinsamen Satz von Konfigurationen. Informationen zu diesen Konfigurationen finden Sie unter "Allgemeine Konfigurationen". Konfigurationen, die für Azure-App Dienst spezifisch sind, finden Sie unter Azure-App: Konfigurationsdetails.
Achten Sie darauf, die Werte für resourceGroup
die appName
spätere Verwendung beiseite zu speichern.
Vorbereiten der App für die Bereitstellung
Wenn Sie Ihre Anwendung im App-Dienst bereitstellen, ändert sich ihre Umleitungs-URL in die Umleitungs-URL Ihrer bereitgestellten App-Instanz. Führen Sie die folgenden Schritte aus, um diese Einstellungen in der Eigenschaftendatei zu ändern:
Navigieren Sie zur Datei "authentication.properties" Ihrer App, und ändern Sie den Wert des
app.homePage
Domänennamens Ihrer bereitgestellten App, wie im folgenden Beispiel gezeigt. Wenn Sie z. B. im vorherigen Schritt den App-Namen ausgewählt habenexample-domain
, müssen Sie jetzt denapp.homePage
Wert verwendenhttps://example-domain.azurewebsites.net
. Stellen Sie sicher, dass Sie das Protokoll auch von "inhttp
https
" geändert haben.# app.homePage is by default set to dev server address and app context path on the server # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net app.homePage=https://<your-app-name>.azurewebsites.net
Verwenden Sie nach dem Speichern dieser Datei den folgenden Befehl, um Ihre App neu zu erstellen:
mvn clean package
Wichtig
In derselben Datei "authentication.properties " haben Sie eine Einstellung für Ihre aad.secret
. Es empfiehlt sich nicht, diesen Wert für App Service bereitzustellen. Ebenso wenig ist es eine bewährte Methode, diesen Wert in Ihrem Code zu belassen und ihn möglicherweise an Ihr Git-Repository zu übertragen. Wenn Sie diesen geheimen Wert aus Ihrem Code entfernen möchten, finden Sie ausführlichere Anleitungen im Abschnitt "Deploy to App Service – Remove secret ". Diese Anleitung fügt zusätzliche Schritte zum Pushen des geheimen Werts an Key Vault und zum Verwenden von Key Vault-Verweisen hinzu.
Aktualisieren Ihrer Microsoft Entra ID-App-Registrierung
Da sich der Umleitungs-URI an Ihre bereitgestellte App in Azure-App Dienst ändert, müssen Sie auch den Umleitungs-URI in Ihrer Microsoft Entra ID-App-Registrierung ändern. Durchlaufen Sie folgende Schritte, um diese Änderung wirksam zu machen:
Navigieren Sie zur Seite App-Registrierungen von Microsoft Identity Platform für Entwickler.
Verwenden Sie das Suchfeld, um nach Ihrer App-Registrierung zu suchen ,
java-servlet-webapp-authentication
z. B. .Öffnen Sie die App-Registrierung, indem Sie den Namen auswählen.
Wählen Sie im oberen Menü Authentifizierung aus.
Wählen Sie im Abschnitt "Webumleitungs-URIs - " die Option "URI hinzufügen" aus.
Füllen Sie den URI Ihrer App aus,
https://<your-app-name>.azurewebsites.net/auth/redirect
z. B. anfügen/auth/redirect
.Wählen Sie Speichern.
Bereitstellen der App
Sie können Ihre App jetzt für Azure-App Dienst bereitstellen. Verwenden Sie den folgenden Befehl, um sicherzustellen, dass Sie bei Ihrer Azure-Umgebung angemeldet sind, um die Bereitstellung auszuführen:
az login
Wenn alle Konfigurationen in Ihrer pom.xml-Datei bereit sind, können Sie jetzt den folgenden Befehl verwenden, um Ihre Java-App in Azure bereitzustellen:
mvn package azure-webapp:deploy
Nach Abschluss der Bereitstellung ist Ihre Anwendung bereit unter http://<your-app-name>.azurewebsites.net/
. Öffnen Sie die URL mit Ihrem lokalen Webbrowser, in dem die Startseite der msal4j-servlet-auth
Anwendung angezeigt werden soll.
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 Ihres ausgewählten Identitätsanbieters an.
- 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.
- Sie haben auch die Möglichkeit, Ihr Profil zu bearbeiten. Wählen Sie den Link aus, um Details wie Ihren Anzeigenamen, Ihren Aufenthaltsort und Ihren Beruf zu bearbeiten.
- Verwenden Sie die Schaltfläche in der Ecke, um sich abzumelden.
- Navigieren Sie nach dem Abmelden zur folgenden URL für die Tokendetailseite:
http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_token_details
. Hier können Sie beobachten, wie die App anstelle der ID-Tokenansprüche einen401: unauthorized
Fehler anzeigt.
Informationen zum Code
In diesem Beispiel wird die Verwendung von MSAL4J zum Anmelden von Benutzern bei Ihrem Azure AD B2C-Mandanten veranschaulicht.
Contents
Die folgende Tabelle zeigt den Inhalt des Beispielprojektordners:
Datei/Ordner | Beschreibung |
---|---|
AuthHelper.java | Hilfsfunktionen für die Authentifizierung. |
Config.java | Wird beim Start ausgeführt und konfiguriert eigenschaftenleser und Logger. |
authentication.properties | Microsoft Entra ID und Programmkonfiguration. |
AuthenticationFilter.java | Leitet nicht authentifizierte Anforderungen an geschützte Ressourcen auf eine 401-Seite um. |
MsalAuthSession | Instanziiert mit einem HttpSession . Speichert alle MSAL-bezogenen Sitzungsattribute im Sitzungsattribut. |
____Servlet.java | Alle verfügbaren Endpunkte werden in .java Klassen definiert, die auf ____Servlet.java enden. |
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 Azure AD B2C-Autorisierungs-URL und hilft auch beim Austauschen des Authentifizierungstokens für ein Zugriffstoken.
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.b2cAuthority(AUTHORITY + policy)
.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 Azure AD B2C Authority verkettet sich mit der geeigneten
UserFlowPolicy
Option für die Registrierung, Anmeldung, Profilbearbeitung oder Kennwortzurücksetzung.
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 Azure Active Directory B2C-Mandanten zu senden. Die MSAL4J-InstanzConfidentialClientApplication
wird verwendet, um eine Autorisierungsanforderungs-URL zu erstellen, und die App leitet den Browser zu dieser URL um, wie im folgenden Beispiel gezeigt:final ConfidentialClientApplication client = getConfidentialClientInstance(policy); final AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters .builder(REDIRECT_URI, Collections.singleton(SCOPES)).responseMode(ResponseMode.QUERY) .prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String redirectUrl = client.getAuthorizationRequestUrl(parameters).toString(); Config.logger.log(Level.INFO, "Redirecting user to {0}", redirectUrl); resp.setStatus(302); resp.sendRedirect(redirectUrl);
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 Azure AD B2C den Browser zusammen mit dem Authentifizierungscode umleitet, nachdem die Benutzeranmeldeinformationen gesammelt wurden.SCOPES
: Bereiche sind Berechtigungen, die von der Anwendung angefordert werden.Normalerweise reichen die drei Bereiche
openid profile offline_access
für den Empfang einer ID-Tokenantwort aus. MSAL4J erfordert jedoch alle Antworten von Azure AD B2C, um auch ein Zugriffstoken zu enthalten.Damit Azure AD B2C ein Zugriffstoken sowie ein ID-Token ausgibt, muss die Anforderung einen zusätzlichen Ressourcenbereich enthalten. Da für diese App kein externer Ressourcenbereich erforderlich ist, fügt sie eine eigene Client-ID als vierten Bereich hinzu, um ein Zugriffstoken zu erhalten.
Eine vollständige Liste der Bereiche, die von der App angefordert werden, finden Sie in der Datei "authentication.properties ".
ResponseMode.QUERY
: Azure AD B2C kann die Antwort als Formularparameter in einer HTTP POST-Anforderung oder als Abfragezeichenfolgenparameter in einer HTTP GET-Anforderung zurückgeben.Prompt.SELECT_ACCOUNT
: Azure AD B2C sollte den Benutzer bitten, das Konto auszuwählen, für das er sich authentifizieren möchte.state
: Eine eindeutige Variable, die von der App in die Sitzung in jeder Tokenanforderung festgelegt und nach Erhalt des entsprechenden Azure AD B2C-Umleitungsrückrufs zerstört wurde. Die Statusvariable stellt sicher, dass Azure AD B2C-Anforderungen/auth_redirect endpoint
tatsächlich von Azure AD B2C-Autorisierungsanforderungen stammen, die von dieser App und dieser Sitzung stammen, wodurch CSRF-Angriffe verhindert werden. Dies geschieht in der datei AADRedirectServlet.java .nonce
: Eine eindeutige Variable, die von der App in die Sitzung in jeder Tokenanforderung festgelegt und nach erhalt des entsprechenden Tokens zerstört wird. Diese Nonce wird an die resultierenden Token verteilt Azure AD B2C transkribiert, wodurch sichergestellt wird, dass kein Token-Replay-Angriff auftritt.
Dem Benutzer wird eine Anmeldeaufforderung von Azure Active Directory B2C angezeigt. 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 Azure Active Directory B2C, wie im folgenden Beispiel gezeigt:final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(REDIRECT_URI)) .scopes(Collections.singleton(SCOPES)).build(); final ConfidentialClientApplication client = AuthHelper .getConfidentialClientInstance(policy); final Future<IAuthenticationResult> future = client.acquireToken(authParams); final IAuthenticationResult result = future.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
die Tokenansprüche erfolgreich sind, werden die Tokenansprüche extrahiert, und der Nonce-Anspruch wird anhand der in der Sitzung gespeicherten Nonce überprüft, wie im folgenden Beispiel gezeigt:parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache); validateNonce(msalAuth) processSuccessfulAuthentication(msalAuth);
Wenn die Nonce erfolgreich überprüft wird, wird der Authentifizierungsstatus in eine serverseitige Sitzung eingefügt, wobei Methoden genutzt werden, die von der
MsalAuthSession
Klasse verfügbar gemacht werden, wie im folgenden Beispiel gezeigt:msalAuth.setAuthenticated(true); msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
Weitere Informationen
- Was ist Azure Active Directory B2C?
- Anwendungstypen, die in Active Directory B2C verwendet werden können
- Empfehlungen und bewährte Methoden für Azure Active Directory B2C
- Azure AD B2C-Sitzung
- MSAL (Microsoft Authentication Library) für Java
Weitere Informationen zur Funktionsweise von OAuth 2.0-Protokollen in diesem Szenario und anderen Szenarien finden Sie unter Authentifizierungsszenarien für Microsoft Entra ID.