REPUBLIQUE DU SENEGAL
Un peuple-Un but-Une foi
Ministère de l'Enseignement Supérieur et
de la Recherche
Direction Générale de l'Enseignement
Supérieur Privé
Institut Supérieur d'Informatique
MEMOIRE
Présenté par :
Saratou Diallo
Pour l'obtention du diplôme de :
Master Professionnel :
Génie-Logiciel
Parcours : Informatique
Sujet :
Étude et Mise en place d'un service cloud de
gestion des identités et des accès basé sur
keycloak
Soutenu à Dakar, le
Membres du jury
Président
|
Pr. Samba NDiaye
|
Professeur
|
Superviseur de mémoire
|
Pr Abdoulaye Ly
|
Ingénieur
|
Examinateur 1 :
|
Pr Bassirou Toure
|
Doctorant
|
Examinateur 2 :
|
Pr. NGor Seck
|
Ingénieur
|
Année
Académique : 2021 -2022
AVANT-PROPOS
L'Institut Supérieur d'Informatique (ISI) est un groupe
privé d'enseignement supérieur universitaire et professionnel
avec une expérience de plus de dix ans. Il a été
créé par des professionnels du secteur des technologies de
l'information et de la communication. Les diplômes délivrés
par cet institut sont la licence, le master et éventuellement le
doctorat. Les enseignements y sont dispensés dans les filières
telles que Ingénierie Logiciel, Ingénierie informatique,
Ingénierie réseaux et télécom, Communication et
Marketing.... Ils s'inspirent des normes recommandées par le CAMES
(Conseil Africain et Malgache pour l'Enseignement Supérieur), de
l'ANAQ-SUP,...
Pour l'obtention du master professionnel en Génie
logiciel à l'ISI, il est demandé à chaque étudiant
l'élaboration d'un mémoire de fin de cycle. C'est dans cette
optique que nous avons rédigé ce document qui s'intitule
: Étude et Mise en place d'un service cloud de gestion des
identités et des accès (IAM pour Identity and Access Management)
basé sur keycloak.
Le sujet est intitulé « Étude et Mise en
place d'un service cloud de gestion des identités et des accès
(IAM pour Identity and Access Management) basé sur keycloak ». La
plateforme va nous permettre de faciliter le développement
d'applications plus sûres et plus sécurisées et de profiter
pleinement des avantages de l'outil keycloak.
Afin d'offrir des fonctionnalités aux utilisateurs, il
doit mettre à leur disposition une interface d'utilisation permettant
son exploitation. Cette interface sera accessible via un service PaaS
hébergé chez AWS(Amazon Web Services) .
Ce document est le fruit de notre travail de recherche durant
les six mois consacrés à ce projet. Des difficultés n'ont
pas manqué. Elles concernent particulièrement la
disponibilité de données fiables et actuelles.
DEDICACES
Je dédie ce mémoire
A mes parents pour leur amour inestimable, leur confiance, leur
soutien, leurs sacrifices et toutes les valeurs qu'ils ont su m'inculquer.
A mon très cher ami Amadou Oury Diallo pour son soutien
et sa présence tout au long de mon parcours universitaire.
A mon maître de mémoire Monsieur Abdoulaye Ly,
pour sa disponibilité, son soutien et sa patience tout au long de
l'élaboration de ce mémoire.
A toute ma famille ainsi qu'à mes amis.
Remerciements
Avant toute chose, Gloire à Allah, Créateur de
toute chose, Celui qui rend le difficile facile, l'impossible possible et Qui,
par Sa Grâce a permis la réalisation de ce travail.
Je tiens à remercier mon directeur de mémoire
Monsieur Abdoulaye Ly, professeur à l'Institut Supérieur
d'Informatique ISI de Dakar, de m'avoir accueillie dans son équipe et
d'avoir accepté de diriger ce travail. Sa rigueur scientifique, sa
disponibilité, sa patience et son écoute ont permis à ce
travail d'aboutir dans les meilleures conditions.
Mes remerciements s'adressent également à
l'ensemble du corps professoral de l'ISI, et à tous mes professeurs
depuis la maternelle pour leur apport dans mon éducation.
Qu'ils puissent trouver dans ce travail le témoignage
de ma sincère gratitude et de mon profond respect.
Je tiens à remercier les membres du jury d'avoir
évalué ce travail. Mes remerciements les plus chaleureux vont
à tous mes camarades à l'ISI pour leurs encouragements et pour
l'ambiance agréable tout au long de ces rencontres de travail.
Résumé
La gestion des identités et des accès (IAM pour
Identity and Access Management) est un moyen de gérer un ensemble
donné d'identités numériques des utilisateurs, et les
privilèges associés à chaque identité. Il s'agit
d'un terme général qui couvre un certain nombre de produits
différents qui remplissent tous la même fonction de base. Keycloak
est un des nombreux outils de gestion des identités et des accès
qui offre un certain nombre de fonctionnalités tel que
l'authentification unique (SSO pour Single Sign On/Out) pour la gestion des
identités et des accès. L'utilisation d'un outil tel que Keycloak
est une première étape vers le développement de logiciels
et applications plus sûrs et plus sécurisés. Cependant pour
tirer de réels avantages dans l'utilisation d'un tel outil il faut une
compréhension plus ou moins poussée de celui-ci, ce qui peut
prendre un certain temps.
Ce mémoire propose un service cloud de gestion des
identités et des accès basé sur keycloak. Il met à
disposition des développeurs un service mesurable auquel ils peuvent
souscrire et qui leur permettra de tirer pleinement parti des avantages et des
facilités qu'offre l'outil keycloak pour le développement
d'applications et logiciels sécurisés. Après une
étude poussée et l'utilisation de keycloak, Nous avons choisi un
ensemble d'outils permettant le développement de notre plateforme. Nous
avons choisi un environnement de développement windows dans lequel on
utilise docker pour l'installation de keycloak, visual studio a
été choisi comme éditeur de code avec le langage node.js
et une base de données local mysql. La plateforme sera
déployée sur un cloud PaaS (Platform as a Service) chez Amazon
Web Services AWS.
Abstract
Identity and Access Management (IAM) is a means of managing a
given set of digital user identities, and the privileges associated with each
identity. It is an umbrella term that covers a number of different products
that all perform the same basic function. Keycloak is one of a variety of
identity and access management tools that offer a range of features such as
Single Sign On/Out (SSO) for identity and access management. The use of a tool
such as Keycloak is a first step towards the development of safer and more
secure software and applications. However, to get real benefits from using such
a tool requires a more or less advanced understanding of it, which can take
some time.
This project proposes a cloud service for identity and access
management based on keycloak. It provides developers with a measurable service
that they can subscribe to and that will allow them to take full advantage of
the benefits and amenities that the keycloak tool offers for the development of
secure applications and software. After a close study and the use of keycloak,
we have chosen a set of tools allowing the development of our platform. We
chose a windows development environment in which we use docker for the
installation of keycloak, visual studio was chosen as a code editor with the
node.js language and a local mysql database. The platform will be deployed on a
PaaS (Platform as a Service) cloud at Amazon Web Services.
Table des matières
Liste des Figures
II
Liste des Tableaux
10
Glossaire
12
1. Chap1: Introduction Générale
13
1.1. Contexte
14
1.2. Problématique
15
1.3. Objectifs
15
1.4. Motivations
16
2. Chap2: Travaux existants
18
Introduction
18
2.1. Concepts de base
19
2.2. L'outil Keycloak
29
2.3. Étude de l'existant
33
Conclusion
38
3. Chap 3: Solution Proposée
39
Introduction
39
3.1. Spécification des besoins du système
39
3.2. Réalisation
62
3.3. Implémentation de la solution
65
3.4. Déploiement et Tests
74
Conclusion
82
4. Chap4: Conclusion et Perspectives
83
4.1. Conclusion:
83
4.2. Perspectives:
84
Bibliographie
i
I. Ouvrages
i
II. Mémoires
i
III. Articles
i
Wébographie
ii
Liste
des Figures
Figure 1 : Processus de
génération
d'une JWT 22
Figure 2 : Différentes parties d'une JWT
22
Figure 3 : Exemple d'une JWT 23
Figure 4 : Exemple d'un ID Token 26
Figure 5 : Illustration du fonctionnement
d'OAuth2 29
Figure 6 : Diagramme de cas d'utilisation globale
de l'application 44
Figure 7 : Diagramme de cas d'utilisation
illustrant les actions de notre système keycloak 45
Figure 8 : Package Abonnement 45
Figure 9 : Package Activity 46
Figure 10 : Package AddUsers 46
Figure 11 : Package Application 46
Figure 12 : Package AppRequest 47
Figure 13 : Package Authentication 47
Figure 14 : Package Payment 48
Figure 15 : Diagramme de séquence
Authentification 48
Figure 16 : Diagramme de séquence
Payement
49
Figure 17 : Diagramme de séquence
Abonnement 51
Figure 18 : Diagramme de séquence AddUsers
53
Figure 19 : Diagramme de séquence
requête d'authentification 54
Figure 20 : Diagramme de séquence
AddApplication 55
Figure 21 : Diagramme de classe 56
Figure 22 : Architecture 3/3 57
Figure 23 : Architecture de l'application
59
Figure 24 : Arborescence des dossiers de
l'application 60
Figure 25 : Diagramme de déploiement
62
Figure 26 : Page d'accueil de l'application
70
Figure 27 : Page de connexion 70
Figure 28 :Page de connexion 70
Figure 29 : Page d'ajout d'une application
étape 1 71
Figure 30 : Page d'ajout d'une application
étape 2 72
Figure 31 :Page d'ajout d'une application
étape 3 73
Figure 32 : Page d'ajout d'une application
étape 4 74
Figure 33 : Page d'ajout d'une application
récapitulatif 75
Figure 34 :Page liste des applications 76
Figure 35 : Page détails et configuration
d'une application 77
Figure 36 : Installation de AWS CLI 78
Figure 37 : Configuration de AWS CLI 78
Figure 38 : Dockerfile 78
Figure 39 :
Containerisation
de l'application 79
Figure 40 :
Résultat
de la commande de
containerisation
79
Figure 41 : Cluster sur eks 80
Figure 42 : Configuration de k8s dans docker
80
Figure 43 : Fichier manifest.yml 81
Figure 44 : Commande pour déployer le
fichier .yml 81
Figure 45 :
Résultat des
commandes de vérification du
déploiement. 82
Figure 46 : Base de données Amazon RDS
82
Figure 47 : Fichier yaml pour keycloak 83
Figure 48 : Résultat après
déploiement de keycloak 83
Figure 49 : Vérification du
déploiement de l'application 84
Liste des
Tableaux
Table 1 : Scénario de
Paiement
49
Table 2 : Scénario Abonnement 50
Table 3 : Scénario Ajout des utilisateurs
52
Table 4 : Scénario Envoie d'une
requête d'authentification 54
Table 5 : Tableau comparatif des providers cloud
64
Liste des Abréviations
Abréviation
|
Signification
|
IAM
|
Identity and Access Management
|
SP
|
Service Provider
|
IdP
|
Identity Provider
|
PaaS
|
Plateforme as a Service
|
SSO
|
Single Sign On/Out
|
MFA
|
Multi Factor Authentication
|
RBAC
|
Role Based Access Control
|
HIPAA
|
Health Insurance Portability and Accountability Act
|
AS
|
Authorization Server
|
RO
|
Resource Owner
|
RS
|
Resource Server
|
OTP
|
One Time Password
|
PAYG
|
Pay As You Go
|
OS
|
Operating System
|
HTTP
|
HyperText Transfer Protocol
|
JWT
|
Json Web Token
|
JWS
|
JWT Signé
|
API
|
Application Programing Language
|
SGBDR
|
Système de Gestion de Base de Données
Relationnelle
|
UML
|
Unified Modeling Language
|
SQL
|
Structured Query Language
|
DC
|
Data Center
|
OIDC
|
OpenID Connect
|
SLA
|
Service-Level Agreement
|
Glossaire
Terme
|
Explication
|
OAuth
|
Protocole de sécurité très
utilisé.
|
OIDC
|
Protocole de sécurité complémentaire de
OAuth.
|
SAML
|
Protocole de Sécurité.
|
Pay As You Go
|
Système de Paiement utilisé par les provider
cloud.
|
Provider
|
Fournisseur de services cloud.
|
Realm
|
Dans keycloak, espace de gestion des objets incluant les
utilisateurs, les applications, les rôles et les groupes.
|
Service-Level Agreement
|
Accord entre un fournisseur de services cloud et un client qui
assure le maintien d'un niveau de service minimum.
|
Data Center
|
Infrastructure composée d'un réseau d'ordinateurs
et d'espaces de stockage.
|
1. 1. Chap1: Introduction
Générale
«La sécurité n'est pas une
fonctionnalité mais une nécessité». Jamais cette
affirmation n'a autant été d'actualité qu'à cette
époque où le système d'information des entreprises est de
plus en plus complexe, ouvert et en constante évolution.
La sécurité de ce système, indispensable
au bon fonctionnement de l'entreprise, repose sur une multitude de solutions,
outils et technologies. Au coeur de ce système gravite le maillon
à la fois le plus important et le plus vulnérable: l'utilisateur.
Il ne peut y avoir de gestion optimale de la sécurité du
Système d'Information SI sans maîtrise de l'identité et des
droits d'accès de ce dernier: la mise en place d'une stratégie
IAM et plus précisément d'une plateforme de gestion des
identités et des accès permet à l'entreprise de fiabiliser
la sécurité de son SI en protégeant son coeur
névralgique.
Un autre point mais pas des moins importants est la constante
évolution des entreprises qui se tournent de plus en plus vers les
nouvelles technologies de cloud computing.
Gérer efficacement l'ensemble des identités de
ses utilisateurs, tout en évoluant vers les nouvelles technologies
imposées par cette époque d'innovation, est un vrai défi
à l'heure où les systèmes d'informations se
complexifient.
Cette complexité se ressent évidemment au niveau
du développement des logiciels utilisés par les entreprises
compliquant ainsi la tâche aux développeurs déjà
assez surchargés par la livraison des fonctionnalités
adaptées aux besoins des clients (entreprises et particuliers) et le
respect des délais imposés par ces derniers tout en migrant vers
les nouvelles technologies de cloud computing.
Ces dernières années, bon nombre d'outils ont
été développés pour répondre à ce
besoin, Keycloak est l'un de ces outils de gestion d'identité et des
accès ayant fait ses preuves. Et pourtant si les entreprises ont pu
bénéficier d'une sécurité plus stable et robuste
elles restent cependant toujours dans les anciennes méthodes de
développement, et les développeurs ne sont pas plus
soulagés de leurs charges.
Tout ceci étant mis sur table, la solution
idéale serait un outil qui, non seulement gère bien les
identités et accès des utilisateurs mais qui soit
également une solution qui répond aux exigences du cloud et fait
gagner du temps aux développeurs. Ainsi nous nous proposons de mettre en
place une solution cloud de gestion des identités et des accès,
ceci, en prenant comme socle un outil d'IAM mature à savoir keycloak.
Étant moi-même développeuse, je suis
apte à dire que bien souvent, nous développeurs, mettons nos
compétences au service de bien de domaines ce qui n'est pas une mauvaise
chose, au contraire, mais très rarement à notre service. Ce
constat ajouté à la découverte des outils comme keycloak
m'ont interpellé et ont suscité mon intérêt pour la
mise en place d'un système qui non seulement sera
bénéfique aux entreprises mais également à nous
développeurs en nous allégeant la tâche et ainsi nous
permettre de nous concentrer sur le développement des besoins
fonctionnels et de livrer dans les délais impartis.
Afin de traiter le sujet et de répondre aux
questionnements émis, un plan de recherche a été
établi. Il consiste d'abord en une recherche documentaire qui s'est
porté sur des livres électroniques et des conférences en
ligne.Le tout s'est déroulé sur une période de deux mois.
La recherche a été complétée par de nombreuses
lectures sur le sujet.
Nous verrons dans un premier temps en détail le cadre
dans lequel s'inscrit notre projet, le problème auquel il essaie
d'apporter une solution, ses objectifs et les motivations qui ont poussé
à la réalisation de ce projet. (chapitre I). Nous allons
également analyser quelques solutions déjà existantes dans
le domaine de la gestion des identités et des accès(chapitre II),
avant de passer à la réalisation et l'implémentation de
notre solution (chapitre III) et finalement conclure et énoncer les
perspectives du projet(chapitre IV).
1.1. Contexte
Avec les avancées de l'internet, le
développement des applications et de toutes sortes de solutions
informatiques et en même temps du piratage de données ces
dernières années, la nécessité d'avoir un
système sécurisé n'est plus à prouver. Bien
qu'étant un domaine à part, la sécurité est
fondamentale dans tout processus de développement d'applications.
Toutefois il peut être fastidieux de mettre en place un système
d'authentification solide et fiable. On peut être bon développeur
et développer des applications vulnérables, c'est pourquoi il est
préférable de déléguer sa sécurité
à un spécialiste.
Plusieurs techniques sont utilisées par les
développeurs pour répondre à ce besoin: l'écriture
des écrans de login, la gestion des utilisateurs et de leurs mots de
passes, ou encore, l'utilisation de protocoles comme OAUTH 2.0. Une autre
approche plus récente consiste à l'implémentation du SSO
(Single Sign On / Single Sign Out). Les outils comme keycloak sont
dédiés à cette dernière option.
Cependant, si l'utilisation d'un outil comme keycloak est
très pratique, il faut noter que cela demande une certaine
familiarité et la prise en main n'est pas des plus facile. Les
configurations pouvant varier d'un projet à l'autre , il faut des
connaissances poussées mais surtout de l'expérience et une courbe
d'apprentissage assez importante pour parvenir à en tirer de
réels bénéfices.
1.2. Problématique
Comment développer des applications
sécurisées, fiables et performantes et en même temps gagner
du temps dans le développement de ses applications? C'est une question
que tout bon développeur doit se poser. Ce projet permettra d'apporter
une solution à ce problème en mettant à disposition des
développeurs un service cloud qui s'occupera de la gestion de la
sécurité en se basant sur un outil de gestion des
identités et des accès (IAM en anglais pour Identity and Access
Management): «Keycloak», sans pour autant avoir besoin d'en
être expert. Ce qui leur permettra de se consacrer au
développement des fonctionnalités de leurs applications et ne
plus se soucier de la mesquinerie liée à la
sécurité.
1.3. Objectifs
1.3.1. Objectif Global
Suite à la question émise dans la
problématique, nous aurons pour objectif final de ce mémoire, la
mise en place d'un service cloud de gestion des identités et des
accès basée sur l'outil Keycloak afin d'alléger la charge
des développeurs et leur permettre de se concentrer sur les besoins
fonctionnels des logiciels qu'ils développent.
Le service sera accessible via le cloud et permettra au
développeur qui bénéficiera du service de gérer
l'accès à son application de deux manières:
a. La première option: fait en sorte
que lorsqu'un utilisateur d'une application utilisant notre service, essaie
d'accéder à une ressource sécurisée, il est
redirigé sur notre plateforme cloud et celle-ci se charge de son
authentification, et en fonction du résultat obtenu l'application
autorise ou non l'utilisateur en question à accéder à la
ressource demandée.
b. La deuxième option: consiste
à laisser à l'application(bénéficiant de notre
service) le soin de gérer son interface et derrière il va faire
appel au service cloud via une API pour authentifier ses utilisateurs.
1.3.2. Objectifs
spécifiques:
Afin d'atteindre l'objectif principal, nous nous sommes
fixés des objectifs spécifiques à atteindre durant les 6
mois accordés au projet. Ces objectifs sont les suivants:
1. Inscription d'un client
2. Connexion d'un client
3. Récupérer une requête
d'authentification
4. Envoyer un réponse d'authentification
5. Interface d'administration permettant au client de:
a. Ajouter des applications à sécuriser
b. Faire des configurations pour chaque application
c. Supprimer une application
d. Fournir des utilisateurs pour ses applications
e. Consulter son activité.
f. Choisir un mode et une méthode de paiement.
g. Annuler sa souscription au service
1.4. Motivations
Ce projet de mémoire tire sa principale motivation d'un
constat observé auprès des développeurs de tous les
niveaux. Qu'ils soient débutants, juniors ou même seniors, tous
les développeurs font face aux mêmes inquiétudes et aux
mêmes tracas quand il s'agit de gérer la sécurité
des applications qu'ils développent. Ceci est surtout dû au fait
que la sécurité, bien qu'indispensable, est un domaine à
part entière. Développer une application sécurisée
est une tâche fastidieuse et chronophage, qui, bien souvent, aboutit
à un résultat peu ou pas satisfaisant.
Avec cette plate-forme cloud, il sera possible pour le
développeur de déléguer sa sécurité à
un service tiers et spécialisé, ce qui lui fera gagner en temps,
en productivité mais aussi en performance.
La réalisation de ce projet me permettra
également, en tant qu'étudiante, d'approfondir mes
compétences dans le domaine du développement logiciel mais
également d'en acquérir de nouvelles dans le domaine de la
sécurité tout ceci, en me familiarisant avec les nouvelles
technologies de cloud computing.
2. Chap2:
Travaux existants
Introduction
L'IAM pour Identity and Access Management (Gestion des
Identités et des Accès en français) est une solution
permettant de gérer de manière sûre et efficace les
identités numériques des utilisateurs et les privilèges
d'accès associés. Les administrateurs IAM peuvent définir
et modifier les rôles des utilisateurs, suivre et rendre compte de
l'activité des utilisateurs, mais aussi appliquer les politiques de
conformité réglementaire et de l'entreprise pour protéger
la sécurité et la confidentialité des données.
Une solution IAM définit ce à quoi les
utilisateurs ont accès, ce qu'ils ont comme droit, rôle, et ce qui
leur est refusé. L'objectif d'une stratégie efficace d'IAM est de
répondre aux questions suivantes:
a. Les bons utilisateurs ont-ils accès aux bonnes
ressources?
b. Les systèmes en place sont-ils suffisants pour
gérer les accès?
c. Que font les utilisateurs avec les accès qui leurs
sont accordés?
Une solution IAM gère le cycle de vie des utilisateurs,
s'assure que les utilisateurs sont ceux qu'ils prétendent être et
que tout ceci est facile d'accès. L'identité numérique est
une source centrale de vérité dans la gestion des
identités et des accès. Elle fait référence aux
informations d'authentification dont un utilisateur a besoin pour
accéder à des ressources en ligne ou sur un réseau pour
grande entreprise. Les solutions IAM font correspondre ces informations
d'authentification, appelées facteurs d'authentification, aux
utilisateurs ou aux entités qui demandent l'accès aux
applications, principalement au niveau de la couche applicative (couche 7). Ces
facteurs permettent de vérifier que les utilisateurs sont bien ceux
qu'ils prétendent être. Trois des facteurs d'authentification les
plus couramment utilisés pour l'IAM sont quelque chose que l'utilisateur
connaît (comme un mot de passe); quelque chose que l'utilisateur
possède (comme une carte magnétique); et quelque chose que
l'utilisateur est (une propriété physique, comme une empreinte du
pouce). Un utilisateur doit généralement fournir une combinaison
de facteurs d'authentification pour qu'une application d'authentification
puisse confirmer son identité et lui accorder l'accès aux
ressources protégées qu'il est autorisé à consulter
ou à utiliser.
Un système IAM présente des avantages comme le
renforcement de la sécurité car avec un système IAM, les
entreprises peuvent appliquer les mêmes politiques de
sécurité dans toute l'entreprise. Les méthodes d'IAM comme
l'authentification unique (SSO) et la MFA réduisent également le
risque que les informations d'authentification des utilisateurs soient
compromises ou utilisées de manière abusive, car les utilisateurs
n'ont pas besoin de créer et de conserver plusieurs mots de passe. Et
parce que les utilisateurs ont besoin d'une autorisation fondée sur des
preuves pour accéder à des ressources protégées, il
y a moins de chances qu'un acteur malveillant obtienne l'accès à
des ressources critiques.
Au sein d'un
système IAM la conformité est également
améliorée en aidant les organisations à répondre
aux exigences de nombreux mandats de conformité liés à la
sécurité et à la confidentialité des
données. Par exemple, l'IAM peut contribuer à la
conformité avec la loi HIPAA (Health Insurance Portability and
Accountability Act), qui exige des organisations qui traitent des informations
de santé protégées qu'elles mettent en oeuvre un
accès électronique sécurisé aux données de
santé.
Les entreprises peuvent
utiliser des méthodes d'IAM telles que le SSO, le MFA, le contrôle
d'accès basé sur les rôles (RBAC) et les « moindres
privilèges » (donnant aux utilisateurs et aux entités telles
que les applications logicielles le minimum d'accès requis pour
effectuer une tâche) pour répondre au mandat de la loi HIPAA.
L'IAM présente de nombreux autres avantages comme la réduction
des coûts informatiques, la croissance de la productivité des
utilisateurs ou employés dans le cas d'une entreprise.
Avec un IAM on peut
donc autoriser ou bloquer l'accès aux ressources, restreindre
l'accès à la plateforme, empêcher la transmission des
données sensibles et fournir des rapports qui aident les organisations
à prouver leur conformité avec les réglementations en
matière de sécurité et de confidentialité des
données.
2.1.
Concepts de base
2.1.1. JWT
Un JSON Web Token ou JWT est un access token
(jeton d'accès) aux normes RFC 7519 qui permet un échange
sécurisé de données entre deux parties. Il
contient toutes les informations importantes sur une entité,
ce qui rend donc la consultation d'une base de données superflue et la
session n'a pas besoin d'être stockée sur le serveur (stateless
session).
La génération d'un JWT peut se
résumer en troisétapes assez
élémentaires :
1) L'utilisateur se connecte depuis
votre client qui va envoyer une requête HTTP au serveur (via l'API du
serveur) avec, par exemple, un couple email/mot de passe
2) Si les informations de connexion sont
correctes, le serveur génère un jeton
JWT
3) Le serveur envoie le JWT
généré au client, qui
le conservera de son côté pour pouvoir
le retourner au serveur à chaque nouvelle
requête
Figure 2.1:
Processus de génération d'une JWT
Ainsi, dès que le serveur reçoit une
requête, si celle-ci contient un JWT, le serveur vérifiera la
validité du JWT et saura quel utilisateur est à
l'origine de la requête.
Un JWT signé se compose de trois parties codées
en base64 et séparées par un point:
Figure 2.2:
Différentes parties d'une JWT
? L'en-tête ou header: est en
général composé de deux parties et fournit des
informations essentielles sur le token. Il contient le type de token et
l'algorithme de signature et/ou de chiffrement utilisé. Un exemple de
header de JWT
? La charge utile ou payload: cette partie du
JWT est la partie qui contient les informations qui doivent être
transmises à l'application. C'est là que sont définis
certains standards qui déterminent quelles données doivent
être transmises. Les informations sont fournies en paire
clé/valeur, les clés sont appelées «claims» dans
les JWT. Il existe trois types de claims: les claims réservées,
les claims publiques et les claims privées.
? La signature d'un JSON Web Token est
créée grâce au codage base64 de l'en-tête et de la
charge utile et la méthode de signature/cryptage
spécifiée. La structure est définie par la JSON Web
Signature (JWS), une norme standardisée selon le
RFC 7515. Pour que la
signature fonctionne, il est nécessaire d'utiliser une
clé secrète connue uniquement de l'application
source. Cette signature vérifie d'une part que le message ne sera pas
modifié pendant le transfert. D'autre part, dans le cas d'un jeton
signé avec une clé privée, il authentifie également
l'expéditeur du JWT.
Ainsi, voici à quoi ressemblera notre JWT :
Figure 2.3:
Exemple d'une JWT
2.1.2. Access
token
Un jeton d'accès OAuth
ou access token en anglais est une chaîne que le client OAuth utilise
pour faire des demandes au serveur de ressources.
Les jetons d'accès
n'ont pas besoin d'être dans un format particulier, et en pratique,
divers serveurs OAuth ont choisi de nombreux formats différents pour
leurs jetons d'accès.
Un certain nombre de propriétés des jetons
d'accès sont fondamentales pour le modèle de
sécurité d'OAuth :
? Les jetons d'accès ne doivent pas être lus ou
interprétés par le client OAuth. Le client OAuth n'est pas le
public visé par le jeton.
? Les jetons d'accès ne transmettent pas
l'identité de l'utilisateur ou toute autre information sur l'utilisateur
au client OAuth.
? Les jetons d'accès ne doivent être
utilisés que pour effectuer des requêtes auprès du serveur
de ressources. De plus, les jetons d'identité ne doivent pas être
utilisés pour effectuer des demandes au serveur de ressources.
2.1.3. Refresh token
Un refresh token ou jeton
de rafraîchissement OAuth est une chaîne que le client OAuth peut
utiliser pour obtenir un nouveau jeton d'accès sans l'interaction de
l'utilisateur.
Un jeton de
rafraîchissement ne doit pas permettre au client d'obtenir un
accès au-delà de la portée de l'octroi initial. Le jeton
de rafraîchissement existe pour permettre aux serveurs d'autorisation
d'utiliser des durées de vie courtes pour les jetons d'accès sans
avoir à impliquer l'utilisateur lorsque le jeton expire.
2.1.4. ID token
Un id token ou jeton
d'identité est un jeton de sécurité qui contient des
déclarations concernant l'authentification d'un utilisateur final par un
serveur d'autorisation lors de l'utilisation d'un client, et
éventuellement d'autres déclarations demandées. Le jeton
d'identité est représenté sous la forme d'un JSON Web
Token (JWT) avec signature cryptographique (JWS).
Les déclarations suivantes sont utilisées dans
le jeton ID pour tous les flux OAuth 2.0 utilisés par OpenID
Connect (on a cité là que les déclarations
obligatoires et quelques unes qui peuvent l'être ou non selon le cas. Il
en reste d'autres qui ne seront pas cités):
iss: Identifiant de l'émetteur pour
l'émetteur de la réponse. La valeur iss est une URL sensible
à la casse utilisant le schéma https qui contient des composants
de schéma, d'hôte et, éventuellement, de numéro de
port et de chemin d'accès et aucun composant de requête ou de
fragment. sub: Identifiant du sujet. Un identifiant
localement unique et jamais réaffecté au sein de
l'émetteur pour l'utilisateur final, qui est destiné à
être consommé par le client, par exemple, 24400320 ou
AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4. Il ne doit pas dépasser 255
caractères ASCII. La sous-valeur est une chaîne sensible à
la casse. aud: Public(s) auquel ce jeton d'identité
est destiné. Il doit contenir le client_id OAuth 2.0 de la partie
utilisatrice comme valeur d'audience. Il peut également contenir des
identifiants pour d'autres publics. Dans le cas général, la
valeur aud est un tableau de chaînes sensibles à la casse. Dans le
cas spécial courant où il n'y a qu'une audience, la valeur aud
peut être une chaîne unique sensible à la
casse. exp Heure d'expiration à partir de
laquelle le jeton d'identité ne doit pas être accepté pour
le traitement. Le traitement de ce paramètre nécessite que la
date / heure actuelle doit être antérieure à la date /
heure d'expiration répertoriée dans la valeur. Sa valeur est un
nombre JSON représentant le nombre de secondes à partir de
1970-01-01 T 0:0:0 Z mesuré en UTC jusqu'à la date /
heure. iat: Heure à laquelle le JWT a
été émis. Sa valeur est un nombre JSON représentant
le nombre de secondes à partir de 1970-01-01 T 0:0:0 Z mesuré en
UTC jusqu'à la date / heure.
auth_time: Heure à laquelle
l'authentification de l'utilisateur final s'est produite. Sa valeur est un
nombre JSON représentant le nombre de secondes à partir de
1970-01-01 T 0:0:0 Z mesuré en UTC jusqu'à la date / heure.
Lorsqu'une demande max_age est effectuée ou lorsque auth_time est
demandé en tant que revendication essentielle, cette revendication est
obligatoire,sinon, son inclusion est facultative. nonce:
Valeur de chaîne utilisée pour associer une session
client à un jeton d'identité et pour atténuer les attaques
de relecture. La valeur est transmise sans modification de la demande
d'authentification au jeton ID. S'il est présent dans le jeton
d'identité, les clients doivent vérifier que la valeur de
réclamation nonce est égale à la valeur du
paramètre nonce envoyé dans la demande d'authentification. S'ils
sont présents dans la demande d'authentification, les serveurs
d'autorisation doivent inclure une réclamation nonce dans le jeton
d'identité, la valeur de réclamation étant la valeur nonce
envoyée dans la demande d'authentification. Les serveurs d'autorisation
ne devraient effectuer aucun autre traitement sur les valeurs non
utilisées. La valeur nonce est une chaîne sensible à la
casse.
Voici un exemple non normatif de l'ensemble de revendications
(l'ensemble de déclarations JWT) dans un jeton
d'identification :
Figure 2.4:
Exemple d'un ID Token
2.1.5. OAUTH
2.0
OAUTH 2.0 est un protocole qui sert à faire de la
délégation de l'accès et de l'autorisation. Le but
étant de savoir ce qu'on est autorisé à faire. Il fait
intervenir quatre acteurs principaux à savoir: le client,
l'Authorization Server AS, le Resource Owner RO et le Resource Server RS.
? Flow OAuth 2:
OAuth 2 propose différents types de flows. Le flow est
le processus de délivrance de l'access token. Le type de flow à
utiliser dépend le plus souvent du type de l'application, mais d'autres
facteurs peuvent également entrer en jeu comme le niveau de confiance
accordé au client.
Pour les applications web s'exécutant côté
serveur, le flow utilisé est l'Authorization Code Flow. Par
conséquent, c'est celui que nous allons traiter dans ce document.
? Terminologie OAuth 2:
Dans chaque flow, OAuth 2 garde la même terminologie.
Autrement dit, les acteurs concernés par chacun des flows gardent la
même terminologie. Ces acteurs sont:
? Le Resource Owner RO: c'est l'entité
qui octroie les droits d'accès à une ressource
protégée. Typiquement, l'utilisateur.
? Le Client: c'est l'application ou le
service qui souhaite accéder à une ressource
protégée au nom du RO.
? L'Authorization Server AS: c'est le serveur
qui est chargé d'authentifier le RO. C'est aussi lui qui fournit les
jetons d'accès Access Token.
? Le Resource Server RS: c'est le serveur qui
détient la ressource protégée.
? User Agent UA: Agent utilisé par le
RO pour interagir avec le client (par exemple, un navigateur ou une application
native).
? Authorization Code Flow:
a) Le Client envoie à
l'AS une requête composée de trois
éléments: le clientID qui va identifier le client
auprès de l'AS, la callback url qui sera
utilisée par l'AS pour recontacter le client et le
scope qui peut être un email, un profil, une date de naissance, ....
Ces informations sont demandées par le client au
RO par l'intermédiaire du UA.
b) L'AS reçoit la requête et
demande au RO de s'identifier.
c) Le RO entre ses identifiants à
travers le UA
d) Si les identifiants sont acceptés par
l'AS, ce dernier utilise la callback url pour rediriger le
UA. Le client va l'intercepter. Dans cette
url, le client trouvera un authorization code qui a
été fourni par l'AS. Ce code est passé
par référence et a une durée de vie limitée et donc
à usage unique.
e) Le client contacte l'AS
avec l 'authorization code.
f) L'AS renvoie un JWT dans le cas où
le code d'autorisation est valide. Cette JWT contient:
? Un access token qui permet d'accéder à la
ressource avec une durée de vie limitée
? Et un refresh token qui permet de rafraîchir l'access
token
Figure 2.5:
Illustration du fonctionnement d'OAuth2 - Authorization code
flow
2.1.6. OIDC pour OpenID Connect
Au niveau du protocole
OAuth2., l'API ou le Resource Server RS qui fournit les informations au
Resource Owner n'a aucun moyen de savoir si l'utilisateur est toujours
connecté ou non. Ce qui pose problème parce qu'un client peut
continuer à récupérer un access token à partir du
refresh token alors que le Resource Owner RO est déconnecté, le
RS n'a aucun moyen de le savoir. En cas d'authorization code injection, ou
d'access token injection ou une autre attaque, l'attaquant peut accéder
aux ressources du RO donc usurper l'identité du Resource Owner sur un
service utilisant le protocole OAuth2. OpenID Connect est une couche qui
vient s'ajouter à OAUTH 2.0 en mettant à disposition en plus de
l'access token et du refresh token, un ID Token qui va porter l'identité
de la personne connectée. OIDC a pour but d'identifier la personne
derrière le navigateur ou l'application connecté à un
service. La norme OIDC a été conçue spécifiquement
pour l'authentification des utilisateurs.
2.1.7. SAML pour Security Assertion Markup
Language
C'est un protocole ouvert et standardisé basé
sur XML, il permet d'échanger des infos d'authentification et
d'autorisation entre des entités ou domaines de sécurité.
Il gère le processus d'échange entre :
Service Provider(SP) qui protège
l'accès aux ressources demandées (site web, application, etc) en
appliquant une politique de sécurité.
Identity Provider(IdP) qui répond
à la demande du SP, il est chargé d'authentifier l'utilisateur et
de forger les infos associées à l'identité et qui sont
demandées par le SP.
2.1.8. SSO pour Single
Sign On / Single Sign Out
Dans ce modèle l'utilisateur n'a besoin de
s'authentifier qu'une fois (d'où le nom de SSO) et il est de facto
authentifié auprès des autres fournisseurs de service. On utilise
des credentials unique quelque soit le service demandé au sein du
domaine d'identité. Ceci est aussi valable pour la déconnexion
(Single Sign Out)
2.1.9.
Fédération des identités
C'est un modèle de gestion de données dans
lequel les SP(Service Provider) sont groupés pour former une
fédération. Chacun des SP sera donc en mesure de
reconnaître les identifiants provenant d'autres SP de la même
fédération. La fédération donne aux utilisateurs
l'illusion d'utiliser qu'un seul identifiant (mais derrière, il
s'identifie auprès de chaque IdP). Chaque SP utilise son propre IdP mais
reconnaît les identités provenant d'autres SP
2.2. L'outil Keycloak
Keycloak est un IAM (Identity and Access Management)
open source, licencié par Apache et pris en charge par Red Hat. Il est
écrit en Java et prend en charge les protocoles de
fédération d'identité par défaut SAML V2, OIDC,
OAUTH2.0. Le but de Keycloack d'un point de vue conceptuel c'est de faciliter
la protection des applications et des services au moyen de configurations. Il
fait du SSO, et il utilise la fédération d'identités pour
se connecter à des serveurs comme Active Directory ou LDAP.Il est
né du besoin commun des entreprises d'avoir un outil centralisé
d'authentification et d'autorisation. Il apporte une gestion simplifiée
via la console. Il gère l'authentification et l'identification.
Fonctionnalités:
Keycloak permet entre autre de :
? Sécuriser les interfaces graphiques (Il va agir comme
un point d'entrée)
? Sécuriser les API
? Faire du SSO (un seul point d'entrée)
? Gérer les mots de passes
? Intégrer des logins sociaux (google, github,
facebook)
? Fédération des identités avec les
annuaires LDAP et Active Directory
Déploiement:
Keycloak peut être déployer sur :
? Machine Virtuel ou Machine physique
? Conteneurs et Kubernetes (operator)
? En mode Standalone ou cluster
Technologies et base de données:
Keycloak embraque les technologies :
? Docker
? Openshift
? Kubernetes
? Open JDK
? Podman
Keycloak peut s'interfacer avec les bases de
données:
? Locale (h2)
? Mariadb/Mysql
? Postgres,...)
Authentication Flow
Sous keycloak la notion d'authentication flow est
évoquée. Selon la définition de keycloak: «Un flux
d'authentification est un conteneur d'authentifications, d'écrans et
d'actions, pendant la connexion, l'enregistrement et d'autres flux de travail
de {nom_du_projet}.»
En d'autres termes, un flux d'authentification est un ensemble
d'actions s'exécutant lors d'une connexion ou d'une inscription.
Ces actions sont exécutées les unes à la
suite des autres.
? La colonne "Auth Type" est le nom de l'action qui sera
exécutée.
? La colonne "Requirement" définit si l'action est
impérative, alternative, ou désactivée :
? Required => Cette action doit être terminée
avec succès avant de passer à la suite.
? Alternative => Même si l'action n'est pas
réussie, le flow peut continuer.
? Disabled => L'action n'est pas activée.
Keycloak offre plusieurs flux d'authentification et permet de
passer facilement d'un flow à l'autre.
La mise en place d'une politique de mot passe est
également offerte par l'outil keycloak et peut être
gérée d'une manière simple et efficace. Il est possible
de:
? Définir la complexité requise pour les mots de
passe
? Empêcher la réutilisation d'anciens mots de
passe
? Exiger une mise à jour régulière des
mots de passe
? Définir des intervalles de hachage
Un autre point important de keycloak est qu'il respecte les
normes OWASP(The Open Web Application Security Project) pour
l'implémentation des ses protocoles et permet ainsi à ses
applications d'être en adéquation avec les normes de
sécurité définies par OWASP.
2.3. Étude de l'existant
Les outils de gestion des identités et des accès
(IAM), sont de plus en plus proposés sur le marché de la gestion
de la sécurité des applications, renfermant tout un tas de
fonctionnalités utiles pour la mise en place d'un système de
sécurité performant. Ce chapitre présente les travaux
réalisés par plusieurs entreprises apportant des solutions
alternatives à notre problématique et fait ressortir la
principale plus value qu'a notre projet par rapport à ses concurrents.
Rappelons l'objectif fondamental de notre solution afin de définir les
critères et les fonctionnalités de ces outils à analyser
pour mener un état de l'art pertinent. Notre solution a pour principal
objectif la réalisation d'une plateforme cloud de gestion des
identité et des accès basée sur un outil d'IAM très
connu «Keycloak», ceci afin de permettre aux développeurs
d'optimiser la sécurité des leurs applications sans avoir
à implémenter ou à configurer grand chose.
2.3.1. RH-SSO
RH-SSO pour Red Hat Single Sign On est une solution SSO
développée par Red Hat, voici une présentation de
l'outil tiré du site même de Red Hat:
«Red Hat Single Sign-On (RH-SSO) est basé sur le
projet Keycloak et vous permet de sécuriser vos applications Web en
fournissant des fonctionnalités d'authentification unique (SSO)
basées sur des normes populaires telles que SAML 2.0, OpenID Connect et
OAuth 2.0. Le serveur RH-SSO peut agir en tant que fournisseur
d'identité basé sur SAML ou OpenID Connect, faisant office de
médiateur avec votre annuaire d'utilisateurs d'entreprise ou un
fournisseur SSO tiers pour les informations d'identité et vos
applications via des jetons basés sur les normes.»
RH-SSO est une solution native. Vous pouvez l'installer
en télécharger un fichier zip directement sur le site de Red Hat
dans la partie dédiée à RH-SSO, en local vous avez la
possibilité de l'utiliser en mode standalone, et il fonctionne
dès le départ avec sa propre base de données
intégrée (local uniquement). Pour les déploiement
réels qui seront exécutés en production, vous devrez
décider de la manière dont vous souhaitez gérer la
configuration du serveur au moment de l'exécution (mode standalone ou
domain), configurer la base de données partagée pour le stockage
de RH-SSO pour qu'il fonctionne dans un cluster.
RH SSO permet entre autres de faire de l'authentification
unique (Single-Sign On), de la fédération des utilisateurs, du
courtage d'identité et connexion sociale et il met à disposition
une API Rest pour la spécification des utilisateurs, leurs rôles
et groupes.Les connecteurs clients Red Hat SSO permettent de sécuriser
très facilement les applications et les services. Il fournit des
adaptateurs pour un certain nombre de plateformes et de langages de
programmation, mais s'il n'y en a pas un de disponible pour une plateforme
choisie, il est possible d'utiliser n'importe quelle bibliothèque de
ressources OpenID Connect SAML 2.0.
L'utilisation de RH SSO ne demande aucun frais, il suffit
d'une installation et de quelques configurations pour mettre en place une base
de la sécurité de ses applications.
2.3.2.
FusionAuth
FusionAuth est une de seules solutions d'authentification,
d'autorisation et de gestion des utilisateurs conçues pour les
développeurs. Il se déploie sur n'importe quelle application en
quelques minutes. Chaque fonctionnalité est présentée sous
forme d'API, vous offrant ainsi une flexibilité totale pour gérer
tous les cas d'utilisation. Ces fonctionnalités incluent
l'authentification unique ou SSO, l'authentification à deux facteurs,
les comptes d'utilisateurs multiples. FusionAuth offre un accès et
contrôle à distance, l'authentification multi facteurs MFA,
accès mobile et d'autres fonctionnalités.
Il est possible d'utiliser FusionAuth Cloud sur un autre
hébergeur, vous achetez le service fusionAuth et l'héberger
ailleurs ou vous choisissez le plan FusionAuth Community qui est gratuit et
dispose des fonctionnalités d'authentification de base dont la plupart
des applications ont besoin. FusionAuth offre également un service
d'hébergement cloud FusionAuth Cloud, un support technique qui
nécessite un abonnement.
FusionAuth est disponible dans plus de 12 pays, tous hors du
continent Africain.
2.3.3. Okta
Créé en janvier 2009, Okta est une entreprise
américaine basée à San Francisco. Okta est un service
cloud de gestion des identités et des accès à la demande
qui permet aux entreprises d'accélérer l'adoption
sécurisée de leurs applications web, à la fois dans le
cloud et derrière le pare-feu.
Les entreprises partout dans le monde se tournent rapidement
vers les services de cloud tels que Salesforce, WebEx, Google Apps, Workday ou
NetSuite pour alimenter leurs processus d'affaires. Elles ont besoin d'une
solution pour les aider à adopter, déployer, sécuriser et
gérer ces services. Cette solution devrait elle-même être
construite à partir de zéro en tant que service fiable,
évolutif, sécurisé et à la demande. Okta est ce
service. En tant que service, Okta fournit une solution complète et
clé en main qui répond aux besoins non seulement de
l'informatique, mais aussi des utilisateurs finaux et des chefs d'entreprise -
pas de travail de personnalisation ou d'engagement à long terme
requis.
Okta dispose d'une version gratuite, d'une version d'essai
gratuite et offre un abonnement. Ses clients types sont les auto entrepreneurs,
les petites et moyennes entreprises et les grandes entreprises. Il est
disponible en Australie, au Canada, en Chine, au Royaume Uni, en Inde et aux
États unis.
Okta offre plusieurs fonctionnalités comme la gestion
des utilisateurs, la reconnaissance automatique des utilisateurs, les
notifications en temps réel, le stockage de mot de passe chiffré
et bien d'autres.
2.3.4. Auth0
Auth0 est une plateforme cloud de gestion des identités
conçue pour aider les entreprises de divers secteurs tels que la
finance, la santé, les médias, la vente au détail et le
tourisme à gérer en toute sécurité les
activités de connexion, les profils d'utilisateurs et les identifiants.
Auth0 à été créé en 2013 par Eugenio Pace et
Matías Woloski. Ses fonctionnalités incluent les domaines
personnalisés, l'authentification intégrée, SSO, le MFA,
la migration de bases de données, la liaison de comptes, la
rétention des journaux et la diffusion continue.
La plateforme permet aux développeurs de créer
des informations de connexion universelles pour les employés et de
contrôler les connexions sur les réseaux sociaux,
l'authentification multifactorielle et la détection des anomalies pour
les applications enregistrées. Auth0 comprend un tableau de bord de
gestion des utilisateurs, qui aide les administrateurs à gérer la
réinitialisation des mots de passe, les autorisations basées sur
les rôles et la création/suppression des comptes utilisateur.
Auth0 gère une base de données d'informations d'identification
brassée, ce qui permet aux équipes de sécurité de
vérifier et de bloquer les tentatives de connexion non autorisées
en temps réel.
Auth0 s'intègre à diverses applications tierces
telles que Salesforce, Box, Slack, Sentry, Zoom, Dropbox, Egnyte, Zendesk,
CloudBees, etc. Le logiciel implémente des connexions sans mot de passe
via un widget intégrable, qui authentifie automatiquement les
utilisateurs en envoyant un OTP (One-time Password) par e-mail ou SMS ou via
des notifications push et des capteurs biométriques. Les entreprises
peuvent également connecter des applications sur différents
appareils, ajouter ou supprimer des utilisateurs, configurer des règles
d'accès et créer des pages de connexion personnalisées.
Auth0 est disponible dans plus de 119 pays et offre une
version d'essai gratuite et un abonnement mensuel. Il vise principalement les
Auto Entrepreneurs, les petites et moyennes entreprises et également les
grandes entreprises.
NB: Depuis Mai 2021 les entreprises Okta et
Auth0 ont fusionnées mais il reste cependant possible d'utiliser Auth0
indépendament de Okta; «Auth0 fonctionnera en tant qu'entité
indépendante au sein d'Okta et restera dirigée par son CEO et
cofondateur Eugenio Pace sous la supervision directe de Todd McKinnon, CEO et
cofondateur d'Okta. Les deux plateformes continueront à exister en
parallèle, sans interruption de maintenance ni d'investissements,
l'objectif final étant de les intégrer au fil du temps. Cette
fusion accélérera l'innovation et rendra la solution Okta
Identity Cloud encore plus attrayante pour l'ensemble des clients et
utilisateurs.» Tiré d'un article publié par Okta le 3 Mai
2021 sur son site internet okta.com.
2.3.5. AWS
Cognito
Amazon Cognito est un service cloud appartenant à AWS
(Amazon Web Services). C'est un logiciel de gestion des identités et des
accès conçu pour aider les entreprises à gérer
l'inscription des utilisateurs, leur connexion et l'accès aux
applications mobiles et web via un portail unifié. La plateforme permet
aux développeurs de se connecter à l'aide de fournisseurs
d'identité d'entreprises tels que OpenID Connect et SAML 2.0 et de
divers fournisseurs d'identité sociale tels que Amazon, Apple, Google et
Facebook. Amazon Cognito prend en charge l'authentification multifactorielle et
la fonctionnalité de cryptage des données et est conforme
à diverses normes statutaires, notamment SOC, ISO/IEC, PCI DSS, HIPAA,
etc. Les organisations peuvent personnaliser l'interface utilisateur avec des
logos et des couleurs personnalisées pour établir
l'identité de la marque. Les autres fonctionnalités comprennent
un répertoire centralisé des utilisateurs, la gestion des
accès, l'authentification adaptative, les autorisations basées
sur les rôles, etc.
Conclusion
Une étude exhaustive de toutes les solutions de gestion
des identités et des accès ne pouvant être faite dû
à la pluralité des solutions sur le marché. Nous avons,
cependant, suite à cette étude, une idée globale et
déterminante des services fournis par les différents acteurs du
domaine. Qu'il s'agisse de la solution RH-SSO de Redhat, de Okta et Auth0
qui ont fusionné ou de Amazon Cognito d'AWS, le principe reste quasi
identique, ils offrent tous un service très bien fait qui répond
aux besoins des entreprises de toute taille. FusionAuth quant à elle est
l'une des rares solutions pensées pour les développeurs.
Nous avons également pu constater qu'à nos
jours, ces solutions sont disponibles dans divers paysen dehors de l'Afrique
mis à part Auth0 qui est disponible en Guinée-Bissau et en
Afrique du Sud.
Nous conclurons donc que malgré l'existence d'une
multitude de solutions de gestions des identités et des accès,
clouds ou natives, le besoin d'une solution cloud de gestion des
identités et des accès facilement intégrable par les
développeurs et ou les entreprises ou professionnels, dans n'importe
quelle application et surtout en afrique, demeure d'actualité. Nous
pouvons affirmer que notre plateforme, non seulement trouvera sa place
mais plus encore elle se démarquera par sa cible principale: les
développeurs, et son emplacement(l'Afrique) qui n'est encore pas ou
très peu couvert par les plateformes existantes.
3. Chap 3: Solution
Proposée
Introduction
Après l'état de l'art sur les solutions de
gestion des identités et des accès existantes, nous allons, dans
ce chapitre, nous intéresser à l'étude de la solution que
nous proposons. Nous allons dans un premier temps spécifier les besoins
fonctionnels et non fonctionnels du système et identifier les acteurs.
Nous procéderons par la suite à l'analyse et la conception des
besoins fonctionnels et nous terminerons par la réalisation du
système qui enveloppe l'implémentation, le déploiement et
les tests de la solution. Dans cette partie nous apporterons également
une justification du choix des technologies et outils adoptés pour
l'implémentation de la solution.
3.1. Spécification des
besoins du système
L'analyse de la thématique et des différentes
propositions existantes sur le marché ainsi que la compréhension
des besoins des utilisateurs a permis de dégager les
fonctionnalités qu'offre notre plateforme. Les contraintes auxquelles
est soumis le système pour sa réalisation et son bon
fonctionnement seront décrites par la suite comme étant des
besoins non fonctionnels.
3.1.1. Identification des acteurs
Deux types d'acteurs sont à identifier. Les acteurs qui
interagissent directement avec notre système, c'est sont les acteurs
principaux et les acteurs qui participent à la réalisation de
certaines actions au sein de notre système plus communément
appelés les acteurs secondaires.
a. Les acteurs qui interagissent directement avec
notre système sont:
Le développeur: c'est l'acteur qui
s'inscrit sur la plateforme et ajoute ses applications.
L'app-client: Représente l'application
d'un développeur
Le end-user: qui est l'utilisateur final de
l'application du développeur.
Tout au long de l'analyse ces appellations seront
conservées.
b. Les acteurs secondaires sont les
suivants:
Keycloak: intervient dans la
réalisation de bon nombre des interactions des nos principaux acteurs
avec le système.
Le système de paiement: qui intervient
lors du paiement d'une facture ou lors de l'abonnement à un plan qui
inclut le paiement d'une facture de 0 francs.
3.1.2. Besoins fonctionnels
Dans cette partie, nous dégageons l'ensemble des
besoins fonctionnels auxquels devra répondre notre solution cloud.
Les besoins fonctionnels et les attentes par rapport à
notre plateforme varient suivant l'acteur.
Les besoins fonctionnels auxquels doit répondre notre
plateforme se résume dans les points suivants:
Le système doit permettre au
client:
a. De s'inscrire
b. De se connecter
c. D'ajouter une application
d. De fournir ses utilisateurs
e. De voir la liste de ses applications
f. De configurer ses applications
g. De consulter son activité
h. De souscrire à un abonnement mensuel
i. De payer que ce qu'il consomme PAYG(Pay As You Go)
j. De choisir un mode de paiement
k. D'ajouter des utilisateurs
l. D'accéder à une console
m. D'Activer la fédération des utilisateurs
n. De supprimer une application du service
o. De mettre fin à son abonnement
p. De supprimer son compte
Le système doit pouvoir faire les actions
suivantes auprès de keycloak:
a. S'identifier
b. Créer un realm pour chaque utilisateur inscrit
c. Créer un client keycloak dans le realm du client
inscrit à notre plateforme, à chaque fois que celui ci
crée une application
d. Ajouter un User Provider pour gérer les utilisateurs
d'un client
e. Configurer le realm d'un client
f. Gérer les utilisateurs, leurs rôles et groupes
d'un client
g. Modifier un realm
h. Supprimer un realm
i. Modifier un client
j. Supprimer un client
3.1.3. Besoins
non fonctionnels
Dans cette section, nous dégageons l'ensemble des
besoins non fonctionnels auxquels devrait répondre notre plateforme.
Il s'agit des besoins qui caractérisent le
système. Ce sont des besoins en matière de performance,de type
matériel ou de type conceptuel. Ces besoins peuvent concerner les
contraintes d'implémentation comme le langage de programmation, le type
de la base de données, le type du provider, ....
L'ensemble des fonctionnalités à
réaliser devront répondre aux besoins suivants:
a. Ergonomie de l'interface: L'application
doit être facile à utiliser, les interfaces utilisateurs doivent
être conviviales c'est à dire simples, ergonomiques et
adaptées à l'utilisateur
b. Fiabilité: Il s'agit ici de la
fiabilité de notre plateforme par rapport aux résultats qu'elle
transmet aux clients lorsque ces derniers envoient une requête
d'authentification.
c. Sécurité: La plateforme qui
s'occupe de la sécurité des applications de ses clients doit
elle-même répondre aux exigences de sécurité les
plus strictes.
d. Scalabilité: Notre application doit
être capable de fonctionner de manière optimale avec 1 ou 1 000
000 utilisateur(s). La scalabilité d'un service désigne la
capacité de l'application et de l'infrastructure à s'adapter
automatiquement pour traiter un niveau de sollicitation variable.
e. Élasticité:
L'élasticité est la capacité d'ajuster les ressources
à la hausse ou à la baisse automatiquement. Notre application
doit pouvoir ajuster les ressources disponibles entre ses différents
utilisateurs à la hausse tout comme à la demande, de façon
à ce que chacun ait accès aux ressources nécessaires
à ses besoins.
f. Résilience: On désigne par
résilience la capacité d'un service à continuer de
fonctionner malgré la défaillance d'un ou plusieurs composants
(base de données, serveurs Web, accès réseau, ... ). La
résilience désigne également la capacité du service
à revenir dans un mode normal de façon automatisée. Notre
application doit être en mesure de fournir son service à ses
clients ce même en cas de défaillance d'un ou plusieurs de ses
composants.
g. Performance : L'application doit
être performante c'est-à-dire à travers ses
fonctionnalités, répondre à toutes les exigences des
usagers d'une manière optimale.
h. Mesurable: Le principe des plateformes
cloud est le Pay As You Go c'est-à-dire que l'utilisateur ne paye que ce
qu'il consomme et pour cela il doit être possible de mesurer sa
consommation auprès de son fournisseur.
3.1.4. Analyse
et conception des besoins fonctionnels
Une identification et une analyse méticuleuse des
besoins fonctionnels est indispensable pour la réalisation d'une
conception qui répond aux exigences de notre plateforme.
a. Diagramme de cas
d'utilisation
La connaissance des fonctionnalités à
implémenter nous a permis d'établir le diagramme de cas
d'utilisation de la plateforme.
Nous avons élaboré un diagramme de cas
d'utilisation global dans lequel nous avons représenté des
packages pour un souci de transparence et de lisibilité. Chaque package
sera représenté de façon détaillée par la
suite.
Figure 3.1:
Diagramme de cas d'utilisation globale de l'application
Nous avons jugé nécessaire de représenter
les actions que notre système aura sur celui de keycloak dans un
diagramme à part. Figure suivante.
Figure 3.2:
Diagramme de cas d'utilisation illustrant les actions de notre système
keycloak
Par la suite nous allons montrer les diagrammes
détaillés de chaque package de notre diagramme de cas
d'utilisation globale.
Figure 3.3:
Package Abonnement
Figure 3.4:
Package Activity
Figure 3.5:
Package AddUsers
Figure 3.6:
Package Application
Figure 3.7:
Package AppRequest
Figure 3.8:
Package Authentication
Figure 3.9: Package
Payment
b. Diagramme de
Séquence
? Diagramme de séquence
Authentification
Figure 3.10:
Diagramme de séquence Authentification
? Diagramme de séquence
paiement:
Scénario
Cas d'utilisation: Pay Facture
|
Acteur: Développeur
|
Présentation: Le cas commence lorsque
le développeur clique sur le bouton "payer facture"
|
Scénario Principal:
1. Déclenchement du cas «login»
2. Fin du cas «login»
3. Déclenchement du cas «pay facture»
4. Déclenchement du cas «choose payment
mode»
5. Le mode de paiement est mobile money
Déclenchement du cas «mobile money»
5. 2. Le mode de paiement est carte bancaire
Déclenchement du cas «carte bancaire»
6. Redirige sur le «système de paiement»
|
Table 3.1:
Scénario de Payement
Figure 3.11:
Diagramme de séquence Payement
? Diagramme de séquence
Abonnement
Scénario : Abonnement
Package: Abonnement
|
Acteur: Développeur
|
Présentation: Le cas commence lorsque
le développeur clique sur le bouton "abonnement"
|
Scénario principal:
1. Déclenchement du cas «login»
2. Fin du cas «login»
3. Déclenchement du cas «membership»
4. Déclenchement du cas «view plan's list»
5. Fin du cas «view plan's list»
6. Déclenchement du cas «choose plan»
7. Fin du cas «choose plan»
8. Déclenchement du cas «view plan's
details»
9. Fin du cas «view plan's details»
10. Déclenchement du cas «subscribe to
plan»
11. Déclenchement du cas «pay facture» (0
francs )
12. Fin du cas «pay facture»
13. Fin du cas «subscribe to plan»
14. Fin du cas «choose plan»
15. Fin du cas «membership»
|
Table 3.2:
Scénario Abonnement
Figure 3.12:
Diagramme de séquence Abonnement
? Diagramme de séquence Ajout des
utilisateurs
Scénario Ajout des utilisateurs
Cas d'utilisation: Add Users
|
Acteur: Développeur
|
Présentation: Le cas commence lorsque
le développeur clique sur «add user»
|
Scénario Principal:
1. Déclenchement du cas «login»
2. Fin du cas «login»
3. Déclenchement du cas «add users»
3.1. Le mode d'ajout d'utilisateurs est la
fédération des utilisateur
Déclenchement du cas «user federation»
3.2. Le mode d'ajout est le chargement de fichier
Déclenchement du cas «file upload»
4. Déclenchement du cas «authentication
Mode»
4.1. Le mode d'authentification est le mode API
4.2. Le mode d'authentification est le mode Redirection
5. Déclenchement du cas "Mode de Facturation"
6. Déclenchement du cas "Mode de Payement"
|
Scénario Alternatif
5. a. Le client choisit de prendre un abonnement.
|
Table 3.3:
Scénario Ajout des utilisateurs
Figure 3.13:
Diagramme de séquence AddUsers
? Diagramme de
séquence Envoie d'une requête d'authentification
Scénario Envoie d'une requête
d'authentification
Cas d'utilisation: Send auth request
|
Acteur: App-client
|
Présentation: Le scénario
commence lorsque le n-user d'une application demande à accéder
à une ressource de l'application
|
Scénario Principal:
a. L'application s'authentifie auprès du
système
Déclenchement du cas «authenticate»
BLe système valide l'authentification
1. L'application envoi la requête d'identification
Déclenchement du cas «send auth request»
2. Le mode d'authentification est «redirect mode»
Déclenchement du cas «redirect mode»
3. Le système renvoie une réponse à
l'application
|
Table 3.4:
Scénario Envoie d'une requête d'authentification
Figure 3.14:
Diagramme de séquence requête d'authentification
? Diagramme de séquence Ajout d'une
application
Figure 3.15:
Diagramme de séquence AddApplication
c. Diagramme de
classe
Le diagramme de classe nous a permis d'identifier les
différentes entités de notre système et leurs
relations.
Figure 3.16:
Diagramme de classe
d. Architecture de la solution
L'architecture d'un projet est vitale pour la vie du projet
lui-même et comment celui-ci sera en mesure de faire face à
l'évolution des nouveaux besoins à l'avenir. Les avantages d'une
architecture propre et bien pensée sont nombreuses, en voici quelques
unes:
a. Une architecture bien pensée nous permet d'obtenir
un code propre et lisible
b. Dans une bonne architecture, les morceaux de code sont
réutilisables dans l'application
c. On peut éviter les répétitions en
mettant en place une architecture adaptée.
d. L'évolution d'une application dont l'architecture
est bien pensée est beaucoup plus facile.
Dans ce projet, nous avons opté pour une architecture
trois tiers. L'idée est d'utiliser le principe de séparation
des préoccupations pour éloigner la logique métier
des routes de l'application.
Figure 3.17:
Architecture 3-tiers
La couche de données: Dans
l'architecture 3-tiers, comme en MVC, la couche donnée réside
dans ses propres modules.
Le but est de découper la logique métier des
opérations de base de données. Ainsi, il est possible de faire
évoluer le métier et la base de données
séparément.
La couche métier: Cette couche
implémente les algorithmes "métier" de l'application. Elle est
indépendante de toute forme d'interface avec l'utilisateur. Ainsi elle
doit être utilisable aussi bien avec une interface console, une interface
web, une interface de client riche. Elle doit ainsi pouvoir être
testée en dehors de l'interface web et notamment avec une interface
console. C'est généralement la couche la plus stable de
l'architecture. Elle ne change pas si on change l'interface utilisateur ou la
façon d'accéder aux données nécessaires au
fonctionnement de l'application.
La couche de présentation: Cette
couche est l'interface (graphique le plus souvent) qui permet à
l'utilisateur de piloter l'application et d'en recevoir des informations.
Établissement des règles
Nous pouvons maintenant discuter de ce qu'on appelle
habituellement le flux de la structure de l'application. Le flux de la
structure applicative est un ensemble des règles et des pratiques
courantes à adopter lors du développement d'une application.
Express.js est un excellent framework pour node.js, mais il ne vous donne
aucune indication sur la manière d'organiser votre projet node.js, c'est
sont donc là, les résultats d'une recherche approfondie sur les
méthodes de codages de personnes expérimentées avec les
technologies node.js/express.js qui seront adoptés.
Règle n ° 1: organiser correctement nos
fichiers dans des dossiers
Tout doit avoir sa place dans notre application, alors les
dossiers sont l'endroit idéal pour regrouper les éléments
communs. En particulier, nous voulons définir une séparation
très importante entre les modules de notre application, ce qui nous
amène à la règle n°2.
Règle n ° 2: garder une séparation
claire entre la logique métier et les routes
Les frameworks comme Express.js sont incroyables. Ils nous
fournissent des fonctionnalités incroyables pour gérer les
demandes, les vues et les itinéraires. Avec un tel support, il pourrait
être tentant pour nous d'intégrer notre logique métier dans
nos routes. Mais cela induit rapidement des blocs monolithiques géants
qui se révéleront ingérables, difficiles à lire.
La testabilité de notre application diminuerait, et par
conséquent le temps de développement devient plus long. «
Comment pouvons-nous résoudre ce problème, alors? Où
mettre notre logique métier de manière claire et intelligente?
» La réponse est révélée dans la règle
n°3.
Règle n ° 3: utiliser une couche de
service et Bibliothèque
C'est ici que doit vivre toute notre logique métier. Il
s'agit essentiellement d'un ensemble de classes, qui implémentent la
logique de base de notre application, chacune avec ses méthodes. Je
préfère que les classes soient fusionnées avec les
modèles.
Les « lib » présentent notre
bibliothèque qui sont des fonctions (plus ou moins des middleware)
prédéfinis dans notre application tel que connexion mongo,
authentification, logger, security etc...
Maintenant que nous avons défini ces trois
règles initiales, nous pouvons représenter graphiquement le
résultat comme ceci:
Figure 3.18:
Architecture de l'application
D'après ce graphique nous aboutissons à
l'arborescence suivant pour notre application:
Figure 3.19:
Arborescence des dossiers de l'application
e. Diagramme de composant
En
UML, Les
diagrammes de composants sont utilisés pour visualiser l'organisation
des composants du système et les relations de dépendance entre
eux. Ils fournissent une vue de haut niveau des composants d'un système.
Les composants peuvent être un composant logiciel tel qu'une base de
données ou une interface utilisateur ; ou un composant matériel
tel qu'un circuit, une micropuce ou un dispositif ; ou une unité
commerciale telle qu'un fournisseur, un service de paie ou
d'expédition.
Figure 3.20: Diagramme de
composant
f. Diagramme de
déploiement
En
UML,
un diagramme de déploiement est une vue statique qui sert
à représenter l'utilisation de l'infrastructure physique par le
système et la manière dont les composants du
système sont répartis ainsi que leurs relations entre eux. Les
éléments utilisés par un diagramme de
déploiement sont principalement les noeuds,
les composants, les associations et les artefacts. Les
caractéristiques des ressources matérielles, physiques et des
supports de communication peuvent être précisées par
stéréotype.
Figure 3.21:
Diagramme de déploiement
g. Provider cloud
VS VS VS
Ayant opté pour une application cloud, il est donc
impératif de choisir le provider qui héberge notre
application.
Les fournisseurs cloud étant nombreux, nous allons
faire une étude comparative et choisir le provider le mieux
adapté; l'étude va se porter sur les 4 providers suivants:
Redhat, Amazon Web Services,
Microsoft Azure et Google Cloud Platform. Les
critères d'études sont les suivants:
a. Système d'exploitation OS: ce
critère vise à identifier les différents systèmes
d'exploitations pris en charge par chacun des providers.
b. Facilité et rapidité
d'accès: la rapidité et la facilité
d'accès des services d'un provider cloud se détermine par la
proximité de ses datacenters DC. Ce critère est l'un des plus
indispensable dans une étude comparative des providers cloud.
c. Coût: un service cloud est mesurable
donc a un coût. Nous allons nous attarder sur les coûts
proposés par les différents fournisseurs.
d. SLA Service-Level Agreement: est un accord
entre un fournisseur de services cloud et un client qui assure le maintien d'un
niveau de service minimum. Il garantit les niveaux de fiabilité, de
disponibilité et de réactivité des systèmes et des
applications, précise qui est responsable en cas d'interruption de
service et décrit les pénalités en cas de non-respect des
niveaux de service.
e. Scalability: la Scalabilité est la
capacité d'ajuster
les ressources pour répondre à la hausse ou
à la baisse de la demande.
f. Failover: le failover, ou basculement est
un mode de fonctionnement de secours qui consiste à basculer
automatiquement sur une base de données, un serveur ou un réseau
placé en attente si le système principal tombe en panne ou est
arrêté le temps d'une maintenance.
g. Langages: nous identifions les langages de
programmation pris en charge par chacun des providers.
h. Security: Nous nous intéressons
ici, à qui revient la responsabilité du service entre le client
et le fournisseur. Voyons ci-dessous le tableau comparatif des provider:
Table 3.5: Tableau
comparatif des providers cloud
3.2. Réalisation
3.2.1. Choix des technologies
a. Node js: Node.js est une plateforme
logicielle libre en JavaScript, orientée vers les applications
réseau événementielles hautement concurrentes qui doivent
pouvoir monter en charge. Ce qui est le cas de notre application.
Le choix s'est porté sur Node.js également pour
les raisons suivantes:
Node.js est un système single thread non
bloquant: Ce qui veut dire qu'il n'attend pas la fin
d'exécution d'une requête pour en traiter une autre.
Cela octroie une certaine rapidité aux applications qui
font beaucoup de requêtes car Node.js est capable de gérer
énormément de requêtes en parallèle sans les faire
attendre les unes les autres.
Node.js est flexible: Node.js est très
light comme plateforme et n'a pas beaucoup de fonctionnalités
déjà intégrées. Ce qui nous donne le choix des
modules à lui greffer pour l'utiliser.
Il n'y a pas de conventions strictes sur comment s'y prendre,
cela nous laisse pas mal de marge de manoeuvre pour décider de tout. Ce
qui fait qu'il est possible de commencer avec quasiment rien et avancer petit
à petit dans la direction qu'on pense être la meilleure au fur et
à mesure que nous avançons dans ton projet.
Node.js c'est du javascript: Bien souvent il
peut s'avérer un peu déstabilisant de coder avec un langage du
côté front-end et un autre langage du côté back-end,
avec Node.js ce casse-tête est fini parce qu'on reste dans le même
langage partout. Au niveau organisation du code, c'est encore mieux. On pourra
avoir les mêmes conventions de noms, les mêmes bonnes pratiques
dans tout le code de notre projet, aussi bien en Front qu'en Back.
b. Le framework Express JS: Express js est
un framework utilisé pour construire des applications web
basées sur node.js. C'est le plus populaire de tous les framework
node.js et il est doté d'une prise en main très facile. C'est de
fait le framework standard de node.js.
c. MySql: MySQL est un système de
gestion de base de données relationnelle (SGBDR) open source,
basé sur le langage SQL (Structured Query Language). Cette solution,
parmi les plus populaires au monde, est connue pour délivrer de hautes
performances dans le stockage de larges volumes de données (notamment
dans le big data) ou la Business Intelligence. Fondé en 1994, MySQL a
été racheté par Sun Microsystems en 2008 et appartient
à Oracle Database depuis 2010. MySQL est utilisé par de
nombreuses entreprises dans le monde, dont Google, Yahoo!, YouTube, et Adobe,
dans le digital, Airbus, Alstom, et Alcatel-Lucent dans l'industrie,
Crédit agricole, dans le secteur de la banque et de l'assurance, ....
d. Docker: Docker est une plateforme
logicielle virtualisée de système lancée en 2013 ayant
largement contribué à la démocratisation de la
conteneurisation. Elle permet de créer, déployer et
exécuter facilement des applications dans des conteneurs. Il en existe
d'autres, mais celle-ci est la plus utilisée. Elle est par ailleurs plus
facile à déployer et à utiliser que ses concurrentes. Le
fonctionnement de Docker repose sur le noyau Linux et les fonctions de ce
noyau, comme les groupes de contrôle cgroups et les espaces de nom. Ce
sont ces fonctions qui permettent de séparer les processus pour qu'ils
puissent s'exécuter de façon indépendante.
En outre, Docker permet d'automatiser le déploiement
des applications au sein d'un environnement de conteneurs. Grâce
à ces divers outils, les utilisateurs profitent d'un accès
complet aux applications et sont en mesure d'accélérer le
déploiement, de contrôler les versions et de les attribuer.
3.2.2. Choix des outil
a. Star UML pour la modélisation des
diagrammes: StarUML est un logiciel de modélisation UML
(Unified Modeling Language) open source qui peut remplacer dans bien des
situations des logiciels commerciaux et coûteux comme Rational Rose ou
Together . Étant simple d'utilisation, nécessitant peu de
ressources système, supportant UML 2, ce logiciel constitue une
excellente option pour une familiarisation à la
modélisation.
b. Git et Github pour le versionning et le
dépôt: Git est un logiciel de versionning gratuit et open
source. GitHub est un service d'hébergement de
référentiel open source.Il héberge vos projets de code
source dans une variété de langages de programmation et garde une
trace des différentes modifications apportées à chaque
itération.
c. Visual Studio Code pour l'écriture du
code: Visual studio code ou VS Codeest un éditeur de code
développé par Microsoft en 2015 et est développé
avec le framework Électron et conçu principalement pour
développer des projets avec Javascript, Node.js ou encore TypeScript. Le
choix a été donc très facile
d. Figma pour la conception des
wireframes: Figma est une plateforme web collaborative qui permet
la création d'interfaces pour le web et le mobile. Nous l'avons
utilisé pour construire nos wireframes et les schémas
explicatifs. Le choix s'est porté sur figma pour sa simplicité et
son coût qui est gratuit contrairement à bon nombre de ses
concurrents.
3.3. Implémentation de la
solution
Dans les sections précédentes de ce chapitre,
nous avons eu à étudier notre solution dans tous ses contours.
Nous avons spécifié les besoins fonctionnels et non fonctionnels
tout en mettant en avant les différentes fonctionnalités de
l'application et en décrivant les interactions des utilisateurs avec le
système. Nous avons également fait l'analyse et la conception des
besoins fonctionnels et le choix des différents outils et technologies a
été mis au clair.L'architecture de l'application a
également été dégagée.
Dans cette section, nous allons entamer la phase de
l'implémentation.
? Page
d'accueil
La page d'accueil est la page sur laquelle tout visiteur est
amené à voir en premier lorsqu'il visite notre application. Cette
page présente notre application en expliquant le service et les
fonctionnalités offert.
Figure 3.22: Page
d'accueil de l'application
? Page de connexion d'un utilisateur
A partir de cette page, un utilisateur peut se connecter pour
accéder à son espace client.
Figure 3.23: Page
de connexion
? Page d'inscription
d'un utilisateur
Si un utilisateur n'a pas de compte il peut en créer un
pour ainsi bénéficier de nos services.
Figure 3.24:Page
d'inscription
? Page d'ajout d'une
application
Cette page permet d'ajouter une application en 4
étapes:
a. Informations de l'application: Sur cette
partie le client renseigne les informations basiques de son application comme
le nom, les technologies utilisées et une description
éventuelle.
Figure 3.25: Page
d'ajout d'une application étape 1
b. Providing des utilisateurs: Ici, le client
spécifie de quelle manière il va nous fournir les utilisateurs.
Il pourra choisir parmi les deux méthodes disponibles.
Figure 3.26: Page
d'ajout d'une application étape 2
c. Mode d'authentification: Le client va
ensuite choisir un mode d'authentification pour ses utilisateurs: soit ces
derniers restent sur son interface à lui, soit ils sont redirigés
sur notre interface et seront renvoyés sur son application après
authentification.
Figure 3.27:Page
d'ajout d'une application étape 3
d. Mode de facturation et mode de paiement:
En dernière étape, le client choisit un mode de paiement et de
facturation pour son application; à ce stade seul le mode de facturation
PAYG et le mode de paiement par mobile money sont disponibles.
Figure 3.28: Page
d'ajout d'une application étape 4
Après l'ajout si tout s'est bien passé on lui
affiche un récapitulatif de ses informations et un fichier de
configuration à télécharger.
Figure 3.29: Page
d'ajout d'une application récapitulatif
? Page de liste des
application d'un client
Cette page liste toutes les applications d'un client.
Figure 3.30:Page
liste des applications
? Page détail
d'une application d'un client
Cette page affiche les détails d'une application et
permet de les modifier
Figure 3.31: Page
détails et configuration d'une application
3.4.
Déploiement et Tests
Dans cette partie nous passons au déploiement de notre
plateforme. Nous avons, plus haut dans la partie conception, fait le choix de
notre provider qui s'est porté sur AWS.
Nous allons conteneurisé notre application avec docker
et le déployer sur le service EKS d' AWS qui est un service
géré utilisé pour exécuter Kubernetes sur AWS sans
avoir besoin d'installer, d'exploiter et de maintenir un plan de contrôle
ou des noeuds Kubernetes.
Le flux de travail est donc très simple :
? Créer un utilisateur IAM sur AWS.
? Installer et configurer AWS CLI.
? Conteneuriser notre application avec une configuration
Dockerfile
? Pousser l'image construite vers un registre de conteneurs,
par exemple ECR.
? Créer un cluster sur AWS
? Déployer l'image vers le cluster en utilisant
kubectl sur AWS CLI.
? Créer et configurer une base de données MySQL
avec Amazon RDS
? Configurer et déployer keycloak sur notre cluster
Installation et Configuration de AWS CLI
Commençons par installer AWS CLI en ligne de commande.
Pour cela tapons la commande suivante dans le terminal:
Figure 3.32:
Installation de AWS CLI
Nous allons vérifier que l'installation a bien
réussie:
Figure 3.33:
Configuration de AWS CLI
Conteneuriser l'application avec une configuration
Dockerfile
Maintenant, créons un Dockerfile pour construire notre
application Express dans une image de conteneur :
Figure 3.34:
Dockerfile
Construire l'image Docker
Construisons et taguons l'image Docker :
Figure 3.35:
Containerisation de l'application
Pousser l'image construite vers un registre de
conteneurs
Nous allons taguer puis pousser notre image vers notre
registry ECR créé sur AWS.
Figure 3.36:
Résultat de la commande de containerisation
Créer un cluster sur AWS
Un cluster Kubernetes est un ensemble de machines nodales
permettant d'exécuter des applications conteneurisées. L'usage de
Kubernetes implique l'usage d'un cluster.
Figure 3.37:
Cluster sur eks
Déployer l'image vers le cluster en utilisant
une kubectl sur AWS CLI
Maintenant que l'image est poussée vers le repository
ECR, la manière la plus simple de la déployer vers le cluster est
d'utiliser la console aws.
Nous pouvons utiliser cette approche pour des raisons de
simplicité.
En premier lieu, nous allons configurer kubectl à cet
effet nous faisons recours à docker desktop.
Figure 3.38:
Configuration de k8s dans docker
Nous allons maintenant créer un déploiement. Un
Deployment indique à Kubernetes comment créer et mettre à
jour les instances de notre application. Une fois que nous avons
créé un Deployment, le maître Kubernetes planifie les
instances de l'application incluses dans ce Deployment pour qu'elles
s'exécutent sur les différents noeuds du cluster. Dans
Kubernetes, un service est une abstraction qui définit un ensemble
logique de pods et une politique permettant d'y accéder. Les services
permettent un couplage souple entre les pods dépendants.
Ici, nous allons ajouter le déploiement et le service
dans un seul fichier manifest.yml :
Figure 3.39:
Fichier manifest.yml
Créons le déploiement avec la suivante:
Figure 3.40:
Commande pour déployer le fichier .yml
Ensuite nous vérifions la bonne exécution de la
commande de déploiement:
Figure 3.41:
Résultat des commandes de vérification du
déploiement.
Configurer une base de données MySQL avec
Amazon RDS:
Voici un aperçu de notre base de données
créée dans RDS
Figure 3.42: Base
de données Amazon RDS
Configurer et déployer keycloak sur notre
cluster:
Pour configurer keycloak et le déployer sur notre EKS,
nous sommes passé par un fichier de configuration : deployment.yaml
Figure 3.43:
Fichier yaml pour keycloak
Ce fichier contient à la fois les configurations pour
le déploiement et le service qui seront utilisés par EKS. Nous
allons maintenant le pusher vers notre EKS.
Figure 3.44:
Résultat après déploiement de keycloak
Nous avons créé et configuré un cluster
sur Amazon EKS dans lequel nous avons déployé notre application
dockeurisée pusher dans un registry sur ECR. Puis nous avons
configuré et lié une base de données Amazon RDS à
notre application et nous avons déployé keycloak sur notre
cluster. Après toutes ces étapes, notre application tourne
maintenant sur notre cluster et on peut le constater sur l'image suivante.
Figure 3.45:
Vérification du déploiement de l'application
Conclusion
Tout au long de ce troisième chapitre, nous avons eu
à présenter et expliquer notre environnement de travail. Nous
avons ensuite élaboré notre architecture logicielle pour enfin
présenter les parties essentielles de l'implémentation de notre
plateforme. Nous avons également pu expliquer les différentes
étapes pour le déploiement de notre application avec des
illustrations, et nous avons enfin pu tester notre application en ligne.
4. Chap4: Conclusion et
Perspectives
4.1. Conclusion:
Ce projet de fin d'études avait pour ambition
d'établir une plateforme cloud de gestion des identités et des
accès basée sur l'outil Keycloak, en se demandant si celle-ci
permettrait aux développeurs, spécialistes et entreprises de
manière générale, de réaliser des applications plus
sécurisées en moins de temps et de configurations.
L'étude ci-dessus nous a permis d'avoir une vue assez
large sur les solutions cloud de gestion des identités et des
accès.
Nous avons, en premier lieu, mis en contexte le projet et
dégagé la problématique.
Il a fallu ensuite s'intéresser à la gestion des
identités et des accès d'une manière assez
générale et globale ainsi que de l'outil keycloak qui est au
coeur de notre plateforme afin de donner une vue globale de ses
fonctionnalités et des protocoles sur lesquels il se base.
Après cela, il convenait d'établir une
étude sur les solutions existantes, étude qui s'est portée
sur cinq solutions et qui a abouti en une conclusion assez tranchante quant
à la la pertinence d'une solution cloud de gestion des identités
et des accès basée sur un outil d'IAM, keycloak, pensée
développeurs et surtout facilement accessible en milieu Africain.
Notre plateforme a permis de développer des
applications plus sécurisées, car le maillon le plus important et
le plus vulnérable de toute application est désormais
géré en dehors de l'application par keycloak. Le
développeur ou le spécialiste n'ayant besoin de rien installer,
ni d'une multitude de fichiers de configurations, il bénéficie
d'un gain énorme de temps dans le développement de ses
applications. Il peut également se passer de l'écriture des
interfaces de login (sauf dans le cas où il voudrait implémenter
sa propre interface) et de l'implémentation d'un module complexe de
gestion des utilisateurs.
Toujours dans le souci de faciliter la gestion des
utilisateurs, il serait intéressant d'avoir un sdk à la place du
fichier de configuration ou des variables d'environnement.
Notre projet comme tout bon projet d'ingénierie ne
s'arrête pas ici, il fera l'objet de mise à jour au fur à
mesure de l'évolution des technologies de gestion des identités
et des accès et des technologies de cloud computing. Mais en attendant
voyons ensemble quelques évolutions qui suivront très vite dans
la partie qui suit.
4.2. Perspectives:
Notre projet est, on l'a vu tout au long de ce mémoire,
très ambitieux et s'attaque à une des parties les plus
fondamentales et vulnérables de toute application. Ceci étant, il
a été possible de développer les bases essentielles pour
une bonne gestion des utilisateurs durant le temps imparti. Nous allons, dans
cette partie, voir les perspectives de notre projet dans un futur très
proche.
Les fonctionnalités seront intégrées dans
l'application dans la prochaine version de notre plateforme:
Le client pourra fournir ses utilisateur:
? à partir d'une api(pour du json donner les
clés à utiliser, pour le xml les balises)
Sur son espace admin le client pourra:
? Voir la consommation de chaque application
? Choisir et personnaliser un thème
? Activer le SSO entre ses différentes applications
? Consulter l'activité globale (reporting et historique
des configs)
? Souscrire à un abonnement (mensuel ou annuel)
? Passer d'un abonnement au mode PAYG
? Choisir les méthodes de paiement par carte bancaire
et Paypal
? Définir des préférences et choix par
défaut
? Définir une black liste (pour empêcher des
utilisateurs spécifiques de se connecter)
Bibliographie
I.
Ouvrages
GUILLAUME Harry, IAM - Gestion des identités et des
accès : concepts et états de l'art, HAL hal-00879556f, 2013,
59 pages.
LESSARD Michael, Introduction à RH-SSO - Centraliser
la gestion d'identité et sécuriser vos applications,
Redhat, 2022, 37 pages.
LONGUET Delphine, UML, Polytech Paris-Sud Formation
initiale 3e année Spécialité Informatique, Année
2016-2017
II.
Mémoires
DIALLO Mamadou Cellou Etude et Mise en place d'une plateforme
de mise en relation entre particuliers et prestataires dans le domaine du
service domestique, ISI, 2020-2021, 72 pages.
SARI Moulay Ali Réalisation d'un système de
réservation d'hébergement en ligne, Université Abou
Bakr Belkaid- Tlemcen, 2017-2018, 56 pages.
III. Articles
PRAKASH AdityaAmazon EKS: Deploying a NodeJS app using Docker
and K8s on AWS, GeekyAnts, 09/04/2021, 8 minutes de lecture.
SIMPSON Josh Using AWS RDS with Node.js and Express.js,
Stackabuse, 29/01/2020, 11 minutes de lecture.
Wébographie
https://www.keycloak.org/
:07/07/2022, 17h00
https://oauth.net/2/ :07/07/2022,
17h43
https://www.okta.com/fr
:08/07/2022, 10h00
https://www.getapp.fr/ :10/07/2022,
8h00
https://auth0.com/ :10/07/2022, 8h40
https://www.scribbr.fr :
20/07/2022, 13h14
https://aws.amazon.com/fr/cognito/
:28/07/2022, 12h08
https://access.redhat.com/products/red-hat-single-sign-on
:30/07/2022, 18h01
https://hub.docker.com/r/jboss/keycloak/
:11/08/2022, 14h12
https://fusionauth.io/ :20/08/2022,
11h12
https://www.scribbr.fr/plan-memoire/introduction/
:12/09/2022, 10h12
https://www.scribbr.fr/plan-memoire/resultats-de-recherche/
: 12/09/2022, 18h10
https://www.scribbr.fr/plan-memoire/cadre-theorique-dun-memoire/
:14/09/2022, 18h03
https://www.scribbr.fr/plan-memoire/le-resume-de-votre-memoire/
: 20/09/2022, 17h49
https://www.scribbr.fr/plan-memoire/sommaire/
:20/09/2022, 20h27
https://www.scribbr.fr/plan-memoire/remerciements-memoire/
:20/10/2022, 17h32
https://www.scribbr.fr/memoire/avant-propos-memoire/
:22/10/2022; 11h00
|