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
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.
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.
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.
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.
Ich habe meine Bemühungen, Probleme in der Bibliothek zu vermeiden und zu beheben, erschöpft, also werde ich sie auf Eis legen ...
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.
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