[JAVA] Melden Sie sich bei Spring Boot-Webanwendungen auf der Microsoft ID-Plattform an

Überblick

Die offizielle Dokumentation von Microsoft ist verwirrend, und Bibliotheksaktualisierungen halten nicht Schritt, sodass es schwierig ist, sich ab dem letzten Spring Boot mit einem Azure AD-Konto [^ 1] anzumelden. Hier finden Sie eine Zusammenfassung der Vorgänge bei der Implementierung der Anmeldung.

--Spring Boot Starter für Azure AD kann nicht so gestartet werden, wie es ist

Voraussetzungen

[Azure AD Spring Boot Starter-Clientbibliothek für Java (2.3.5)](https://github.com/Azure/azure-sdk-for-java/tree/407b4e0bffbb75b461c0512e669a6d43376fa7ab/sdk/spring/azure-spring-boot-starter -aktives-Verzeichnis)

Ich denke, diese Bibliothek [^ 3] ist die erste, die getroffen wird. Dies ist ein von Microsoft geführtes Projekt. Da die Funktionen des Oauth2-Clients von Spring Boot / Spring Security verwendet werden, gibt es weniger Einstellungselemente und Implementierungsbereiche als andere Optionen. Dokumente zur Integration zwischen Azure AD und Spring sind an verschiedenen Stellen auf der Microsoft-Website verteilt, derzeit jedoch Github-Dokumente. Siehe Baum / 407b4e0bffbb75b461c0512e669a6d43376fa7ab / sdk / spring / azure-spring-boot-Starter-Aktivverzeichnis). Es sollte die neueste Beschreibung sein. Das in diesem Artikel behandelte Hauptszenario ist der Backend-Authentifizierungsablauf (https://github.com/Azure/azure-sdk-for-java/tree/407b4e0bffbb75b461c0512e669a6d43376fa7ab/sdk/spring/azure-spring- Boot-Starter-Aktivverzeichnis # Autorisierung-Code-Modus-Verwendung).

Wir werden mit der Arbeit fortfahren, die auf diesem Dokument basiert, aber ** Derzeit funktioniert es nicht mit den Einstellungen gemäß ReadMe → Es wurde basierend auf dem Bericht korrigiert, aber bitte warten Sie, bis es in maven wiedergegeben wird **.

Ich habe auch den Grund auf GitHub gemeldet herausgefunden, aber aufgrund der Abhängigkeit von Spring Boot 2.3.5 Die Version von nimbus-jose-jwt, von der AAD-Starter abhängt, wurde aktualisiert und kann nicht gestartet werden. Dies geschieht seit 8.10 in nimbus-jose-jwt, da dem defaultJWKSetCache-Konstruktor ein Argument hinzugefügt wurde, um den Aktualisierungszyklus anzugeben. Zunächst werden wir uns damit befassen.

Überschreiben Sie die Einstellungen von AADAuthenticationFilterAutoConfiguration, um bootfähig zu sein

Glücklicherweise liegt die Ursache für diesen Fehler in der Bean-Definition von AutoConfig, sodass es möglich ist, ihn zur Laufzeit zu beheben. (Der Quellcode für dieses Problem wurde beim Schreiben des Artikels behoben.) Es ist hier nicht gut, die nimbus-jose-jwt-Version zu senken, um sie zu unterstützen, aber sie zu beheben und zu verwenden. Um AAD-Starter zu verwenden, erben Sie im Grunde WebSecurityConfigurerAdapter und schreiben Config. Überschreiben Sie daher die alte Bean-Definition dort.

AADOAuth2LoginConfig.java


/*Kommentarteil zum ReadMe-Beispiel hinzugefügt*/

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AADOAuth2LoginConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService;

    //Injizieren Sie die Konfigurationseigenschaften
    @Autowired
    private AADAuthenticationProperties aadAuthProps;


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .oauth2Login()
            .userInfoEndpoint()
            .oidcUserService(oidcUserService);
    }

    //Bean-Definition, die die Problemeinstellung überschreibt
    @Bean
    public JWKSetCache getJWKSetCache() {
        long lifespan = aadAuthenticationProperties.getJwkSetCacheLifespan();
        return new DefaultJWKSetCache(lifespan, lifespan, TimeUnit.MILLISECONDS);
    }
}

Diese Bean-Definition gibt das gleiche Verhalten wie vor dem Upgrade wieder, enthält jedoch einige Probleme. Da die Cache-Lebensdauer und der Aktualisierungszyklus gleich sind, können zur Laufzeit unregelmäßige Fehler auftreten [^ 4]. Um dies zu lösen, müssen Sie das zweite Argument von DefaultJWKSetCache auf eine Zahl setzen, die kleiner als das erste Argument ist, und Sie müssen die Eigenschaft selbst erstellen oder in Ihrem Code angeben. Es scheint auch, dass der Konstruktor ohne Argumente eine Lebensdauer von 15 Minuten und einen Aktualisierungszyklus von 5 Minuten hat. Wenn also kein Problem mit diesem Zyklus auftritt, können Sie den Konstruktor ohne Argumente verwenden.

Registrieren Sie die App bei Arue

Dies funktioniert grundsätzlich gut mit den dokumentierten Einstellungen.

Es ist wichtig zu beachten, dass die Umleitungs-URL die Spring Security-Standardeinstellung "{baseURL} / login / oauth2 / code / azure" sein muss. Ich habe das Gefühl, ich könnte es in den Eigenschaften von Spring Security ändern, aber es ist mir nicht gelungen. [^ 5]

Und eine andere wichtige Sache ist ** Zugriff auf die API, die der App gegeben wurde **. Dies ist eine vollständige Falle, aber für den Inhalt des Dokuments ** sind Azure AD Graph-Berechtigungen ** erforderlich, keine MicroSoft Graph-Berechtigungen. 許可するAPI.png

Auf dem aktuellen Azure-Webbildschirm befindet sich die Anzeige von Azure AD Graph unten. Selbst wenn Sie die prominente MicroSoft Graph-Berechtigung erteilen, werden Sie AADSTS90008 verehren, egal wie sehr Sie es versuchen. Ich habe einen Fehler gemacht, aber es hat eine Weile gedauert, bis ich es bemerkt habe (weil ich einen Fehler im Code vermutet habe ...). Nachdem ich dies bemerkt hatte, konnte ich Berechtigungen mithilfe von Abteilungen und Sicherheitsgruppen steuern.

In der Mitte der Beschreibung → Führen Sie nach dem Anmelden verschiedene Aktionen mit der Grafikfunktion aus

Ich habe meine Bemühungen, Probleme in der Bibliothek zu vermeiden und zu beheben, erschöpft, also werde ich sie auf Eis legen ...

Zusammenfassung

Durch das Vermeiden von Problemen mit dieser Bibliothek und das Untersuchen von Zugriffsberechtigungen konnte ich den Mechanismus der Zusammenarbeit zwischen der OAuth2-Authentifizierung in Spring Security und Azure AD (Microsoft ID-Plattform) verstehen. Die Azure AD Spring Boot Starter-Clientbibliothek für Java scheint in der nächsten Version erheblich aktualisiert zu werden, es gibt jedoch derzeit viele Probleme.

Möglicherweise möchten Sie Probleme melden, die Sie möglicherweise in der Bibliotheksumfrage finden.

[^ 1]: Der Bereich, den ich angesprochen habe, ist nur auf einzelne Azure AD-Mandanten beschränkt. [^ 2]: Da der Zugriffspunkt dieses SDK jedoch eine ältere Version (v1.0) ist, müssen Sie bei Verwendung von v2.0 die Beta verwenden. [^ 3]: Unten als AAD-Starer abgekürzt [^ 4]: Das Update für nimbus-jose-jwt scheint ebenfalls darauf zurückzuführen zu sein, und es wurde auf GitHub geteilt, dass dieses Update ad hoc ist. [^ 5]: Es besteht die Möglichkeit eines unzureichenden Verständnisses und einer unzureichenden Überprüfung.

Referenzmaterial

Azure AD Spring Boot Starter client library for Java[^10] [^ 10]: Wahrscheinlich die neueste Starter-Dokumentation OAuth 2.0 Sample for Azure AD Spring Boot Starter client library for Java A Java web application using Spring security which signs in users with the Microsoft identity platform [Microsoft ID Platform](Azure AD) Java-Webanwendung (WAR-Datei) - Einstellungen- 【spring-projects/spring-security】OAuth 2.0 Migration Guide Spring Security Reference12.1. OAuth 2.0 Login

Recommended Posts

Melden Sie sich bei Spring Boot-Webanwendungen auf der Microsoft ID-Plattform an
Mindestkonfiguration zum Ausführen der Spring Boot-Anwendung in Azure Web Apps
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]
WAR die WEB-Anwendung per Spring Boot und stellen Sie sie auf dem Tomcat-Server bereit
So fügen Sie in Spring Boot einen Klassenpfad hinzu
Stellen Sie die Spring Boot-Anwendung für Elastic Beanstalk bereit
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
Stellen Sie das Spring Boot-Projekt in XAMPP für Tomcat bereit
Spring Boot unter Microsoft Azure
[Spring Boot] Erstellung von Webanwendungen
So überprüfen Sie die in der PC-Entwicklungsumgebung auf Ihrem Smartphone erstellte WEB-Anwendung
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ②
Beispiel einer Webanwendung, die mit Spring Boot 1.5 mehrere Datenbanken verwaltet
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ①
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren
Spring Boot-Anwendungsentwicklung in Eclipse
Implementieren Sie die Spring Boot-Anwendung in Gradle
Erstellen wir eine Buchverwaltungs-Webanwendung mit Spring Boot part1
Rufen Sie in Spring Boot eine Proxy-Instanz der Komponente selbst ab
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
[Spring Boot] Vorsichtsmaßnahmen beim Entwickeln einer Webanwendung mit Spring Boot und beim Ausführen eines Krieges auf einem unabhängigen Tomcat-Server
Schritte zum Ausführen von Spring Boot beziehen sich auf die Werte in der Eigenschaftendatei
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Umfang des Versuchs, eine Java-Webanwendung unter Windows Server 2016 zu erstellen
So migrieren Sie eine in einer lokalen Docker-Umgebung erstellte Webanwendung nach AWS
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
[Spring Boot] So rufen Sie Eigenschaften dynamisch aus einer in einer URL enthaltenen Zeichenfolge ab
Rufen Sie den in der Controller-Klasse von Spring Boot definierten Pfad als Liste ab
Lernen Sie beim Erstellen eines WEB-Servers die Einführung in die Entwicklung von WEB-Anwendungen anhand der Grundlagen
Vom Erstellen eines Spring Boot-Projekts bis zum Ausführen einer Anwendung mit VS Code
Führen Sie ein Spring Boot-Projekt mit VS-Code aus
So zeigen Sie eine Webseite in Java an
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
Java-Tipps - Erstellen Sie mit Gradle ein Spring Boot-Projekt
So binden Sie mit einer Eigenschaftendatei in Spring Boot
[Java / PostgreSQL] Verbinden Sie die WEB-Anwendung mit der Datenbank
Erstellen Sie einen Web-API-Server mit Spring Boot
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
Zeigen Sie die Gradle-Aufgabe im Spring Boot-Projekt an
Der Weg zum Erstellen eines Webdienstes (Teil 1)
Ich möchte die Eigenschaftendatei mit einem anderen Dateinamen als application.yml oder application- [Profilname] .yml mit Spring Boot lesen
Wovon ich süchtig war, als ich eine Spring Boot-Anwendung mit VS Code entwickelte
Bis Sie ein Spring Boot-Projekt in Intellij erstellen und an Github senden
Nutzen Sie Spring AOP + Cyclic Barrier, um optimistische Verriegelungstestbedingungen in der Spring Boot-App sicherzustellen
Geben Sie die statische Ressourcencodierung in Spring Boot an
[Einführung] Erstellen Sie eine Ruby on Rails-Anwendung
3. Erstellen Sie eine Datenbank für den Zugriff über das Webmodul
So schreiben Sie einen Komponententest für Spring Boot 2
Ein Memorandum über die Sucht nach Spring Boot2 x Doma2
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren