Table des matières


Créé le: 2022-12-31 ; Révisé le: 2022-12-31

Vidéo (2 heures)

Introduction (00:00:00)

  • Le logiciel à modifier: Foilen CRM
    • Stack: Java, Spring Boot, Spring Security, MySQL
  • La modification à faire: “Changer le système de connexion pour utiliser Microsoft Azure OIDC”
    • Actuellement: Utilise mon système Foilen Login
    • Désiré: Utiliser Microsoft Azure OIDC
  • Le commit dans Git avec toutes les modifications

Présentation du projet (00:02:46)

  • La page de projet et le démarrer (00:02:46)
  • Analyser le démarrage et l’outil de mise à jour de la base de données et plus (00:11:44)
  • Aller sur l’application web (00:15:39)

Enlever Foilen Login (00:18:19)

Ajouter les librairies pour OIDC et Azure et configurer

Ajouter les librairies (00:30:53)

Dans build.gradle ajouter:

// ...
dependencies {
  // ...
  
  // Login
  implementation 'com.azure.spring:spring-cloud-azure-starter-active-directory'
  implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
  
  // ...
}

dependencyManagement {
  imports {
    mavenBom "com.azure.spring:spring-cloud-azure-dependencies:${springCloudAzureVersion}"
  }
}

Puis dans gradle.properties ajouter:

springCloudAzureVersion=4.5.0

ou plus récent.

Configurer Spring Security (00:33:40)

Exemple:

@Configuration
@Profile("!JUNIT")
public class SecuritySpringConfig {

    @Bean
    public CookieCsrfTokenRepository cookieCsrfTokenRepository() {
        var csrfTokenRepository = new CookieCsrfTokenRepository();
        csrfTokenRepository.setCookieHttpOnly(false);
        return csrfTokenRepository;
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

        http.csrf().csrfTokenRepository(cookieCsrfTokenRepository());

        http.authorizeRequests(requests -> requests.anyRequest().authenticated());
        http.oauth2Login(Customizer.withDefaults());
        http.oauth2Client();

        return http.build();
    }

}

Les propriétés pour Spring Security (00:39:48)

Dans application.properties ajouter:

spring.security.oauth2.client.registration.azure.client-name: Azure
spring.security.oauth2.client.registration.azure.client-authentication-method: basic
spring.security.oauth2.client.registration.azure.provider: azure-oauth-provider
spring.security.oauth2.client.registration.azure.scope: openid,email
spring.security.oauth2.client.registration.azure.authorization-grant-type: authorization_code

spring.security.oauth2.client.provider.azure-oauth-provider.authorization-uri: https://login.microsoftonline.com/common/oauth2/v2.0/authorize
spring.security.oauth2.client.provider.azure-oauth-provider.user-info-uri: https://graph.microsoft.com/oidc/userinfo
spring.security.oauth2.client.provider.azure-oauth-provider.token-uri: https://login.microsoftonline.com/common/oauth2/v2.0/token
spring.security.oauth2.client.provider.azure-oauth-provider.jwk-set-uri: https://login.microsoftonline.com/common/discovery/v2.0/keys
spring.security.oauth2.client.provider.azure-oauth-provider.user-name-attribute: sub

Vous aurez aussi à configurer les propriétés suivantes avec les informations spécifiques à votre application et vous pouvez les mettre dans le fichier application.properties ou dans des variables d’environnement:

spring.security.oauth2.client.registration.azure.client-id=
spring.security.oauth2.client.registration.azure.client-secret=
spring.security.oauth2.client.registration.azure.redirect-uri=

Créer une application dans Azure pour avoir un id et secret (00:51:00)

  • https://portal.azure.com/
  • Créer une Application d’entreprise (00:54:04)
    • Créer votre propre application
      • Choisir un nom
      • Register an application to integrate with Azure AD (App you’re developing)
    • Inscrire une application (00:55:08)
      • Comptes dans un annuaire d’organisation (tout annuaire Azure AD - Multilocataire) et comptes Microsoft personnels (par exemple, Skype, Xbox)
      • URI de redirection: http://localhost:8080/login/oauth2/code/azure (ou configurer plus tard (00:58:14))
    • Les valeurs:
      • client-id: Synonymes: ID d’application (client) (00:56:41) (00:57:48)
      • client-secret:
        • Dans Authentification unique, dans le bloc 1, cliquer Accéder à l’application (00:57:28)
        • Cliquer Certificats & secrets (01:01:23)
    • Les authorisations (API autorisées) (01:02:30) (01:04:55)
      • Microsoft Graph:
        • offline_access
        • openid
        • profile
        • email
        • User.Read

Compléter le code avec ce qui est reçu d’OIDC (01:07:09)

  • Ajuster les TODO (01:07:09)
  • Créer un intercepteur pour créer un utilisateur s’il n’existe pas (01:21:42)
  • Recevoir le courriel de l’utilisateur (01:30:02)
  • Pouvoir afficher les informations de l’utilisateur dans l’application web (01:41:40)

Faire fonctionner les tests unitaires (01:43:56)

  • Changer la configuration des tests pour la base de données à distance (01:43:56)
  • Investiguer pourquoi les tests de démarrent pas (01:44:56)
    • Il fallait enlever useJUnitPlatform dans build.gradle parce que c’est pour jUnit 5; pas 4 (01:48:12)
  • Compléter les TODO dans les tests (01:48:37)

Enlever le fichier de configuration local (01:52:06)

Il ne faut pas le laisser dans Git parce qu’il y a des secrets dedans.

Révision dans Git de toutes les modifications (01:55:45)