La documentation officielle de Microsoft est déroutante et les mises à jour de la bibliothèque ne suivent pas, ce qui rend difficile la connexion avec un compte Azure AD [^ 1] à partir du dernier Spring Boot. Voici un résumé de ce qui se passe actuellement pour implémenter la connexion.
--Spring Boot Starter pour Azure AD ne peut pas être démarré tel quel
Je pense que cette bibliothèque [^ 3] est la première à frapper. Il s'agit d'un projet dirigé par Microsoft. Puisqu'il utilise les fonctions du client Oauth2 de Spring Boot / Spring Security, il y a moins d'éléments de configuration et de plages d'implémentation que d'autres options. Les documents sur l'intégration entre Azure AD et Spring sont dispersés à divers endroits sur le site de Microsoft, mais pour le moment [Documents Github](https://github.com/Azure/azure-sdk-for-java/ Voir tree / 407b4e0bffbb75b461c0512e669a6d43376fa7ab / sdk / spring / azure-spring-boot-starter-active-directory). Ce devrait être la dernière description. Le scénario principal couvert dans cet article est le flux d'authentification backend (https://github.com/Azure/azure-sdk-for-java/tree/407b4e0bffbb75b461c0512e669a6d43376fa7ab/sdk/spring/azure-spring- boot-starter-active-directory # autorisation-code-mode-usage).
Nous allons procéder au travail basé sur ce document, mais ** Actuellement, il ne fonctionne pas avec les paramètres selon ReadMe → Il a été corrigé en fonction du rapport, mais veuillez attendre qu'il soit reflété dans maven **.
J'ai également découvert la raison rapportée sur GitHub, mais en raison de la dépendance de Spring Boot 2.3.5 La version de nimbus-jose-jwt dont dépend AAD-Starter a été mise à jour et ne peut pas être démarrée. Cela se produit depuis 8.10 dans nimbus-jose-jwt en raison de l'ajout d'un argument au constructeur defaultJWKSetCache pour spécifier le cycle d'actualisation. Tout d'abord, nous allons traiter de cela.
Heureusement, la cause de ce bogue est dans la définition Bean d'AutoConfig, il est donc possible de ** le résoudre à l'exécution **. (Le code source de ce problème a été corrigé lors de la rédaction de l'article) Il n'est pas bon ici de baisser la version nimbus-jose-jwt pour la prendre en charge, mais corrigez-la et utilisez-la. Pour utiliser AAD-Starter, vous héritez essentiellement de WebSecurityConfigurerAdapter et écrivez Config, écrasez donc l'ancienne définition de Bean.
AADOAuth2LoginConfig.java
/*Ajout d'une partie de commentaire à l'exemple ReadMe*/
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AADOAuth2LoginConfig extends WebSecurityConfigurerAdapter {
@Autowired
private OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService;
//Injecter les propriétés de configuration
@Autowired
private AADAuthenticationProperties aadAuthProps;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.oauth2Login()
.userInfoEndpoint()
.oidcUserService(oidcUserService);
}
//Définition de bean qui remplace le paramètre de problème
@Bean
public JWKSetCache getJWKSetCache() {
long lifespan = aadAuthenticationProperties.getJwkSetCacheLifespan();
return new DefaultJWKSetCache(lifespan, lifespan, TimeUnit.MILLISECONDS);
}
}
Cette définition de bean reproduit le même comportement qu'avant la mise à niveau, mais elle contient quelques problèmes. Comme la durée de vie du cache et le cycle d'actualisation sont identiques, vous pouvez obtenir des erreurs irrégulières au moment de l'exécution [^ 4]. Pour résoudre ce problème, vous devez définir le deuxième argument de DefaultJWKSetCache sur un nombre inférieur au premier argument, et vous devez créer la propriété vous-même ou la spécifier dans votre code. De plus, il semble que le constructeur sans argument ait une durée de vie de 15 minutes et un cycle d'actualisation de 5 minutes, donc s'il ne semble y avoir aucun problème avec ce cycle, vous pouvez choisir d'utiliser le constructeur sans argument.
Cela fonctionne très bien avec les paramètres tels que documentés.
Il est important de noter que l'URL de redirection doit être la valeur par défaut de Spring Security {baseURL} / login / oauth2 / code / azure
.
J'ai l'impression que je pourrais le changer dans les propriétés de Spring Security, mais je n'ai pas réussi. [^ 5]
Et une autre chose importante est ** l'accès à l'API donné à l'application **. Il s'agit d'un piège complet, mais le contenu du document ** nécessite des autorisations Azure AD Graph **, pas des autorisations MicroSoft Graph.
Sur l'écran Web Azure actuel, l'affichage d'Azure AD Graph est en bas, et même si vous donnez l'autorisation de premier plan MicroSoft Graph, vous adorerez AADSTS90008, peu importe vos efforts. J'ai fait une erreur à ce sujet, mais il m'a fallu un certain temps pour le remarquer (car je suspectais un bug dans le code ...). Après avoir remarqué cela, j'ai pu contrôler les autorisations en utilisant les départements et les groupes de sécurité.
J'ai épuisé mes efforts pour éviter et résoudre les problèmes de la bibliothèque, je vais donc le mettre en attente ...
En évitant les problèmes avec cette bibliothèque et en examinant les privilèges d'accès, j'ai pu comprendre le mécanisme de coopération entre l'authentification OAuth2 dans Spring Security et Azure AD (plateforme d'identification Microsoft). La bibliothèque cliente Azure AD Spring Boot Starter pour Java semble être considérablement mise à jour dans la prochaine version, mais elle semble avoir beaucoup de problèmes pour le moment.
Vous voudrez peut-être signaler tout problème que vous pourriez trouver dans l'enquête de la bibliothèque.
[^ 1]: la plage que j'ai évoquée est limitée aux locataires uniques Azure AD uniquement. [^ 2]: Cependant, comme le point d'accès de ce SDK est une version plus ancienne (v1.0), vous devez utiliser la version bêta lors de l'utilisation de la v2.0. [^ 3]: abrégé en AAD-Starer ci-dessous [^ 4]: Le correctif pour nimbus-jose-jwt semble également être dû à cela, et il a été partagé sur GitHub que ce correctif est ad hoc. [^ 5]: Il y a une possibilité de compréhension et de vérification insuffisantes.
Azure AD Spring Boot Starter client library for Java[^10] [^ 10]: probablement la toute dernière documentation de Starter 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 Web App (fichier WAR) -Settings- 【spring-projects/spring-security】OAuth 2.0 Migration Guide Spring Security Reference12.1. OAuth 2.0 Login
Recommended Posts