Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
D’INSERTION PROFESSIONELLE
Du 15 septembre au 30 octobre 2020
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.
2
Table des matières
Introduction................................................................................................................................ 4
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.
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
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.
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.
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.
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 :
authorization_endpoint = https://e2emerchant.itsme.be/oidc/authorization
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’ :
12
• error_description = description de l’erreur
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
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
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.
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
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 :
endpoint = https://b2b.sign.itsme.be/qes-partners/1.0.0/user_identification
18
Réponse de la requête :
• status
• userCode = identifiant unique généré par itsme
• certificate = certificat de l’utilisateur en format PEM
• 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
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