Comment s’intégrer à un serveur d’autorisation personnalisé avecWSO2 API Manager

Thi Thuy Linh Le
Smile with WSO2
Published in
5 min readApr 28, 2022

WSO2 API Manager ≥ 3.2.0 nous offre la possibilité d’intégrer un serveur d’autorisation externe de notre choix afin de gérer les clients OAuth2 et ses jetons. L’éditeur fourni des connecteurs pour WSO2 Identity Server, Redhat JBoss Keycloak, Okta, Auth0, Ping Federate et ForgeRock Access Management. Si votre serveur d’autorisation n’est pas dans la liste, pas de panique! Nous allons vous montrer comment créer un connecteur personnalisé et le configurer dans WSO2 API Manager 4.X

Dans cet article, nous allons utiliser le serveur de démo de IdentityServer4 (https://demo.identityserver.io/) en tant que serveur d’autorisation externe.

Étape 1 — Créer un connecteur Key Manager

Nous allons créer un connecteur qui permet à WSO2 API Manager de communiquer avec le serveur d’autorisation externe. Pour commencer nous allons télécharger le modèle de projet fourni par l’éditeur ici.

C’est un projet Maven configuré pour générer un bundle OSGi qui sera ensuite facilement intégré dans le produit WSO2 API Manager. Dans ce projet, nous avons 3 classes essentielles :

  • CustomConnectorConfiguration expose le service de configuration du connecteur
  • CustomOAuthClient est le connecteur à proprement parlé au serveur d’autorisation externe (dans notre cas, IdentityServer4) et doit étendre la classe AbstractKeyManager
  • CustomConstants stocke toutes les constantes nécessaires au sein du connecteur.

CustomConstants

Dans cette classe nous allons renseigner le type de serveur d’autorisation externe et son nom. Ces informations sont utilisées par la classe CustomConnectorConfiguration:

CustomConstants.java

CustomConnectorConfiguration

Nous allons déclarer les informations nécessaires pour l’établissement d ‘une connexion à la solution IdentityServer4:

CustomConnectorConfiguration.java

CustomOAuthClient

Dans cette classe nous allons implémenter ces méthodes qui permet à WSO2 API Manager de communiquer avec IdentityServer4

loadConfiguration

WSO2 API Manager va invoquer cette méthode pour charger la configuration de Key Manager externe

mapOAuthApplication

Cette méthode est à implémenter quand nous avons déjà le client ID et le client secret générés par le serveur d’autorisation externe. Elle sera invoquée pour faire le mapping entre le client OAuth et la notion d’Application au sein de l’API Manager.

buildAccessTokenRequestFromOAuthApp

Cette méthode est invoquée quand l’utilisateur demande un token via le Portail Développeur de la solution. Son implémentation va construre la requête de demande de jeton auprès de l’IdentityServer4

getNewApplicationAccessToken

Cette méthode utilise la requête construite précédemment pour invoquer le serveur d’autorisation tiers afin de récupérer les jetons.

Compilation et installation

Nous pouvons maintenant générer le bundle OSGi afin de l’intégrer dans notre installation du produit WSO2 API Manager.

Avant de lancer le build Maven, n’oubliez pas de vérifier dans le fichier pom.xml que votre package est bien dans la liste à exporter:

Une fois que le build Maven est terminé avec succès, vous pouvez récupérer le jar généré et le déposer dans le répertoire [WSO2_AM_HOME]/repository/components/dropins

Redémarrez WSO2 APIM, voilà le connecteur est installé!

Passons à présent à la configuration du Key Manager externe avec le connecteur que nous venons de réaliser.

Étape 2 — Configuration le Key Manager externe

Allez dans le portail d’administration (https://localhost:9443/admin). Dans la section Key Managers cliquez sur Add Key Manager.

Dans “General Details”, renseignez l’adresse de Well-Known URL (ie. metadata/dicovery de votre server d’autorisation) puis cliquez sur “Import”. Les informations de la partie “Key Manager Endpoints” seront renseignées automatiquement. (si vous n’aver pas de well-known URL accessible il vous faudra définir l’adresse des différents endpoints manuellement)

Dans la partie “Grant Types”, renseignez les types d’authentification supporté et autorisé pour ce Key Manager, par exemple “client_credentials

Dans la partie “Connector Configurations”, les paramètres que nous avons déclarés dans CustomConnectorConfiguration sont renseignable:

Renseignez le client ID et le client secret d’un compte client IdentityServer4. Par exemple, nous avons choisi le compte “m2m”, un des comptes de test disponibles sur l’environnement de démo (https://demo.identityserver.io/). En pratique, il est recommandé d’utiliser un compte dédié à WSO2 API Manager, qui est différent des comptes des applications.

Dans “Avanced Configurations”, choisissez “Self validate JWT” (La valeur du “kid” du JWT généré est utilisée pour valider le jeton)

Cliquez sur “Save” et voilà votre Key Manager externe est configuré!

Passons maintenant à la génération des jetons.

Étape 3 — Génération de token via le Dev Portal

Allez dans le portail développeur (https://localhost:9443/devportal) dans la section Applications. Choisissez votre application et cliquez sur “Sandbox keys” ou “Production keys” . Choisissez le tab IdentityServer4 puis cliquez sur “Provide existing OAuth Keys”. Ensuite renseignez le client ID et le client secret d’un compte client IdentityServer4 puis cliquez sur “Provide

Vous pouvez désormais cliquer sur “Generate access token” pour récupérer un token fourni par le serveur de démo IdentityServer4.

Pour tester, vous pouvez appeler l’API de test avec le token généré: https://demo.identityserver.io/api/test

Nous venons de voir les étapes nécessaires pour intégrer un serveur d’autorisation externe en tant que Key Manager dans WSO2 API Manager. Pour aller plus loin, nous pouvons personnaliser le connecteur en étendant la validation JWT, la validation des scopes, ou encore les différentes opérations de l’interface Key Manager. Rendez-vous au prochain article!

--

--