help: explain API access management (#55079)

This commit is contained in:
Thomas NOËL 2021-06-22 16:35:05 +02:00 committed by Thomas NOËL
parent 340bbe7632
commit ecb499305d
1 changed files with 92 additions and 10 deletions

View File

@ -9,30 +9,104 @@
<name>Frédéric Péters</name>
<email>fpeters@entrouvert.com</email>
</credit>
<desc>Clé dutilisation, utilisateurs, sessions, signatures, etc.</desc>
<desc>Accès aux API, identifiants et clé dutilisation, utilisateurs, signature, etc.</desc>
</info>
<title>Authentification</title>
<section>
<title>Usager concerné</title>
<title>Gestion des accès aux API</title>
<p>
Pour les appels concernant un usager particulier (tel que la récupération de la
liste de ses formulaires en cours), lusager est précisé en ajoutant une query
string avec un paramètre <code>email</code> (pour trouver lusager selon son
adresse électronique) ou un paramètre <code>NameID</code> (pour trouver
lusager selon son NameID SAML).
La création daccès aux API se fait dans lespace de paramétrage, dans la
section « Sécurité », en suivant le lien « Accès aux API ». Le bouton « Nouvel
accès aux API » permet dajouter un accès, et il faut indiquer :
</p>
<list>
<item><p>Nom : le nom choisi pour laccès, qui sera affiché dans la page des
accès ;</p></item>
<item><p>Description : pour se rappeler de lusage prévu pour cet
accès ;</p></item>
<item><p>Identifiant daccès : le nom de lutilisateur à utiliser pour
lauthentification HTTP Basic, ou le paramètre <code>orig</code> pour
lauthentification par signature ;</p></item>
<item><p>Clé daccès : le mot de passe pour lauthentification HTTP Basic de
cet utilisateur, ou la clé partagée à utiliser pour lauthentification par
signature ;</p></item>
<item><p>Rôles : liste des rôles automatiquement obtenus lorsque cet accès est
utilisé. Par exemple, sil sagit de permettre de lister des demandes dune
certaine démarche, il faut indiquer un rôle qui permet de voir les demandes.
Ce rôle est à déterminer selon le paramétrage du formulaire de la démarche
et/ou de son workflow.</p></item>
</list>
<note><p>Il est conseillé de créer des «rôles techniques» dédiés aux API. Ces
rôles ne sont jamais donnés à des utilisateurs de la plateforme, ils sont
utilisés uniquement dans le paramétrage des accès. Typiquement une démarche est
paramétrée pour quun certain rôle technique ait accès à ses demandes, et ce
même rôle est indiqué dans laccès aux API dédié.</p></note>
<section>
<title>Définitions de lusager concerné</title>
<p>
Si lauthentification utilisée passe par un accès aux API qui ne donne pas de
rôle spécifique, alors il faut indiquer dans la query-string un usager qui aura
les rôles nécessaires.
</p>
<p>
C'est aussi nécessaire pour les appels concernant un usager particulier, tel
que la récupération de la liste de ses formulaires en cours.
</p>
<p>Lusager est précisé en ajoutant dans la query string :</p>
<list>
<item><p>soit un paramètre <code>email</code> pour trouver lusager selon son
adresse électronique</p></item>
<item><p>soit un paramètre <code>NameID</code> pour trouver lusager selon son
NameID SAML.</p></item>
</list>
</section>
</section>
<section>
<title>Authentification simple HTTP Basic</title>
<p>
Pour accéder aux API avec lauthentification HTTP Basic classique, il faut
utiliser le nom dutilisateur (identifiant daccès) et le mot de passe (clé
daccès) de laccès configuré ci-dessus.
</p>
</section>
<section>
<title>Authentification par signature de lURL</title>
<p>
Un système dauthentification basé sur une signature ajoutée à la fin de lURL
est également disponible. Il peut être jugé plus sécurisé que
lauthentification HTTP Basic, par ailleurs il assure une protection plus
explicite contre le rejeu. Ce système est spécifique à Publik/w.c.s.
</p>
<section id="req-security-shared-secret">
<title>Signature des requêtes</title>
<p>
Les appels aux API doivent être signés, cela passe par une clé partagée à
La signature dun appel aux API passe par une clé partagée à
configurer des deux cotés de la liaison, la signature est du type HMAC;
lalgorithme de hash à employer est passé en paramètre.
</p>
@ -87,7 +161,14 @@ La query string définitive est ainsi :
<title>Configuration des clés partagées</title>
<p>
Les clés partagées doivent être définies dans le fichier
La définition des clés se fait lors de la création des accès aux API (voir
plus haut). Lors de la création d'un nouvel accès, lidentifiant d'accès
correspond au «orig» et la clé d'accès est la clé de signature. Les rôles sont
ceux qui seront obtenus lors de lusage de laccès.
</p>
<p>
Les clés partagées peuvent aussi être définies dans le fichier
<code>site-options.cfg</code>, dans une section <code>[api-secrets]</code>, par
exemple :
</p>
@ -100,7 +181,7 @@ intranet = 12345
</section>
<section>
<title>Exemples de code de signature</title>
<title>Exemples d'implémentation de lalgorithme de signature</title>
<p>
Voici des exemples de code pour créer des URLs signées selon lalgorithme
@ -230,6 +311,7 @@ echo "$signed"
</code>
</listing>
</section>
</section>
</page>