• Contenu
  • Bas de page
logo ouidoulogo ouidoulogo ouidoulogo ouidou
  • Qui sommes-nous ?
  • Offres
    • 💻 Applications métier
    • 🤝 Collaboration des équipes
    • 🛡️ Sécurisation et optimisation du système d’information
    • 🔗 Transformation numérique
  • Expertises
    • 🖥️ Développement logiciel
    • ♾️ DevSecOps
    • ⚙️ Intégration de logiciels et négoce de licences
      • Atlassian : Jira, Confluence, Bitbucket…
      • Plateforme monday.com
      • GitLab
      • SonarQube
    • 📚​ Logiciel de CRM et de gestion
    • 🎨 UX/UI design
    • 🌐 Accessibilité Numérique
    • 🗂️​ Démarches simplifiées
    • 📝 Formations Atlassian
  • Références
  • Carrières
    • 🧐 Pourquoi rejoindre Ouidou ?
    • ✍🏻 Nous rejoindre
    • 👨‍💻 Rencontrer nos collaborateurs
    • 🚀 Grandir chez Ouidou
  • RSE
  • Ressources
    • 🗞️ Actualités
    • 🔍 Articles techniques
    • 📖 Livres blancs
    • 🎙️ Interviews Clients
Nous contacter
✕
Architecture Hexagonale en .NET
Architecture Hexagonale en .NET
5 février 2024
Image miniature composants réutilisables
L’art de créer des composants réutilisables
6 mars 2024
Ressources > Articles techniques > Authentification via FranceConnect

Authentification via FranceConnect

Écrit par Romain

Qu’est-ce que FranceConnect

Pour beaucoup de services ministériels, les données d’identité sont importantes, ce qui nécessite souvent une opération de vérification des identités des personnes inscrites. Cette opération peut très vite devenir lourde à gérer dans le cas où le public visé est assez large.

FranceConnect est un outil développé par la Direction Interministérielle du Numérique (DINUM) répondant à ce problème grâce à son outil d’authentification. Grâce à lui, vous pourrez gérer l’authentification à votre service sans avoir besoin de gérer d’identifiants ou de mots de passe tout en récupérant des données d’identités certifiées.

Je vous propose dans cet article de vous accompagner pour l’utilisation de cet outil dans votre application.

Prérequis et avertissement

Afin de pouvoir utiliser FranceConnect, une habilitation est nécessaire. Il faudra donc en faire la demande. L’accès à la demande est disponible sur datapass.

Lorsque la demande d’habilitation a été validée, vous pouvez vous connecter sur votre espace FranceConnect afin de paramétrer les urls de votre application qui doivent être acceptées par FranceConnect pour la connexion et la déconnexion. Dans notre mise en place, nous utiliserons l’environnement de test qui accepte par défaut certain url que vous pourrez retrouver sur la documentation.

Les sites ministériels étant soumis au système de design de l’état (DSFR) possèdent le bouton permettant la connexion avec un style imposé. Vous pouvez le retrouver sur la documentation du DSFR.

Afin d’implémenter ce bouton facilement, il existe un package DSFR en fichiers statiques ainsi que des portages officiels de ce package pour Vue.js, Angular, React, Django et Drupal.

Mise en place

Maintenant que la partie paramétrage est terminée, nous allons mettre en place l’authentification via FranceConnect. Voici un schéma pour les échanges avec FranceConnect qui nous intéresse dans le cadre de l’authentification.

Authentification via FranceConnect

Lien FranceConnect

Le lien de connexion se compose comme suit : URL_FC?scope=SCOPES&redirect_uri=CALLBACK_URL&response_type=code&client_id=CLIENT_ID&state=STATE&nonce=NONCE

Dans notre cas en utilisant l’environnement de test, nous aurons :

  • URL_FC : URL vers la page d’authentification FranceConnect, l’environnement de test étant https://fcp.integ01.dev-franceconnect.fr/api/v1/authorize
  • SCOPES : Il s’agit de la liste des informations demandées, un seul scope est obligatoire, openid, qui permet de récupérer l’identifiant technique unique de l’utilisateur et chaque scope doit être séparé par un espace. La liste des scopes est fourni dans la documentation. Nous utiliserons dans notre exemple : openid profile
  • CALLBACK_URL : La liste des callback disponibles dans l’environnement de test est fournie par la documentation, en environnement de production vous avez pu paramétrer ces URL plus tôt. Nous utiliserons ici http://localhost:8080/login-callback
  • CLIENT_ID : Votre identifiant de connexion a l’API FranceConnect, ‘211286433e39cce01db448d80181bdfd005554b19cd51b3fe7943f6b3b86ab6e’ pour nos tests
  • STATE & NONCE : Il s’agit de deux champs qui doivent être générés aléatoirement, on peut par exemple générer deux chaines SHA256 aléatoires.

Afficher le bouton

L’affichage du bouton dépendra de ce que vous souhaitez utiliser (fichiers statiques ou un des portages disponibles).

Prenons en exemple le portage Angular, nous aurons donc :

    <dsfr-franceconnect (franceConnectSelect)="franceConnectSelect($event)"></dsfr-franceconnect>

franceConnectSelect() étant une fonction, elle renvoie vers le lien FranceConnect défini plus tôt.

Page de connexion

Il s’agit de la page de callback vers laquelle nous sommes renvoyés après l’authentification sur FranceConnect. Dans le cas du test, cette page doit être disponible au lien défini plus haut : http://localhost:8080/login-callback.

FranceConnect redirige sur cette page avec un paramètre “code”. Nous aurons au chargement de cette page un appel à l’API FranceConnect via notre API afin de récupérer les informations de l’utilisateur grâce au code fourni par FranceConnect.

Récupération des informations de l’utilisateur

On crée donc une route dans notre API afin de récupérer les données. Cette route prend en paramètre le code fourni par FranceConnect dans l’étape précédente. Voici les opérations à effectuer par notre route, ainsi qu’un exemple js du code possible :

  • Récupération du paramètre code.
const { code } = req.body;
  • Envoi de la requête connexion à FranceConnect afin de récupérer le token de connexion à FranceConnect de cet utilisateur. Ce token servira aussi à déconnecter l’utilisateur de FranceConnect, il faut donc le conserver.
const urlToken = `${config.franceConnect.FC_URL}${config.franceConnect.TOKEN_FC_PATH}`;
const body = {
    grant_type: "authorization_code",
    redirect_uri: `${config.franceConnect.FS_URL}${config.franceConnect.CALLBACK_FS_PATH}`,
    client_id: config.franceConnect.CLIENT_ID,
    client_secret: config.franceConnect.CLIENT_SECRET,
    code,
};
const responseToken = await axios.post(urlToken, body);
  • Envoi de la requête pour récupérer les informations de l’utilisateur.
const urlInfo = `${config.franceConnect.FC_URL}${config.franceConnect.USERINFO_FC_PATH}?schema=${config.franceConnect.SCOPES_BACK}`;
const configInfo = {
  method: "get",
  url: urlInfo,
  headers: {
    Authorization: `${responseToken.data.token_type} ${responseToken.data.access_token}`,
  },
};
const responseInfo = await axios(configInfo);

Traitement de la connexion

L’objet renvoyé par FranceConnect contient une variable sub qui est l’identifiant technique de la personne. Il faut donc utiliser cette variable afin de gérer notre connexion.

  • On va vérifier si l’utilisateur existe en base
const userExist = await User.getOne({
  sub: responseInfo.data.sub,
});
  • Si l’utilisateur existe alors on connecte la personne en enregistrant son token de connexion FC
if (userExist) {
  await User.saveFCToken({
    token: responseToken.data.id_token,
  })
  //Mecanisme de connexion souhaité à implémenter
  return res.json({ data: userExist, connect: true });
}
  • Si l’utilisateur n’existe pas, alors il faut le créer en base grâce aux données récupérées. L’objet des données récupéré est différent selon les droits d’accès à FranceConnect de l’application, ici on utilisera uniquement sexe/nom/prénoms/date de naissance/mail.
//Création d'un objet avec les données de l'utilisateur
const prenoms = responseInfo.data.given_name.split(" ");
const dateNaissance = new Date(responseInfo.data.birthdate);
const reponseDto = {
  sexe: responseInfo.data.gender === "male" ? "Homme" : "Femme",
  nomNaissance: responseInfo.data.family_name,
  prenom1: prenoms[0] ?? "",
  prenom2: prenoms[1] ?? "",
  prenom3: prenoms[2] ?? "",
  mail: responseInfo.data.email,
  dateNaissance,
  token: responseToken.data.id_token,
};
//Création de l'utilisateur /!\ Selon le cas il peut être nécéssaire de vérifier si un utilisateur avec la même identité ou le même mail existe déjà
const user = await User.create(reponseDto);

//Mecanisme de connexion souhaité à implémenter
return res.json({ data: user, connect: true });

Déconnexion

Lorsque l’utilisateur se déconnecte de l’application, il faut aussi le déconnecter de FranceConnect. Pour cela, il suffit de rediriger vers l’URL suivante :

FC_URL/api/v1/logout?id_token_hint=ID_TOKEN_HINT&state=STATE&post_logout_redirect_uri=POST_LOGOUT_REDIRECT_URI

En environnement de test nous aurons :

  • FC_URL : https://fcp.integ01.dev-franceconnect.fr/api/v1/logout
  • ID_TOKEN_HINT : Le token de l’utilisateur enregistrer à la connexion
  • STATE : Champ aléatoire
  • POST_LOGOUT_REDIRECT_URI : route de redirection de FranceConnect lorsque la déconnexion est terminée : http://localhost:8080/logout-callback

Pour aller plus loin

Il existe les services FranceConnect que vous pouvez retrouver ici : https://api.gouv.fr/les-api/franceconnect

Liens utiles

  • Documentation FranceConnect : https://partenaires.franceconnect.gouv.fr/fcp/fournisseur-service
  • Demande d’habilitation à FranceConnect : https://datapass.api.gouv.fr/franceconnect
  • Espace FranceConnect : https://partenaires.franceconnect.gouv.fr/login
  • Documentation DSFR : https://www.systeme-de-design.gouv.fr/elements-d-interface/composants/bouton-franceconnect/
  • Portage DSFR : https://www.systeme-de-design.gouv.fr/communaute/portages-en-cours/

Endpoint utiles

  • Authorization https://fcp.integ01.dev-franceconnect.fr/api/v1/authorize
  • Token https://fcp.integ01.dev-franceconnect.fr/api/v1/token
  • UserInfo https://fcp.integ01.dev-franceconnect.fr/api/v1/userinfo
  • Logout https://fcp.integ01.dev-franceconnect.fr/api/v1/logout

À lire aussi

Fresque numérique miniature image
16 avril 2025

Fresque du Numérique

Lire la suite

intelligence artificielle Ouicommit miniature image
17 mars 2025

Ouicommit – L’intelligence artificielle en entreprise, on y est ! 

Lire la suite

Image miniature Hackathon Women in Tech
13 mars 2025

Hackathon Women in Tech :  un engagement pour une tech plus inclusive 

Lire la suite

image miniature les nouveautés Atlassian
26 février 2025

Les nouveautés Atlassian en 2025

Lire la suite

Articles associés

Fresque numérique miniature image
16 avril 2025

Fresque du Numérique


Lire la suite
intelligence artificielle Ouicommit miniature image
17 mars 2025

Ouicommit – L’intelligence artificielle en entreprise, on y est ! 


Lire la suite
Image miniature Hackathon Women in Tech
13 mars 2025

Hackathon Women in Tech :  un engagement pour une tech plus inclusive 


Lire la suite

À propos

  • Qui sommes-nous ?
  • Références
  • RSE
  • Ressources

Offres

  • Applications métier
  • Collaboration des équipes
  • Sécurisation et optimisation du système d’information
  • Transformation numérique

Expertises

  • Développement logiciel
  • DevSecOps
  • Intégration de logiciels et négoce de licences
  • Logiciel de CRM et de gestion
  • UX/UI design
  • Accessibilité Numérique
  • Démarches simplifiées
  • Formations Atlassian

Carrières

  • Pourquoi rejoindre Ouidou ?
  • Nous rejoindre
  • Rencontrer nos collaborateurs
  • Grandir chez Ouidou

SIEGE SOCIAL
70-74 boulevard Garibaldi, 75015 Paris

Ouidou Nord
165 Avenue de Bretagne, 59000 Lille

Ouidou Rhône-Alpes
4 place Amédée Bonnet, 69002 Lyon

Ouidou Grand-Ouest
2 rue Crucy, 44000 Nantes

Ouidou Grand-Est
7 cour des Cigarières, 67000 Strasbourg

  • Linkedin Ouidou
  • GitHub Ouidou
  • Youtube Ouidou
© 2024 Ouidou | Tous droits réservés | Plan du site | Mentions légales | Déclaration d'accessibilité
    Nous contacter