Vous êtes sur la page 1sur 23

RAPPORT DE STAGE

D’INSERTION PROFESSIONELLE
Du 15 septembre au 30 octobre 2020

Auteur : EL BAKKOURY Yassine


Maître de stage : VANDERPERRE Pascal
Superviseur de stage : TAYMANS Rémy

1
Remerciements
Je remercie Marc Pirenne de m’avoir proposé un stage au sein de son entreprise et de
m’avoir bien accueilli dans son équipe.

Je tiens également à remercier Pascal Vanderperre, mon maître de stage, pour son
investissement ainsi que son accompagnement et son suivi régulier.

Enfin, je remercie Mr. Rémy Taymans, pour sa supervision de mon stage.

2
Table des matières
Introduction................................................................................................................................ 4

Description de l’entreprise ......................................................................................................... 5

Projets réalisés ........................................................................................................................... 7

Conclusion ................................................................................................................................ 21

Annexe ...................................................................................................................................... 22

Sources ..................................................................................................................................... 23

3
Introduction
Au cours de la 2ème année du Master en sciences de l’ingénieur industriel à l’ECAM,
les étudiants sont amenés à suivre un stage d’insertion en entreprise, d’une durée minimale
de 6 semaines au début de l’année académique, dans le but de s’insérer dans l’entreprise en
prenant connaissance de ses objectifs et de son organisation générale ainsi que de se
familiariser au travail quotidien de l’ingénieur par la participation à un ou plusieurs projets
concrets avec un haut degré d’autonomie et d’initiative en essayant également de mettre en
pratique des connaissances acquises à l’ECAM.

Mon stage s’est déroulé à Noviat, une entreprise IT située à Bruxelles. A cause des
conditions de la crise du coronavirus, j’ai du travailler totalement à distance durant presque
toute la durée du stage en prenant quotidiennement contact avec mon maître de stage.

4
Description de l’entreprise
Noviat est une entreprise située à Bruxelles, fondée en 2009 par Mark Pirenne et Luc
de Meyer. C’est une entreprise partenaire de Odoo SA, une autre entreprise belge ayant
développé un ERP (Enterprise Resource Planning) open-source comprenant de très
nombreux modules permettant de répondre à de nombreux besoins de gestion des
entreprises.

Odoo
Odoo est un logiciel ERP open-source développé par l’entreprise belge portant le
même nom (Odoo SA). Cet ERP est composé de plusieurs modules ayant pour but de
simplifier la gestion des entreprises en leur permettant d’avoir toutes leurs données
centralisées dans une seule base de données.

Le logiciel Odoo existe en deux versions : Odoo Community qui est un logiciel gratuit
contenant les fonctionnalités de base d’Odoo et Odoo Enterprise qui est payant et apporte
des fonctionnalités supplémentaires à Odoo Community. Afin de s’adapter aux différents
processus de productions des entreprises, Odoo SA fournit également un service de
personnalisation pour Odoo Enterprise. Noviat, comme d’autres société partenaires de Odoo
SA, fournit quant à elle des services de développement et de personnalisation pour le logiciel
Odoo Community.

Noviat est également membre de l’OCA (Odoo Community Association), une


organisation qui promeut l'utilisation généralisée d'Odoo et soutient le développement
collaboratif des fonctionnalités d'Odoo. Le fait d’être membre permet également à Noviat
d’avoir une certaine renommée en tant qu’intégrateur Odoo.

5
Clients de l’entreprise
De manière générale, Noviat aide des entreprises du secteurs privées en intégrant
des solutions pour différents modules d’Odoo Community afin d’optimiser la gestion
informatisée de l’ensemble de leurs processus commerciaux. Cependant, Noviat travaille
également avec des sociétés du secteur public comme la Ville de Liège et la Commune
d'Ixelles qui souhaitent intégrer l’ERP dans leur administration. Pour ce dernier type de
client, Noviat a développé l'ARP (Administration Ressource Planning), un ERP conçu
spécialement pour le secteur public.

6
Projets réalisés
Objectifs du stage
L’objectif général du stage consiste à participer à la réalisation d’un projet qui
respecte les exigences de l’entreprise. Le projet principal de mon stage consistait à
implémenter une authentification itsme dans un serveur Odoo version 13 communautaire
standard. Cela m’a demandé de faire plusieurs recherches afin de comprendre le
fonctionnement du protocole d’itsme et également de me familiariser un peu avec le logiciel
Odoo.

Suivi du stage
Semaine 1 : installation de l’environnement + découverte Odoo

Semaine 2 : recherche documentaire + prise de contact avec itsme

Semaine 3 : tests avec la sandbox

Semaine 4 : problème clé JWS

Semaine 5 : simulation de l’authentification avec 2 serveurs externes pour contourner le


problème de clé JWS

Semaine 6 : recherche documentaire sur le protocole de signature

Découverte de Odoo
Mise en place de l’environnement :
Avant de pouvoir commencer à travailler sur le projet du stage, il m’a fallu tout
d’abord installer l’environnement de travail. Etant sur Windows 10, j’ai tout d’abord du
installer le Virtual Box, un logiciel de virtualisation, afin de pouvoir travailler sur Ubuntu
20.04 en machine virtuelle.

7
Lors de l’installation du logiciel Odoo sur Ubuntu, j’ai dû également installer et
configurer PostgreSQL, le système de gestion de base de données utilisé par Odoo.

Création de module :
Lorsque l’on veut créer un nouveau module à l’aide de la commande odoo-bin
scaffold <nom du module> <emplacement du module>,un nouveau fichier est généré
contenant les différent composant du module. Le module apparait également dans la liste
des modules, après avoir relancer le serveur Odoo.

La structure d’un module Odoo est basée sur le motif d'architecture logicielle MVC
(modèle-vue-contrôleur). On retrouve trois composants essentiels dans ce type
d’architecture :

• Les modèles : contiennent les données à afficher, chaque type d’objet utilisé par un
module a son propre modèle décrit dans un fichier python.
• Les vues : affichent les données quelles reçoivent du contrôleur en fonctions des
paramètres données.
• Le contrôleur : gère les relations entre les modèles et les vues, chaque controlleur
possède une URL correspondant à une page web.

Découverte de itsme
Avant de commencer le développement avec l’API de itsme, j’ai commencé par tester
l’application sur mon smartphone et j’ai fait une analyse des différents cas d’utilisation de
l’application.

Qu’est-ce que itsme ?


itsme est un système d’authentification sécurisé, développé par Belgian Mobile ID
(un groupement de plusieurs banques belges et d'opérateurs télécoms), permettant de

8
prouver une identité d’approuver des transactions et de signer des documents de manière
simple efficace et en toute sécurité sur de nombreuses plateformes numériques des
autorités publiques ou d'entreprises privées. Actuellement, l’application est disponible en
Belgique et au Luxembourg et compte plus de 2 millions d’utilisateurs (ce nombre avait
augmenté de 30% durant les mois de mars, avril et mai marqués par la crise du coronavirus),
soit près de 25% de la population active en Belgique.

Cas d’utilisation :
Concrètement, l’application itsme facilite grandement le processus d’authentification
d’un utilisateur en lui permettant de se passer de la multitude d’identifiants, mots de passe
et lecteurs de carte actuels.

Avant de pouvoir s’identifié avec l’application, il faut tout d’abord avoir créer un
compte à l’aide de la carte ID ou bancaires, du lecteur de cartes et du téléphone. Lors de la
création du compte l’application demande à l’utilisateur de choisir un code itsme à 5 chiffres
afin de sécuriser son identité numérique.

Lorsqu’un utilisateur décide de se connecter sur un site web en utilisant


l’authentification itsme, il clique sur le bouton dédié et est ensuite rediriger vers une page ou
il doit s’identifier à l’aide du numéro de téléphone associé à son compte itsme.

9
Après avoir entré son numéro de téléphone, l’utilisateur reçoit une notification dans
l’application itsme et 3 minutes pour confirmer l’action et doit ensuite entrer son code itsme
à 5 chiffres. Si le code est correct l’utilisateur est identifié sur le site web.

Dans certains cas (example: banque ING) :

Pour certains sites, comme celui de la banque ING, le compte itsme doit être lié au
compte du site avant de pouvoir s’authentifier avec l’application. A la différence du cas
précédant, lorsque l’utilisateur clique sur le bouton d’authentification itsme, il n’est plus
redirigé vers une page ou il doit indiquer son numéro de téléphone, et reçoit directement
une notification sur l’application.

10
Description du protocole d’authentification
Avant de pouvoir commencer l’intégration, j’ai prit contact avec les membres de
l’équipe de développement de itsme afin de leur décrire notre projet dire que l’on souhaite
éffectué des tests en utilisant leur sandbox. Après validation du projet, l’équipe nous envoie
un fichier contenant 2 paramètres : un client_id et un service_code, qui seront utilisé lors de
la configuration des requêtes.

Il faut également avoir généré une clé privé et une clé public à l’aide de la commande
yo itsme. La clé privée doit ensuite être signée afin d’obtenir un objet JWS qui sera
encryptée à l’aide de la clé public pour finalement obtenir un objet JWE.

11
Diagramme de séquence :

Requête d’autorisation (GET) :


Lorsque l’utilisateur choisi de s’authentifier avec itsme, le site web envoi une requête
qui va rediriger l’utilisateur vers la page d’identification itsme ou il devra entrer son numéro
de téléphone.

authorization_endpoint = https://e2emerchant.itsme.be/oidc/authorization

• client_id = code fourni par itsme


• response_type = "code"
• scope = "openid service : [fourni par itsme]"
• redirect_uri = lien vers lequel l’utilisateur est redirigé après authentification sur
l’application

Réponse de la requête :

Après que l’utilisateur confirme l’action sur l’application itsme, il reçoit un code
d’autorisation en étant redirigé vers l’url contenue dans le paramètre ‘redirect_uri’ :

• code = authorization code

Réponse si erreur lors de l’authentification :

• error = type d’erreur

12
• error_description = description de l’erreur

Requête pour l’access token et l’ID token (POST) :


Une fois que l’on a recu le code d’autorisation, il faut l’échanger avec un access token
et un ID token.

token_endpoint = https://e2emerchant.itsme.be/oidc/token

• grant_type = "authorization_code"
• code = authorization code reçu précédemment
• redirect_uri = lien vers serveur Odoo
• client_assertion = objet JWE obtenu après signature et encrypage de la clé privée
• client_assertion_type = "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"

Réponse de la requête :

• access_token
• token_type = "Bearer"
• id_token = JSON Web Token that contains User profile information

Tests des requêtes d’authentification


Les requêtes ont été testée à l’aide de RESTED, un outil d’extension de Firefox
focalisé utile pour tester des API REST. Notre client_id recu par itsme est "uwFB9DJCTd" et
notre service_code est "NOVIAT_TST_LOGIN".

Première requête :
Paramètres :

• client_id = "uwFB9DJCTd"
• response_type = "code"
• scope = "openid service:NOVIAT_TST_LOGIN"
• redirect_uri = "https://noviat-test:8082"

Requête (GET) :
https://e2emerchant.itsme.be/oidc/authorization?response_type=code&client_id=uwFB9DJ
CTd&scope=openid%20service%3ANOVIAT_TST_LOGIN&redirect_uri=https%3A%2F%2Fnovi
at-test.world:8082

13
Résultat :

On remarque que la requêtte nous redirige bien vers la page d’identification itsme :
https://e2emerchant.itsme.be/oidc/authorization/phone/confirmation

Après confirmation sur l’application du téléphone on est renvoyé ver l’URL du


paramètre redirect_uri avec un paramètre ‘code’ contenant le code d’autorisation qui sera
utilisé dans la deuxième requêtte : https://noviat-
test.world:8080?code=01ku0ddqqfaz6dmjmwfqdlh5hxo7zu3sgx9a

Deuxième requête :
Paramètres :

• grant_type = "authorization_code"
• code = "01ku0ddqqfaz6dmjmwfqdlh5hxo7zu3sgx9a"
• redirect_uri = "https://noviat-test:8082"
• client_assertion =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJ1c2UiOiJzaWciLCJuIjoiQU9vaFdoZ1Y1N0RMQlRmdjQ0UXdVRlphdlZGR3d
2Tzc3TzlmX3ZSWGZPQjdjZlBMMmxRY3c5aWRtUUkwS2Q0ajEwUnFYTklWX1lIWnZXVG1PWUlCUTc2ZnByTEhJOFlWNFcxVFpBdXVuMEJRSW9pNXJ6
ZTVPbkdzYTg5NUJLeFd1OVp4cVVJYVNkSy1NbGlxd25ZODFqZmVIcE5wd1lPeUdzU1NVbWVveXBSWnJQSTM4VkpsY2VsVHpUc2pGbUFPb1BXeUM2a
2xVRlhvSW5qTTVvc2UyU25TQ2ZsUnZNcGdsRlJmZmh4V2xfQ2ZwLUFGQTJXVFdiR20yV0MtTVlDU2ZMTklrV0dxazQ4YUMydGdxQXBrbWYyMmxpbW
9uMld6QzZ0Y09WQVh6WTNxdkEtcE5ZOU1acHhJbTVKZlFHelFDRjJHdFc0cUFGM0laT2RWUGpJeXlwQk0xQ1V5Zm9PRFVYdzBqcE1wdkVOVjhXS3pCR
DJwWlF5TFZmeDNDR1ByV0dHbHJpOE1aYk5IWDV3X3JzTElKSVhIeDZkd29yNGFxUENqam1SM1FJbVo1UTFKN3hIQlNzNk53UGRLWENfVE9ZSUl5SXd
FNEtrbVh3S0l0RTVJNjhzMEJGdWRseEZXTEx5QVM5elloNThUdV9kV1cyVk9WMkY2YjYzZUIxdlI4VWJBMXdYbU9LRnlTMEFtYXUxd2x1TGZnNngxc21T
cmw5SEdfXzdzdGx3MWxMdm9jaVFWVmFVR3lDNVFQblZ6MmNSMkxaSm1OS0s1X0tJX283UG40WnRnd0dfR1ZqTG5GY1JNbC1tT1JSUEhfZHdHRGt
sN0U4M1J5OXl6eXYzZ0w1S1B6bVBnR2pFS2J0dUR1X0lTVFFnSGNLVzZLZFEwTmdDeWtFcXF3dUNSIiwiZSI6IkFRQUIiLCJraWQiOiJoYXBsZXNzLXN0ZW
0iLCJhbGciOiJSUzI1NiJ9LHsia3R5IjoiUlNBIiwidXNlIjoiZW5jIiwibiI6IkFNSWtUZmhKenV2b2FXQ2paZnFDcDdNSVQ1WlFPQWpfMXF5Nnd5TTgzQUN6V
Ew0T0NnenEwdWo5bU1BVnpxWGo0bHU0UTBMRmd4bzd0ZTIzVEI4MzdOSmJyeHFPTHVvNW1vWWFDb0t1V3Rld2RDaDVwajUtQmRBMlIwRXBM
QzNfZ1psZzdoR1hzcEZjcEFPYVFnNUh0cVNOSGJWS1FKMnBnSEVfclBRU0xpcUVvTXpDQjF4a2wzdTJMOHZ2VFhVWGJvNkUxMkFMMjBuODRmTVND
LW1wWEozTWw0VXllR2c3dDNDWnkzb3lZVjVkVkFCSlVaNjB3dWIyTi1TaWVHdVhHSy1iV1lPaGp1dkVRQ1A0dEdCOE1EdUg5aElBUFNiVEs2SjMtY1Fo
Y29tN2MyY3JtYWVFVFJ5elQwNTdVdHVzbWN5RFlBU0VWV2hFU045aUtXdHBqQy1CM2sxLV83LWo4bWpYYXhkci1wWG5ZbWRQUUEySmhBa0VSV
21PaGNHTzhQRE93OF82bnU1bTR5UmNxeWtzRTRDNWRteTEtdXMtTko1Sl83OXh0SHRTZkNIRWJObUFnNU4tMzdqdnBUb21jd2VHMTRaRk1UQ0xq
RDRTd0paTXFseEJSdVU1bVpSNlRfdnhnUWpPam01YlNlc3IwWlhMMVZ1aE9oZ0o3dnhPS3I2aU5LQ0c2NGJCOWt1QzNhMkp5ckJZTWxrWEdFdVNac
09aUUN0TDRPdDZiZTZkbWlPRWpKUlYwNU9OY0hIN2RORnBBaXRQdU9aaXBYd1hzMk95eVl1alQxQnlXc1p5MEdkWlFRWnRWbmZDVGhSRDc0djY3
MzBzS0NUNFBUTHZuVkNISWJ6b2JoM0hfZVpTTjBIVlZfcms3a1Z2OTdaS3JnbkwyMnhTQUQxbCIsImUiOiJBUUFCIiwia2lkIjoibWVlay13YXZlcyIsImFsZyI
6IlJTQS1PQUVQIn1dfQ.kKfn3XnuZxoX5PPlJ9dYPMv4UCDlA_MdyxTxIt7Dr-g "

14
• client_assertion_type = "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"

Requête (POST) :
https://e2emerchant.itsme.be/oidc/token?grant_type=authorization_code&code=zfzzl1717j
sib2bzdu36yjs43qeuxzm74ra9&redirect_uri=https%3A%2F%2Fnoviat-
test.world:8082&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-
assertion-type%3Ajwt-
bearer&client_assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJ1c2UiOiJzaWciLCJuIjoiQU9vaFdoZ1Y1N0RM
QlRmdjQ0UXdVRlphdlZGR3d2Tzc3TzlmX3ZSWGZPQjdjZlBMMmxRY3c5aWRtUUkwS2Q0ajEwUnFYTklWX1lIWnZXVG1PWUlCUTc2ZnByTEhJOFlWNFcxVFpBdXVu
MEJRSW9pNXJ6ZTVPbkdzYTg5NUJLeFd1OVp4cVVJYVNkSy1NbGlxd25ZODFqZmVIcE5wd1lPeUdzU1NVbWVveXBSWnJQSTM4VkpsY2VsVHpUc2pGbUFPb1BXeU
M2a2xVRlhvSW5qTTVvc2UyU25TQ2ZsUnZNcGdsRlJmZmh4V2xfQ2ZwLUFGQTJXVFdiR20yV0MtTVlDU2ZMTklrV0dxazQ4YUMydGdxQXBrbWYyMmxpbW9uMld6
QzZ0Y09WQVh6WTNxdkEtcE5ZOU1acHhJbTVKZlFHelFDRjJHdFc0cUFGM0laT2RWUGpJeXlwQk0xQ1V5Zm9PRFVYdzBqcE1wdkVOVjhXS3pCRDJwWlF5TFZmeDN
DR1ByV0dHbHJpOE1aYk5IWDV3X3JzTElKSVhIeDZkd29yNGFxUENqam1SM1FJbVo1UTFKN3hIQlNzNk53UGRLWENfVE9ZSUl5SXdFNEtrbVh3S0l0RTVJNjhzMEJGd
WRseEZXTEx5QVM5elloNThUdV9kV1cyVk9WMkY2YjYzZUIxdlI4VWJBMXdYbU9LRnlTMEFtYXUxd2x1TGZnNngxc21Tcmw5SEdfXzdzdGx3MWxMdm9jaVFWVmFV
R3lDNVFQblZ6MmNSMkxaSm1OS0s1X0tJX283UG40WnRnd0dfR1ZqTG5GY1JNbC1tT1JSUEhfZHdHRGtsN0U4M1J5OXl6eXYzZ0w1S1B6bVBnR2pFS2J0dUR1X0lTV
FFnSGNLVzZLZFEwTmdDeWtFcXF3dUNSIiwiZSI6IkFRQUIiLCJraWQiOiJoYXBsZXNzLXN0ZW0iLCJhbGciOiJSUzI1NiJ9LHsia3R5IjoiUlNBIiwidXNlIjoiZW5jIiwibiI6IkFNS
WtUZmhKenV2b2FXQ2paZnFDcDdNSVQ1WlFPQWpfMXF5Nnd5TTgzQUN6VEw0T0NnenEwdWo5bU1BVnpxWGo0bHU0UTBMRmd4bzd0ZTIzVEI4MzdOSmJyeH
FPTHVvNW1vWWFDb0t1V3Rld2RDaDVwajUtQmRBMlIwRXBMQzNfZ1psZzdoR1hzcEZjcEFPYVFnNUh0cVNOSGJWS1FKMnBnSEVfclBRU0xpcUVvTXpDQjF4a2wzd
TJMOHZ2VFhVWGJvNkUxMkFMMjBuODRmTVNDLW1wWEozTWw0VXllR2c3dDNDWnkzb3lZVjVkVkFCSlVaNjB3dWIyTi1TaWVHdVhHSy1iV1lPaGp1dkVRQ1A0dE
dCOE1EdUg5aElBUFNiVEs2SjMtY1FoY29tN2MyY3JtYWVFVFJ5elQwNTdVdHVzbWN5RFlBU0VWV2hFU045aUtXdHBqQy1CM2sxLV83LWo4bWpYYXhkci1wWG5Z
bWRQUUEySmhBa0VSV21PaGNHTzhQRE93OF82bnU1bTR5UmNxeWtzRTRDNWRteTEtdXMtTko1Sl83OXh0SHRTZkNIRWJObUFnNU4tMzdqdnBUb21jd2VHMTR
aRk1UQ0xqRDRTd0paTXFseEJSdVU1bVpSNlRfdnhnUWpPam01YlNlc3IwWlhMMVZ1aE9oZ0o3dnhPS3I2aU5LQ0c2NGJCOWt1QzNhMkp5ckJZTWxrWEdFdVNac0
9aUUN0TDRPdDZiZTZkbWlPRWpKUlYwNU9OY0hIN2RORnBBaXRQdU9aaXBYd1hzMk95eVl1alQxQnlXc1p5MEdkWlFRWnRWbmZDVGhSRDc0djY3MzBzS0NUNFB
UTHZuVkNISWJ6b2JoM0hfZVpTTjBIVlZfcms3a1Z2OTdaS3JnbkwyMnhTQUQxbCIsImUiOiJBUUFCIiwia2lkIjoibWVlay13YXZlcyIsImFsZyI6IlJTQS1PQUVQIn1dfQ.kKf
n3XnuZxoX5PPlJ9dYPMv4UCDlA_MdyxTxIt7Dr-g

Résultat :

15
Problème avec la clé JWS :
Je pense que le problème avec la deuxième requête vient très probablement de la
valeur du paramètre client_assertion qui doit contenir un élément JWE obtenu à partir des
clés générées. En effet, dans la documentation de l’API je n’ai trouvé aucun script ou
exemple concret pour pouvoir cet élément JWE, j’avais donc essayé de réaliser l’opération à
l’aide de différentes méthodes de librairies python. Je pense donc qu’il est fort probable que
l’élément JWE que j’ai obtenu ne soit pas correct.

Intégration dans Odoo


Etant resté bloqué au niveau de la requête d’échange de token, j’ai décider de
simuler l’authentification en mettant en place de serveur : https://noviat-test.world:8082 et
https://noviat-test.world:8083.

Le serveur 8082 est utilisé comme valeur du paramètre redirect_uri de la requête


d’autorisation, tandit que le serveur 8083 va être utilisé pour lire les paramètres envoyés au
serveur 8082.

Simulation de la connexion :
Le bouton exécute la requête d’autorisation et nous renvoi bien vers la page
d’identification itsme :

16
Après confirmation sur l’application, on est bien redirigé vers le serveur 8082 et on
reçoit bien un code d’autorisation : https://noviat-
test.world:8082/?code=jik7n900190zgzogtn38s7ii2u89cuizat4p

Sur le serveur https://noviat-test.world:8083, on peut voir les paramètres reçus par


le serveur 8082 contenu dans un objet JSON : { "method": "GET", "path":
"base.html?code=jik7n900190zgzogtn38s7ii2u89cuizat4p", "real_path":
"code=jik7n900190zgzogtn38s7ii2u89cuizat4p", "query": "code=jik7n900190zgzogtn38s7ii2u89cuizat4p",
"request_version": "HTTP/1.0", "protocol_version": "HTTP/1.0" }

Dans Odoo, j’ai créé la route /web/itsme_authorize_callback qui est censé


authentifier un utilisateur lorsqu’elle reçoit un code en paramètre, ou afficher une erreur si
elle reçoit une erreur en paramètre ou aucun paramètre.

17
Description du protocole de signature
Durant le projet de stage, je me suis également un peu intéressé au service de
signature de document que propose itsme.

Diagramme de séquence :

1. Requête pour une nouvelle session d'identification


(POST) :
Envoie une demande à itsme afin de créer la session d'identification de l'utilisateur et
d'obtenir le certificat de signature de l'utilisateur à inclure dans les données à signer (étape 2
sur le diagramme de séquence).

endpoint = https://b2b.sign.itsme.be/qes-partners/1.0.0/user_identification

• partnerCode = code fourni par itsme


• serviceCode = code fourni par itsme
• redirectUrl = lien vers lequel l’utilisateur sera redirigé
• lang

18
Réponse de la requête :

• status = ok, pas ok


• asyncRespID = identifiant de la session
• identificationUrl = url de la page d’identification itsme

2. Redirection de l’utilisateur (GET) :


Redirige l’utilisateur vers la page d’identification itsme (étape 4 du diagramme de séquence).

url = identificationUrl (réponse de la requête précédente)

3. Demande du statut de la session d'identification de


l'utilisateur (POST) :
endpoint = https://b2b.sign.itsme.be/qes-partners/1.0.0/user_identification/status

• partnerCode = code fourni par itsme


• serviceCode = code fourni par itsme
• asyncRespID = identifiant de la session (réponse de la requête précédente)

Réponse de la requête : on obtient le certificat de signature de l'utilisateur (étape 7 du


diagramme de séquence)

• status
• userCode = identifiant unique généré par itsme
• certificate = certificat de l’utilisateur en format PEM

4. Requête pour lancer la session de signature (POST)


(étape 9 du diagramme) :
endpoint = https ://b2b.sign.itsme.be/qes-partners/1.0.0/sign_document

• inDocs = document à signer


• reqID = ID pour identifier la requête
• asyncRespID = ‘null’
• optInp = informations additionnelles

Réponse de la requête : (étape 10 du diagramme)

• reqID
• asyncRespID = identifiant de la session d'identification
• optOutp = informations additionnelles requises pour la signature

19
o signingUrl = lien vers la page de signature itsme

5. Redirection vers la page de signature (GET) :


Confirmation de la signature

• url = signingUrl (réponse de la requête précédente)

6. Requête pour le statut de la session (POST) :


Une fois le document signé, cette requête nous renvoi les informations sur la session (étape
13)

Endpoint = https://b2b.sign.itsme.be/qes-partners/1.0.0/sign_document

• inDocs = ‘null’
• reqID = ID d’identification de la requête précédente
• asyncRespID = identifiant de la session d'identification (réponse précédente)
• optInp = informations additionnelles
o partnerCode = reçu par itsme
o serviceCode = reçu par itsme

20
Conclusion
L’objectifs de mon projet de stage était l’intégration d’une authentification itsme
dans un serveur Odoo. Malgré le fait que je ne sois pas arrivé au bout du projet, j’ai pu
apprendre pas mal de choses comme l’utilisations des clés JWS et j’ai trouvé très intéressant
la découverte de Odoo que je n’avais jamais entendu parler jusqu’à présent. J’ai également
pu mieux comprendre le fonctionnement des API REST que j’avais déjà utilisé durant certains
projets scolaires mais sans trop comprendre leur objectif. Ce stage a également été
l’occasion pour moi d’entrer en contact avec des développeurs externes.

La seule chose que j’ai trouvé un peu dommage, est le fait que le stage se soit
déroulé quasi entièrement en télétravail. En effet, je pense que ça m’a un peu empêché
d’établir plus de liens avec les membres de l’équipe, et que je trouvais un peu lassant
puisque à force devoir à chaque fois travailler seul depuis chez moi, je me sentais un peu
délaissé à certains moments et j’avais parfois l’impression de juste travailler pour un projet
scolaire.

Finalement, je pense que ces six semaines de stage effectuées chez Noviat ont été
une expérience très enrichissante utile et instructive, que ce soit sur le plan technique,
professionnel et relationnel.

21
Annexe
Note d’activités :

22
Sources
https://www.noviat.com/fr_BE/

https://brand.belgianmobileid.be/d/CX5YsAKEmVI7/documentation#/documentation/gener
al-information

https://www.itsme.be/fr/faq/comment-fonctionne-itsme

https://docs.microsoft.com/fr-fr/azure/active-directory-b2c/partner-itsme

https://failforward.tech/

https://www.odoo.com/fr_FR/customers/noviat--450

https://belgianmobileid.github.io/slate/login.html

https://belgianmobileid.github.io/slate/jose.html

https://belgianmobileid.github.io/slate/qes.html

23

Vous aimerez peut-être aussi