Aperçu et retour d’expérience sur la mise en place d’Azure AD

De Guillaume Rousseau dans Technique

20 Nov 2019

Dans le cadre du développement d’applications web, il est une partie cruciale à ne pas négliger : l’authentification.

Il n’est en effet pas concevable qu’une application web soit accessible à tout le monde, l’accès doit être sécurisé.

Une notion prend également de plus en plus d’importance, il s’agit de la notion d’authentification unique « SSO » (Single Sign-On). Cela consiste à garantir l’accès à des applications au travers d’une seule et même authentification.

Il existe donc une multitude de façon de procéder, que ce soit une solution intégrée au Framework utilisé pour le développement, un serveur d’authentification centralisé etc…

C’est dans ce cadre et afin de moderniser l’authentification sur le système d’information que nous avons choisi de mettre en place l’authentification sur Azure Active Directory. Nous allons donc voir comment fonctionne Azure AD, pourquoi ce choix et quelles sont les solutions pour l’intégration sur des applications existantes.

Qu’est-ce qu’Azure Active Directory ?

Basé sur les technologies cloud de Microsoft, Azure Active Directory ou « Azure AD » est le service de gestion de l’accès et des identités. Il permet notamment de s’authentifier sur des ressources aussi bien externes (Office365, applications SaaS…) qu’internes (applications situées sur l’intranet de l’entreprise, sur le cloud etc…).

Il existe plusieurs licences Azure AD. La licence gratuite propose par exemple la gestion des utilisateurs et des groupes, la synchronisation d’annuaires locaux, le changement de mot de passe pour les utilisateurs cloud, l’authentification unique sur Azure, Office 365. Cette offre est également limitée à 500 000 utilisateurs et 10 applications en SSO.

Les offres payantes permettent quant à elles de supprimer ces limites en plus d’apporter des fonctionnalités supplémentaires comme les groupes dynamiques, « Microsoft Identity Manager » (suite de gestion des identités et des accès locaux), « Azure Active Directory Identity Protection » pour gérer un accès conditionnel aux données critiques de l’entreprise etc…

Comment fonctionne Azure AD ?

Prérequis

Avant de commencer, l’entreprise doit souscrire au service Azure. Celle-ci reçoit alors une instance dédiée du service Azure AD appelée « locataire » (ou « tenant » en anglais) accessible via le portail Azure AD.

Il est ensuite nécessaire que les administrateurs systèmes inscrivent les applications autorisées à se connecter via Azure AD. Ceci peut s’effectuer via le portail Azure AD.

Chaque application inscrite aura alors un ID d’application propre nécessaire par la suite pour l’authentification.

Fonctionnement

Azure AD utilise le protocole OpenIdConnect (surcouche de OAuth 2.0) afin d’autoriser les applications web à se connecter au locataire Azure AD. Le locataire peut être vu comme la représentation de l’entreprise.

L’url de connexion au locataire est de la forme :

https://login.microsoftonline.com/

Dans la théorie, la connexion à Azure AD fonctionne de la manière suivante :
La première étape consiste à demander un code d’autorisation. Pour se faire, le client dirige l’utilisateur vers l’endpoint « /authorize » en précisant en paramètres l’id de l’application enregistré précédemment. On y précise également le type de retour attendu (ici un « code »).
C’est à ce stade que l’utilisateur est invité à saisir ses informations d’identifications.

Une fois cette étape effectuée, la seconde étape consiste à échanger le code d’autorisation contre un jeton d’accès. Pour se faire, une requête POST est envoyée sur l’endpoint « /token ». Cette requête contient entre autre en paramètre l’id de l’application ainsi que le code précédemment obtenu.

Nous obtenons alors un jeton d’accès au format JWT, l’utilisateur est authentifié et le jeton peut être inclus dans l’entête « Authorization » des requêtes afin d’être utilisé lors des appels vers des ressources protégées comme par exemple des API web.

Il faut également noter que ces jetons ont une durée de validité (1 heure par défaut). En plus du jeton d’accès, Azure AD fourni un « refresh token » à utiliser afin de générer un nouveau jeton d’accès lorsque celui-ci est invalide.

Mise en place

Exemple 1 : Application Angular / Spring

Dans le cadre de cet article, nous prendrons pour exemple une application Angular souhaitant communiquer avec des Webservices d’une application Spring.

Pour que cela soit plus claire, voici le schéma illustrant le fonctionnement vu précédemment :

Partie Angular

Afin de gérer la partie authentification et récupération du jeton, nous allons utiliser la librairie « ADAL JS (Azure AD library for JS)».

Celle-ci se configure simplement dans le fichier « app.js » de l’application Angular de la façon suivante :

La bibliothèque ADAL JS va ensuite gérer la partie authentification avec les informations configurées. Si l’utilisateur n’est pas connecté, celui-ci sera redirigé pour s’authentifier avec Azure AD. Une fois que l’utilisateur a renseigné son mot de passe, la bibliothèque va de façon transparente appeler les endpoints « authorize » et « token » afin de récupérer un jeton JWT Azure AD.

ADAL JS va ensuite inclure le jeton récupéré dans l’entête des requêtes ce qui va nous permettre de nos authentifier auprès des Webservices comme nous allons le voir ensuite.

Partie Webservices (Spring)

Du côté Spring, nous allons définir un « filter » à ajouter à la chaine de sécurité de Spring security.

Le but de ce « filter » est de récupérer le jeton d’accès Azure AD et de valider celui-ci.

Pour faire simple, le jeton d’accès JWT est signé par Microsoft. Afin de vérifier que les données n’ont pas été altérées, nous devons valider la signature. Microsoft possède une clé privé et une clé publique. Le jeton est signé avec la clé privé qui n’est connue que de Microsoft. La clé publique quant à elle permet de vérifier que le jeton a été signé par Microsoft.

Il existe de nombreuses librairies pour la manipulation de jetons JWT afin de réaliser cela comme par exemple « spring-security-jwt » du framework Spring security.

Exemple 2 : Application Java Spring

Dans le cas de l’intégration d’Azure AD sur une application entièrement en Java Spring, il faut savoir que la gestion du protocole OAuth2 est intégrée à partir de Spring Security 5. En ajoutant la bibliothèque « Spring Security Azure AD » au projet et grâce à quelques lignes de configurations, il est possible de mettre en place l’authentification Azure AD :

Cependant ce n’est pas toujours aussi simple. Pour des applications Java Spring plus anciennes, il est nécessaire de créer le « filter » qui va appeler les différents « endpoints », retourner le jeton d’accès et le jeton de rafraichissement et valider ceux-ci afin d’injecter les informations et accréditations de l’utilisateur dans un objet « UserPrincipal » lié à sa session et au contexte de securité Spring.

Ceci peut être fait en utilisant la bibliothèque « adal4j » :

Retour d’expérience

Comme nous pouvons le voir, il existe tous les outils nécessaires pour mettre en place l’authentification via Azure AD sur nos applications. Cela s’avère relativement facile sur des applications récentes grâce à quelques lignes de configurations.

Cela peut demander plus de travail sur des applications « anciennes » où il est alors nécessaire de mettre en place une partie du processus d’authentification. Il est alors fortement recommandé de connaitre au minimum les bases du fonctionnement d’Azure AD et c’est pourquoi nous nous y sommes un peu attardés sur cet article.

D’un point de vue développeur applicatif, Azure AD permet l’ajout d’une authentification unique aux applications. Il est alors ensuite possible de récupérer les informations de l’utilisateur, soit en base de données, soit via le jeton d’accès et les API misent à disposition par Microsoft permettant par exemple d’aller chercher les informations organisationnelles utilisateurs de l’Active Directory.

D’un point de vue administrateur système, cela permet entre autre la mise en place d’une gestion des mots de passe et la mise en place de stratégies de mots de passe fortes. Le portail Azure AD permet également une gestion des applications enregistrées concernant les données utilisateurs accessibles.

Du point de vue de l’utilisateur, celui-ci possède un mot de passe unique qu’il va pouvoir utiliser sur les différentes applications. Il peut également choisir de « resté connecté » à Azure AD, cela permet une connexion automatique sur les applications et il n’est alors plus nécessaire de retaper sans cesse son mot de passe offrant ainsi un certain confort d‘utilisation.

Afin de vous aider à la mise en place et sortir de la théorie, vous trouverez tous les exemples nécessaires sur le net, l’important ici étant d’avoir quelques connaissances sur les bases du fonctionnement d’Azure AD et certaines solutions existantes pour sa mise en place. J’espère donc que cet article a pu vous permettre de lever les zones d’ombres et interrogations que vous pouviez avoir sur Azure AD.

iMDEO recrute !

A la recherche de nouveaux talents (développeurs web et mobile, chefs de projet,...)

REJOIGNEZ-NOUS

A la recherche de nouveaux talents (développeurs web et mobile, chefs de projet,...)

Voir les annonces