Avec les différentes évolutions d’internet ces dernières années, l’apparition du cloud et des applications mobiles afin de rendre notre vie privée et professionnelle plus simple, la question de simplifié et unifié tous nos services est venue se poser. Et c’est avec ces nouveautés que différentes technologies, protocoles et paradigmes sont apparus.
L’idée de l’approche micro-service est de segmenter chaque partie du logiciel en différents services indépendant les uns des autres grâce à leur périmètre fonctionnel.
Chaque service est : petit, conçu pour remplir une seule fonction, résilient, minimaliste, mais complet sur la tâche qu’il doit accomplir. Cela permet de rendre chaque service indépendant des autres, simple à remplacer, simple à mettre à jour et cela facilite donc le déploiement.
Il permet ainsi à un logiciel, processus ou application (le consommateur) d’utiliser l’API sécurisée d’un autre logiciel (le fournisseur) pour le compte d’un utilisateur. Il repose sur un mécanisme d’échange de jeton. Il a l’avantage de ne pas faire confiance à la machine cliente qui n’est pas sécurisé et de pouvoir signer le token afin de pouvoir vérifier sa provenance par la suite.
Le RBAC (contrôle d’accès basé sur les rôles) est une méthode pour donnée un accès à des ressources en fonction du rôle d’un utilisateur. Les utilisateurs se voient attribué un rôle par le serveur d’autorité qui leur permet ou non d’accéder à une ressource. Le RBAC permet ainsi d’associer le même rôle à plusieurs utilisateurs qui doivent pouvoir accéder à la même ressource. C’est donc un système idéal pour les entreprises avec un turn-over conséquent qui pourront attribuer simplement un rôle à l’utilisateur entrant sans modifier les contrôles d’accès.
On va alors essayer d’appliquer ces 3 concepts à un exemple réel : un live tchat. On va donc découper notre application en 5 parties :
Voici une représentation des échanges effectués entre l’utilisateur et le service qui le concerne qui lui-même va communiquer avec le composant iam afin de déterminer le rôle de l’utilisateur grâce au token. Cependant, cela reste le service message qui, en fonction du rôle utilisateur que iam lui valide, décide si l’utilisateur à le droit ou non d’effectuer l’action demandée.
Dans ces exemples qu’il se passe toujours la même chose, peu importe le service appelé, à la différence que si le rôle ne convient pas au service, celui-ci rejette l’appelle sans même contacter la base de donnée.
Mais du coup que contient ce fameux token ? C’est assez simple, un json web token est une chaine de caractère en trois parties séparée par des points. Chaque partie est encodée en base 64 et une fois décodé, on peut y retrouver :
L’en-tête va nous permettre de connaitre l’algorithme de signature pour la troisième partie et le type de token qui est JWT.
Le payload lui contient les données sur l’utilisateur qui l’utilise comme sont nom, prénom, email, identifiant, rôle, la date de réalisation du token, la date de l’expiration du token…
Cette partie peut contenir n’importe quel champ utile sans limites.
Enfin, la dernière partie est la signature des deux premières parties, elle permet de valider que le token est valide ou non.
Conclusion
Donc pour conclure, on peut ici voir que chaque service a le pouvoir de dire quel rôle il accepte pour une action donnée. Cela peut permettre de créer, mettre à jour et supprimer une infinité de services, mais aussi une infinité d’utilisateurs sans que l’un dépende de l’autre. C’est donc très intéressant dans le cas d’entreprise avec un gros turnover et/ou dans le cas d’utilisation d’un logiciel qui est voué a évolué très régulièrement.