Authentification pour un logiciel multi-utilisateurs

Prérequis

On suppose que le logiciel métier est un système d’information multi-utilisateurs disposant de son propre système de gestion des comptes et d’authentification.

Ce mode de connexion n'est pas disponible par défaut, et doit être activé spécifiquement au cas par cas. Contactez-nous pour avoir plus de renseignements à developers@mesvaccins.net.

Trois éléments d’identification

Pour chaque requête envoyée à l’API, MesVaccins.net valide les trois éléments d’identification suivants :

1. Le logiciel métier à l'origine de la requête ;
2. L'organisation à laquelle appartient l'utilisateur professionnel ;
Exemples : un hôpital, un centre de soins, un établissement de santé en général
3. L'identité du professionnel de santé.
Exemples : identité d'un utilisateur médecin, d'une secrétaire médicale…

À chacun des trois éléments d’identification correspondent des données d’authentification correspondante. Ces données doivent être incluses dans toutes les requêtes envoyées à l’API.

1. Authentification du logiciel métier

Chaque application connectée à l’API MesVaccins.net doit disposer d’une clef d’accès (uid) et d’un mot de passe (secret). Ce couple clef/mot de passe est généré manuellement pour l’application par l’équipe MesVaccins.net.

Ces clefs sont transmises avec les requêtes en utilisant la méthode d’authentification HTTP Basic : le login est la clef assignée à l’application, et le mot de passe est son mot de passe associé.

2. Authentification de l’organisation

L’identification de l’organisation est effectuée par un certificat X.509. La récupération de ce certificat par le logiciel client nécessite de disposer d’un “code de retrait de certificat”. Ce code est pour l’instant délivré manuellement sur demande pour chaque organisation par l’équipe de MesVaccins.net.

Obtention du certificat

Adresse du webservice pour l'environnement de test
https://certtest.idshost.fr
Adresse du webservice pour l'environnement de production
https://cert.idshost.fr
Une fois obtenu, le certificat doit être stocké dans le logiciel métier, pour pouvoir être proposé avec chaque requête envoyée vers MesVaccins.net.
Le code de retrait n'est utilisable qu'une fois.
  • POST [URL DU WEBSERVICE]/restgetcertificate.php récupére le certificat au format base64 à partir d'un code de retrait de certificat
{
    "identifier": "none",
    "otp": "...",
    "type": "p12"
}
  • Le champ identifier doit contenir la valeur none
  • Le champ otp contient le code de retrait de certificat
  • Le champ type contient le type de certificat ; les types disponibles sont pem et p12 (format PKCS12). Si possible, on utilisera le type p12, dont le mot de passe associé à la clé privée est l’OTP précédemment mentionné.

Le format de la réponse renvoyée est :

{
    "status": 0,
    "certbase64encoded": "..."
}

status est le code de retour de l’opération (cf. tableau ci-dessous), et certbase64encoded est le certificat X.509 encodé au format base64.

Statut Description
0 Opération réussie
1 Requête mal formée – le contenu de la requête JSON est invalide
2 Type incorrect – les types valides sont pem et p12
3 OTP incorrect – le code de retrait est invalide ou a déjà été utilisé
4 Erreur serveur, contactez nous à developers@mesvaccins.net

Présentation du certificat

Le certificat doit être envoyé avec chaque requête, sous forme décodée.

3. Authentification du professionnel de santé

Tout professionnel de santé utilisant MesVaccins.net doit être connecté en utilisant un compte individuel. Ceci est imposé par les contraintes de traçabilité des actions relatives aux données médicales à caractére personnel.

L’identification du professionnel pour les requêtes à MesVaccins.net est effectué par l’envoi de d’un identifiant de session de connexion avec les requêtes.

L’identifiant de session est envoyé avec les requêtes dans un cookie nommé sessionids.

Adresse du webservice pour l'environnement de test
https://test-pro-secure.mesvaccins.net/authenticationids
Adresse du webservice pour l'environnement de production
https://pro-secure.mesvaccins.net/authenticationids
  • POST [URL DU WEBSERVICE]/restloginservice.php initie (ou réinitie) la session avec le serveur
{
    "authentifier": "pierre.borsan@gmail.com",
    "password": "..."
}
  • Le champ authentifier contient l'e-mail du professionnel de santé
  • Le champ password contient le mot de passe associé au professionnel de santé
Le compte utilisateur est créé à la volée sur notre service lors de la première connexion du professionnel de santé, à partir de l'adresse e-mail renseignée dans l'attribut authentifier. Il n'y a donc pas de création de compte utilisateur à effectuer en amont de l'utilisation du service par les professionnels de santé.

Génération du mot de passe

Comme le compte est créé automatiquement, il n’est pas possible de connaitre son mot de passe lors de l’envoi de la première connexion. Le mot de passe est donc généré algorithmiquement par un hachage BCrypt de la concaténation de :

  • l’e-mail du professionnel de santé
  • l’identifiant numérique de l’organisation

La clef utilisée pour le hachage est la clef d’accès de l’application (uid).

Exemple de génération du mot de passe en C# :

BCrypt.Net.BCrypt.HashPassword(_email + _organisationId.ToString(), "$2a$10$" + applicationUid)

Format de la réponse

{
    "status": 0,
    "sessionids": "..."
}

status est le code de retour de l’opération (cf. tableau ci-dessous), et sessionids est l’identifiant de session.

Statut Description
0 Connexion réussie
1 Requête mal formée
2 Certificat non accepté
3 Identifiant manquant (mot de passe et/ou authentifiant)
4 Certificat en blacklist
La blackliste survient suite à 3 échecs de connexion et dure 15 minutes.
5 Identifiants invalides
  • POST [URL DU WEBSERVICE]/restisloggedservice.php vérifie si la session est toujours active
{
    "sessionids": "...",
}

Le format de la réponse renvoyée est :

{
    "status": 0
}

status est l’un des codes de réponse suivants :

Statut Description
0 Utilisateur connecté
1 Requête mal formée
2 Session non valide
  • POST [URL DU WEBSERVICE]/restlogoffservice.php déconnecte la session
{
    "sessionids": "...",
}

Le format de la réponse renvoyée est :

{
    "status": 0
}

status est l’un des codes de réponse suivants :

Statut Description
0 Déconnexion réussie
1 Requête mal formée
2 Session non valide