diff --git a/README.md b/README.md index 71f3885..099cfc6 100644 --- a/README.md +++ b/README.md @@ -1 +1,6 @@ # Documentation-FranceConnect-Plus + +Cette documentation regroupe l'ensemble des informations nécessaire à l'intégration de FranceConnect+, que ce soit en tant que Fournisseur d'identités de FranceConnect+ ou en tant que Fournisseur de services. + +- [documentation Fournisseur d'identités](/fi/docs-fi.md) +- [documentation Fournisseur de services](/fs/README.md) diff --git a/fs/README.md b/fs/README.md new file mode 100644 index 0000000..01c6b0d --- /dev/null +++ b/fs/README.md @@ -0,0 +1,52 @@ + +Documentation Fournisseur de Service + +--- + +Vous souhaitez implémenter FranceConnect+ sur votre site? Vous êtes au bon endroit ! Cette documentation présente l'ensemble des informations à connaitre sur FranceConnect+ + +# Préambule + +Cette documentation est à destination des Fournisseurs de Service souhaitant intégrer FranceConnect+. +FranceConnect+ met à disposition du Fournisseur de Service des identités de niveau de garantie eIDAS Susbtantiel et Elevé. +FranceConnect+ s'implémente sur une plateforme distincte de la plateforme FranceConnect qui reste dédiée aux identités de niveau de garantie "faible". + +# Je veux devenir fournisseur de services + +Vous vous poser des questions sur le fonctionnement général de FranceConnect+ et de son écosystème. Vous trouverez l'ensemble des réponses à vos questions dans cette section. + +[Je veux devenir fournisseur de services](pilotage/README.md) + +# Je gère un projet d'intégration de FranceConnect+ + +Vous allez ou vous avez lancé un projet pour devenir FranceConnect+ et vous souhaiter connaitre les différentes problématique d'intégration de FranceConnect+. Vous souhaitez avoir des informations précises sur les fonctionnement de FranceConnect+ pour gérer un projet d'intégration de FranceConnect+. Vous trouverez l'ensemble des réponses à vos questions dans cette section. + +[Je gère un projet d'intégration de FranceConnect+](projet/README.md) + +# J'intègre FranceConnect+ dans mon service en ligne + +## Je veux savoir comment fonctionne FranceConnect+ + +- [Qu'est ce que OpenID Connect ?](technique/technique-oidc.md) +- [Comment FranceConnect+ utilise OpenID Connect?](technique/technique-oidc-fc.md) + +## Je veux savoir comment utiliser FranceConnect+ + +- [Comment accéder aux différents environnements de FranceConnect+ ?](technique/technique-env-fc.md) +- [Comment utiliser les scopes OpenID Connect pour accéder aux données des utilisateurs ? ](technique/technique-scope-fc.md) +- [Comment utiliser les niveaux de garantie eIDAS sur FranceConnect+ ?](technique/technique-eidas.md) +- [Comment déconnecter un utilisateur de FranceConnect+ ?](technique/technique-deconnexion.md) +- [Quelles sont les durées de vie des sessions et jetons de FranceConnect+ ?](technique/technique-sessions.md) + - [Comment gérer les erreurs renvoyées par FranceConnect+ ?](technique/technique-erreurs.md) + + +## Je veux connaitre les règles d'intégration du bouton dans mon service + +- [Comment intégrer le bouton FranceConnect+ à mon service ?](technique/technique-boutons-fc.md) + +## Glossaire + +Vous êtes perdu dans l'ensemble des termes techniques présents dans cette documentation ? Nous avons notre [glossaire](technique/technique-glossaire.md) qui est là pour vous aider. + + + diff --git a/fs/diagrams/diagram-sequence-oauth.mmd b/fs/diagrams/diagram-sequence-oauth.mmd new file mode 100644 index 0000000..58dc957 --- /dev/null +++ b/fs/diagrams/diagram-sequence-oauth.mmd @@ -0,0 +1,15 @@ +```mermaid +sequenceDiagram + autonumber + participant RO as Resource Owner + participant C as Client + participant AS as Authorization Server + participant RS as Resource Server + + C->>RO: Authorization Request + RO-->>C: Authorization Grant + C->>AS: Authorization Grant + AS-->>C: Access Token + C->>RS: Access Token + RS-->>C: Protected Resource +``` \ No newline at end of file diff --git a/fs/diagrams/diagram-sequence-oauth.png b/fs/diagrams/diagram-sequence-oauth.png new file mode 100644 index 0000000..043a0cf Binary files /dev/null and b/fs/diagrams/diagram-sequence-oauth.png differ diff --git a/fs/docs-fs.md b/fs/docs-fs.md deleted file mode 100644 index 6bd28b9..0000000 --- a/fs/docs-fs.md +++ /dev/null @@ -1,341 +0,0 @@ -# Préambule - -Cette documentation est à destination des Fournisseurs de Service souhaitant intégrer FranceConnect+. -FranceConnect+ met à disposition du Fournisseur de Service des identités de niveau de garantie eIDAS Susbtantiel et Elevé. -FranceConnect+ s'implémente sur une plateforme distincte de la plateforme dite "Standard" qui reste dédiée aux identités de niveau de garantie "faible". - -# Je veux devenir Fournisseur de Service - -## Quelles sont les étapes pour devenir Fournisseur de Service ? - -1. Vous consultez les conditions d'éligibilité à FranceConnect+. Les conditions juridiques, de sécurité et de qualité de service sont détaillées dans nos [conditions générales d'utilisation](https://partenaires.franceconnect.gouv.fr/cgu). Le cadre d'implémentation et d'intégration est détaillé dans nos [spécifications ergonomiques](https://partenaires.franceconnect.gouv.fr/fcp/fournisseur-service#acceptance) **TODO** *mettre à jour le lien* . - -2. Vous soumettez une demande d'habilitation via [datapass.api.gouv.fr](https://datapass.api.gouv.fr/) et vous transmettez toutes les informations nécessaires à la validation de votre demande (respect du RGPD, contact du responsable technique, niveau de garantie eIDAS souhaité, données d'identité recueillies, etc). Votre demande est validée par le service juridique de la DINUM dans un délai moyen de 5 jours ouvrés. - -3. Si votre demande est acceptée, votre responsable technique reçoit un mail lui donnant accès à l'[espace partenaire](https://partenaires.franceconnect.gouv.fr/login). Cet espace vous permettra d'accéder aux ressources de développement et de test. - -4. Vous présentez vos développements pour une qualification par l'équipe FranceConnect+. La durée de cette phase de qualification dépend du [respect des prérequis ](https://partenaires.franceconnect.gouv.fr/monprojet/recetter/)(techniques, sécurité, fonctionnels, UX...). N'hésitez pas à soumettre vos maquettes de parcours en amont pour une pré-qualification fonctionnelle et UX anticipée. - -5. Si votre implémentation est validée par notre équipe, vous recevez vos secrets pour passer en production. - -## Accès à l'environnement d'intégration FranceConnect+ - -Pour vous permettre de réaliser les développements liés à l'intégration de FranceConnect+, nous mettons à disposition un environnement d'intégration. Les accès à cet environnement se font à travers des clés qui vous sont communiquées sur votre espace partenaire. - -Sur notre environnement d'intégration, vous pouvez utiliser le fournisseur d'identité "Démonstration" dont les données sont modifiables ici : https://github.com/france-connect/identity-provider-example/blob/master/database.csv - -Vous pouvez proposer de nouvelles identités de tests directement sur ce fichier. - -Les adresses de notre environnement d'intégration sont les suivantes : - -| EndPoint | Adresse | -| ------ | ------ | -| Discovery URL | https://auth.integ01.dev-franceconnect.fr/api/v2/.well-known/openid-configuration |  -| Authorization | https://auth.integ01.dev-franceconnect.fr/api/v2/authorize | -| Token | https://auth.integ01.dev-franceconnect.fr/api/v2/token | -| UserInfo | https://auth.integ01.dev-franceconnect.fr/api/v2/userinfo |  -| Logout | https://auth.integ01.dev-franceconnect.fr/api/v2/logout |  - -## Mettre en production mon Fournisseur de Service - -Pour mettre en production votre Fournisseur de Service, il faut au préalable avoir : - -1. Reçu la qualification de vos développements par FranceConnect+ sur un environnement autre que votre production. -2. Demandé une mise en production à travers votre [espace partenaire]((https://partenaires.franceconnect.gouv.fr/login)) -3. Utilisé les clés de production qui vous ont été fournies par FranceConnect. - -**Attention :** Il ne faut surtout pas utiliser les clés d'intégration que vous avez utilisées lors de vos développements avec votre Fournisseur de Service en production. Les clés d'intégration ne sont utilisables que sur l'environnement d'intégration FranceConnect. - -Les adresses de notre environnement de production sont les suivantes : - -| EndPoint | Adresse | -| ------ | ------ | -| Discovery URL | https://auth.franceconnect.gouv.fr/api/v2/.well-known/openid-configuration |  -| Authorization | https://auth.franceconnect.gouv.fr/api/v2/authorize | -| Token | https://auth.franceconnect.gouv.fr/api/v2/token | -| UserInfo | https://auth.franceconnect.gouv.fr/api/v2/userinfo |  -| Logout | https://auth.franceconnect.gouv.fr/api/v2/logout |  - - -## Réaliser des tests avant de soumettre sa demande d'habilitation - -Un fournisseur de Service de démonstration est disponible à l'adresse [https://fsp1v2.integ01.fcp.fournisseur-de-service.fr/](https://fsp1v2.integ01.fcp.fournisseur-de-service.fr/). - -# Concepts de base -## Le protocole OpenID Connect -### Introduction - -Le protocole OpenID Connect est au cœur du fonctionnement de FranceConnect. C'est une couche d'identification basée sur protocole OAuth 2.0. Il permet à des Clients (ici, les Fournisseur de Service) d'accéder à l'identité des Utilisateurs finaux (les internautes) par l'intermédiaire d'un serveur d'autorisation (ici, les Fournisseurs d'Identité). - -La spécification du protocole se trouve sur http://openid.net/connect/. - -Pour une référence d'implémentation OpenID Connect voici le lien : https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth - -### Les flux standards - -Le protocole OpenID Connect définit 3 appels REST faits par le client, et 4 endpoints (un du côté client, et trois du côté provider). - -En amont, le client s'inscrit (en général manuellement) auprès du provider. Il lui fournit une URL de callback (l'URL du client vers lequel l'internaute est redirigé une fois authentifié), aussi appelée "callback endpoint". En retour le provider donne au client un client ID et un client secret. - -Lorsque l'internaute clique sur le bouton d'authentification du client, le flux est le suivant : - -1. Le client fait une redirection vers le "authorization endpoint" du provider avec son client id et son url de callback. Le provider redirige alors l'internaute vers sa mire d'authentification. Si l'internaute se loggue correctement, le provider renvoie un code d'autorisation au client. -2. Le client fait un appel Web service vers le "token endpoint" du provider avec le code d'autorisation reçu, et authentifie cette requête avec son client id et son client secret. Le provider retourne un access token (une chaîne de caractères encodée en base64), un id token (sous la forme d'un Json Web Token), et parfois un refresh token (une chaîne de caractères en base64). -3. Le client fait un appel Web service vers le "userInfo endpoint" du provider avec l'access token reçu, et le provider renvoie les informations de l'internaute au client. - -### Dans le cadre de FranceConnect - -L'enregistrement des Fournisseurs de Service auprès de FranceConnect+ s'effectue en déposant une demande sur le site [datapass.api.gouv.fr](https://datapass.api.gouv.fr/) - -FranceConnect+ implémente le flux [Authorization Code Flow](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth) d'OpenID Connect. - -Les fournisseurs de service doivent être clients OpenID Connect, et les fournisseurs d'identité doivent être fournisseurs OpenID Connect. FranceConnect+ est une brique intermédiaire qui est à la fois fournisseur (du point de vue des FS) et client (du point de vue des FI). - -### Chiffrement et signature des échanges - -Tous les échanges de jetons JWT entre FranceConnect+ et le Fournisseur de Service sont signés et chiffrés en utilisant les algorithmes suivants : - -**Signature de jetons par le FI** : - -- Asymétrique : - - - ES256 (EC + SHA256) - - RS256 (RSA + SHA256) - -**Chiffrement des jetons (jwe+jws)** : - -- Hybride : - - - RSA-OEAP + AES256-GCM - - ECDH-ES + AES256-GCM - -Les spécifications des algorithmes de signatures et de chiffrements utilisés sont les suivantes : - -* [JWA - https://tools.ietf.org/html/rfc7518](https://tools.ietf.org/html/rfc7518) -* [JWS - https://tools.ietf.org/html/rfc7515#appendix-A.3](https://tools.ietf.org/html/rfc7515#appendix-A.3) -* [JWE - https://tools.ietf.org/html/rfc7516#appendix-A.1](https://tools.ietf.org/html/rfc7516#appendix-A.1) - -Les clés publiques de signatures de FranceConnect+ sont disponibles via la *JWKS URL* présente dans les méta-data de la *Discovery URL* à l'adresse suivantes et sont changées régulièrement : - -| Environnement | adresses du endpoint | -| ------ | ------ | -| intégration FC | https://auth.integ01.dev-franceconnect.fr/api/v2/jwks | -| production FC | https://auth.franceconnect.gouv.fr/api/v2/jwks |  - -les clés de signatures utilisés par le Fournisseur d'Identité doivent être disponible via la *JWKS URL* présente dans les méta-data de la *Discovery URL* . - -## Les données usagers -Les données usagers sont fournies par les Fournisseurs d'Identité aux Fournisseurs de Service, via FranceConnect, conformément à l'habilitation obtenue via [datapass.api.gouv.fr](https://datapass.api.gouv.fr), et le choix des données réalisé par le fournisseur de service dans cette demande. - -L'identité pivot permet d'identifier un utilisateur particulier. - -* Nom de naissance -* Prénoms -* Sexe -* Date de naissance -* Code géographique INSEE de la ville de naissance -* Code géographique INSEE du pays de naissance - -En complément, il est possible d'obtenir le nom d'usage. Cependant cette donnée n'est pas obligatoirement connue par tous les Fournisseurs d'Identité. - -Vous pouvez avoir accès également à l'adresse email. Cette donnée de contact a également été vérifiée par le Fournisseur d'identité. Il est à remarquer que la donnée "adresse email" peut différer selon le Fournisseur d'Identité choisi par l'usager. - -FranceConnect+ transmet systématiquement au Fournisseur de Service un identifiant unique pour chaque utilisateur : - -* Cet identifiant est spécifique à chaque Fournisseur de Service. Un même utilisateur aura donc un identifiant unique différent pour chacun des Fournisseurs de Service auxquels il accède. -* Cet identifiant est le même quelque soit le Fournisseur d'Identité qui est utilisé par l'utilisateur. - -A noter que pour les niveaux de garantie d'identité eIDAS 2 et 3 (substantiel et élevé), les données d'identité fournies au fournisseur de service sont celles directement issues du fournisseur d'identité choisi par l'utilisateur, sans redressement RNIPP (INSEE). Ces données peuvent donc légèrement varier d'un fournisseur d'identité à l'autre, nous préconisons donc de réaliser le rapprochement/réconciliation sur la base de l'identifiant unique de l'utilisateur fourni par FranceConnect. - - -### Liste des scopes disponible lors de l'étape d'authentification FranceConnect - -FranceConnect+ a étendu le mécanisme de scopes pour qu'il soit plus modulaire. - -* Un seul scope est obligatoire : openid. Il permet de récupérer le sub (identifiant unique technique) de l'utilisateur. -* Il est possible de récupérer individuellement chaque propriété de l'identité pivot en utilisant leurs scopes dédiés. -* Il est possible de combiner plusieurs scopes de son choix pour récupérer seulement les informations dont a besoin le FS. - - -| Champs | Type | Description | Format | -|--------------|--------|-------------|--------| -| given_name | string | les prénoms séparés par des espaces (standard OpenIDConnect) | [A-Za-zÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸàâäçéèêëîïôöùûüÿÆŒæœ -'] | | -| family_name | string | le nom de famille de naissance (standard OpenIDConnect) |  [A-ZÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ \-']| | -| birthdate | string | la date de naissance au format YYYY-MM-DD (standard OpenIDConnect) | [ YYYY-01-01 ] - (\d{4})-01-01 - (Présumé mois) [ YYYY-MM-01 ] - (\d{4})-(\d{2})-01 - (Présumé jours) [ YYYY-MM-DD ] - (\d{4})-(\d{2})-(\d{2}) | -| gender | string | male pour les hommes, female pour les femmes (standard OpenIDConnect)| Masculin : M (male) Féminin : F (female) |  -| birthplace | string | le code INSEE du lieu de naissance sur 5 chiffres (ou une chaîne vide si la personne est née à l'étranger) | Si né en France (Taille de 5) [(([0-8][0-9AB])|(9[0-8AB]))[0-9]{3}] - [Details] - [Liste] En cas de pays étranger : Champs vide |  -| birthcountry | string | le code INSEE du pays de naissance sur 5 chiffres | Pour les pays étrangers (Taille de 5 ) [99[0-9]{3}] - [Details] Pour la France 99100 | - - - -### Les données complémentaires - -| Champs | Type | Description | Format | -|--------------|--------|-------------|--------| -| sub | string | identifiant technique (standard OpenIDConnect) | 66 caractères hexa + lettre 'v' | -| email | string | l'adresse électronique de contact de la personne (standard OpenIDConnect) | RFC 5322 | -| preferred_username | string | le nom d'usage (standard OpenIDConnect) | [A-ZÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ \-'] | - - - -### Les "alias" - -**profile :** Regroupe les scopes given_name, family_name, birthdate et gender. Si disponible, renvoie aussi preferred_username - -**birth :** Regroupe les scopes birthplace et birthcountry. Permet de récupérer la ville et le département de naissance de la personne. - -**identite_pivot :** Regroupe les scopes profile et birth. Permet de récupérer l'identité pivot complète plus le nom d'usage si disponible. - -Cette liste de scopes est définie par la norme OpenIDConnect : http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims - -# Je veux identifier/authentifier des utilisateurs via FranceConnect - -# Intégration d'un bouton FranceConnect+ - -Les boutons d’action FranceConnect+ sont primordiaux dans l’usage du service. Il est obligatoire d’utiliser l’un des boutons proposé et aucun autre visuel pour la connexion des usagers. - -Pour les boutons en svg, lors de l'utilisation d'une image veuillez préciser la taille du bouton. - -Téléchargements : - -* Pack SVG -* Pack PNG -* Pack JPG - - - -## Détail du fonctionnement - -drawing - - - -La récupération de l'identité pivot doit être faite dans la suite immédiate des appels précédents (authentification et récupération du code). Le fait d'appeler ce Web service plus tard n'est aujourd'hui pas proposé. - -### Détail des flux - -Les flux entre FranceConnect+ et le Fournisseur de Service respectent ce qui est défini dans la norme OpenId Connect. Pour plus de détails, il faut se référer à la [documentation OIDC - https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth) - -## Utiliser les niveaux eIDAS en tant que FS - -EIDAS est un standard européen visant à normaliser et à améliorer la sécurité de l'identification sur Internet. Il propose notamment 3 niveaux de garantie sur les moyens utilisés pour l'identification. Vous pouvez, en tant que Fournisseur de Service, utiliser les niveaux eIDAS afin de récupérer une identité avec le niveau de garantie correspondant à votre besoin. - -Comme la norme ne prévoit pas aujourd'hui de mesures techniques particulières pour préciser le niveau souhaité, FranceConnect+ utilise le claim optionnel "acr" (http://openid.net/specs/openid-connect-basic-1_0.html#RequestParameters) de la norme OpenID Connect. Pour le Fournisseur de Service, cela veut dire remplir le claim optionnel acr_values lors de la demande d'authentification (appel à l'endpoint /api/v2/authorize). - -Au sujet du claim acr_values, on notera que c'est, selon la norme, un "voluntary claim" qui théoriquement traduit une préférence et non une exigence. Lorsque ce claim est fourni, FranceConnect+ ne proposera à l'utilisateur que les Fournisseurs d'Identité pouvant satisfaire le niveau eIDAS demandé. En retour, le Fournisseur d'Identité renverra par le biais de FranceConnect+ le niveau eIDAS avec lequel l'authentification a eu lieu. Le Fournisseur de Service doit vérifier le niveau eIDAS utilisé afin de s'assurer que celui-ci est bien conforme au niveau eIDAS attendu. - -Exemple d'appel précisant un niveau eIDAS minimum : - -``` -https://fcp.integ01.dev-franceconnect.fr/api/v2/authorize?response_type=code&client_id=123456&redirect_uri=https%3A%2F%2Ffournisseur-de-service.dev-franceconnect.fr%2Flogin-callback&scope=openid%20profile%20email%20address%20phone%20preferred_username%20email%20address%20phone%20preferred_username&acr_values=eidas1&state=randomValue&nonce=randomValue -``` - -Afin d'y arriver, il faut spécifier une ou plusieurs valeurs parmi les suivantes : - -* eidas2 : niveau substantiel -* eidas3 : niveau élevé - - -Si le claim acr n'est pas précisé, le niveau par défaut est fixé à eidas3, le plus sécurisé. -Si le claim est précisé, FranceConnect+ ne proposera à l'utilisateur que les fournisseurs d'identité de niveau supérieur ou égal. Sinon, FranceConnect+ ne proposera à l'utilisateur que les Fournisseurs d'Identité de niveau élevé. -Si plusieurs niveaux sont précisés, FranceConnect+ prend en compte le niveau le plus bas. -Si le claim est considéré par FranceConnect+ comme n'étant pas valide, le niveau par défaut est utilisé. -Le niveau eIDAS utilisé pour l'authentification est retourné par le fournisseur d'identité (cf la documentation du FI), par le biais de FranceConnect+ (qui le transmet sans le modifier) et du claim acr dans l'ID Token retourné au Fournisseur de Service. - -Il est de la responsabilité du Fournisseur de service de s'assurer que le niveau retourné est au moins égal ou supérieur à celui demandé (si eidas2 est demandé, eidas3 doit être accepté tout comme eidas2). - - -# Je veux déconnecter l'utilisateur de FranceConnect - -Pour les niveaux Substantiel et Elevé, FranceConnect+ ne gère pas de session utilisateur et demande systématique à l'utilisateur de se ré-authentifier auprès d'un Founisseur d'Identité. - -Cependant, il est tout de même demandé au Fournisseur de Service de gérer : -* la déconnexion auprès de FranceConnect -* la révocation de l’accès token - -## Cinématique de déconnexion par un Fournisseur de Service - -FranceConnect+ implémente la section sur la déconnexion en cours de spécification dans la norme OpenID Connect : https://openid.net/specs/openid-connect-frontchannel-1_0.html#RPLogout - -FranceConnect+ ne gère pas la déconnexion de l'usager au service FranceConnect+ à la fermeture du navigateur. - -Le Fournisseur de Service doit pouvoir déconnecter l'utilisateur de sa session FranceConnect. La cinématique globale est celle-ci : - -1. L' utilisateur clique sur un lien de déconnexion présenté par le FS. -2. Le FS doit déconnecter l'utilisateur de son application et de sa session FranceConnect. -3. L' utilisateur est redirigé vers la page de retour spécifiée par le FS. -4. Le FS doit préciser l'URL où l'on doit rediriger l'utilisateur une fois qu'il a choisi de se déconnecter ou non de FranceConnect+ via le paramètre post_logout_redirect_uri, ainsi que passer l'id_token récupéré lors de l'authentification de l'utilisateur via le paramètre id_token_hint. - -Il est obligatoire de renseigner les différentes urls de redirections de déconnexion dans les paramètres client - -## Révocation de l'access token - -En tant que Fournisseur de Service, vous avez la possibilité de révoquer un *access token*. Pour cela, FranceConnect+ respecte les spécifications OAuth 2.0 sur lesquelles se base OpenId Connect. La spécification de la révocation de token se trouve à cette adresse https://tools.ietf.org/html/rfc7009 - -# Gestion d'erreurs entre FranceConnect+ et le Fournisseur de Service - -En tant qu'OpenID Connect provider, FranceConnect+ peut renvoyer toutes sortes d'erreurs à une application cliente. Pour ce faire, FranceConnect+ passe par le mécanisme de retour d'erreurs d'un fournisseur d'identité openid connect tel que décrit dans la norme ( http://openid.net/specs/openid-connect-core-1_0.html#AuthError, en particulier les sections 3.1.2.6 (authentification), 3.1.3.4 (jeton d'accès), 5.3.3 (service d'informations utilisateur) ) - - -# Les données de FranceConnect+ qui expirent - -FranceConnect+ gère plusieurs types de données ayant une durée de vie limitée lors du déroulé d'une authentification par OpenID Connect ou de la fourniture d'un jeton d'accès à une ressource protégée (cinématique OAuth2 classique). Chacune de ces données possède une durée de vie qui lui est propre au delà de laquelle elle doit être régénérée. En voici le détail : - -| Type | Utilisé lors de ... | Durée de vie | -| ------ | ------ | ------ | -| Session Web | A chaque authentification et pour maintenir la session côté FranceConnect+ | 30 minutes sans action | -| Access Token | Récupération d'informations (phase 3 cinématique d'authentification / cinématique OAuth2) | 60 secondes | -| Authorization code | Code fourni lors du début de la démarche d'authentification, il sert ensuite à récupérer l'access token | 30 secondes | -| Consentement | Consentement donné par l'utilisateur pour l'accès à une ressource protégée (associée à un scope au sens OAuth2) | 5 secondes | - - -# Glossaire - - -* **FC_URL :** URL de FranceConnect+ -* **FS_URL :** Votre URL, en tant que fournisseur de service -* **FD_URL :** URL du fournisseur de données -* **CALLBACK_URL_DATA :** le callback du FS, communiqué lors de son inscription auprès de FC -* **POST_LOGOUT_REDIRECT_URI :** L'URL de redirection après la demande de déconnexion FC -* **CLIENT_ID :** Identifiant du FS, communiqué lors de son inscription auprès de FC -* **CLIENT_SECRET :** Le secret du FS, communiqué lors de son inscription auprès de FC -* **AUTHZ_CODE :** Code retourné (dans l'URL) par FC au FS lorsque ce dernier fait un appel sur le endpoint FC_URL/api/v1/authorize. Il est ensuite passé (dans le corps de la requête HTTP POST) lors de l'appel sur le endpoint FC_URL/api/v1/token -* **ACCESS_TOKEN :** oken retourné (dans le corps HTTP) par l'appel au endpoint FC_URL/api/v2/token. Il est ensuite passé lors de l'appel au endpoint FC_URL/api/v2/userinfo -* **SCOPES :** Liste des scopes demandés séparés par des espaces (donc par %20 au format unicode dans l'URL) - -Voici la liste supportée par FranceConnect+ : - - * openid : obligatoire, permet de demander l'identifiant technique de l'utilisateur au format OpenIDConnect - * profile : obligatoire, permet de récupérer l'essentiel de l'identité pivot. Si disponible, renvoie aussi le preferred_username - * birth : obligatoire, permet de récupérer la ville et le département de naissance de la personne (identité pivot) - * email : obligatoire, permet de récupérer l'adresse électronique de la personne - -Cette liste de scopes est définie par la norme OpenIDConnect - -L'identité pivot complète se récupère soit par le scope identite_pivot, soit en cumulant deux scopes différents (profile + birth) car les informations de ville et de département de naissance de la personne ne font pas partie des données pouvant être renvoyées en soumettant le scope 'profile' seul. Le découpage est fait ici dans un souci de se conformer à la norme. - -* **ID_TOKEN :** Objet JWT retourné par l'appel au endpoint FC_URL/api/21/token. L'objet JWT est un objet JSON formatté et signé. Le JSON doit contenir ces six clés : aud,exp,iat,iss,sub et nonce. - -Exemple : - -``` -{ - 'aud':'895fae591ccae777094931e269e46447', - 'exp':1412953984, - 'iat':1412950384, - 'iss':http://franceconnect.gouv.fr, - 'sub':YWxhY3JpdMOp, - 'idp':'FC', - 'nonce':'12344354597459' -} -``` -Les champs *aud, exp, iat, iss, sub* sont des champs obligatoires de la norme OpenId Connect. Le *nonce* est un paramètre obligatoirement envoyé lors de l'appel à `/authorization`. Le FS doit impérativement vérifier que la valeur correspond bien à celle qu'il a envoyée, et qui doit être liée à la session de l'utilisateur. - -Si vous utilisez une librairie pour transformer le json en JWT, il génèrera une chaîne de caractères constitué de 3 chaînes base64 séparées par un point. - - -* **ID_TOKEN_HINT :** Objet JWT identique au format ID_TOKEN qui a été reçu lors de l'échange avec l'appel à FC_URL/api/v1/token et doit être passé en paramètre lors de l'appel à FC_URL/api/v2/logout -* **USER_INFO :** Voir la section identité pivot -* **STATE :** Champ obligatoire, généré aléatoirement par le FS, que FC renvoie tel quel dans la redirection qui suit l'authentification, pour être ensuite vérifié par le FS. Il est utilisé afin d’empêcher l’exploitation de failles CSRF -* **NONCE :** Champ obligatoire, généré aléatoirement par le FS que FC renvoie tel quel dans la réponse à l'appel à /token, pour être ensuite vérifié par le FS. Il est utilisé pour empêcher les attaques par rejeu -* **SUB :** Identifiant technique (unique et stable dans le temps pour un individu donné) fourni par FranceConnect+ au FS. Le SUB est présent dans l'IdToken retourné au FS ainsi que dans les informations d'identité. Le SUB retourné par FranceConnect+ est spécifique à chaque fournisseur de service (i.e: Un usager aura toujours le même SUB pour un Fournisseur de Service donné, en revanche il aura un SUB différent par Fournisseur de Service qu'il utilise). diff --git a/fs/images/projet/projet-bouton-eidas.png b/fs/images/projet/projet-bouton-eidas.png new file mode 100644 index 0000000..a1cc6ea Binary files /dev/null and b/fs/images/projet/projet-bouton-eidas.png differ diff --git a/fs/images/technique/guidelines-fc+.png b/fs/images/technique/guidelines-fc+.png new file mode 100644 index 0000000..b550896 Binary files /dev/null and b/fs/images/technique/guidelines-fc+.png differ diff --git a/fs/images/technique/technique-guidelines-fc+-dimensions.png b/fs/images/technique/technique-guidelines-fc+-dimensions.png new file mode 100644 index 0000000..a057e89 Binary files /dev/null and b/fs/images/technique/technique-guidelines-fc+-dimensions.png differ diff --git a/fs/images/technique/technique-guidelines-fc+-lien.png b/fs/images/technique/technique-guidelines-fc+-lien.png new file mode 100644 index 0000000..bc542ce Binary files /dev/null and b/fs/images/technique/technique-guidelines-fc+-lien.png differ diff --git a/fs/images/technique/technique-guidelines-fc+-ne-pas-faire.png b/fs/images/technique/technique-guidelines-fc+-ne-pas-faire.png new file mode 100644 index 0000000..63a470e Binary files /dev/null and b/fs/images/technique/technique-guidelines-fc+-ne-pas-faire.png differ diff --git a/fs/images/technique/technique-guidelines-fc+-position.png b/fs/images/technique/technique-guidelines-fc+-position.png new file mode 100644 index 0000000..06e7b03 Binary files /dev/null and b/fs/images/technique/technique-guidelines-fc+-position.png differ diff --git a/fs/images/technique/technique-guidelines-fc+-themes.png b/fs/images/technique/technique-guidelines-fc+-themes.png new file mode 100644 index 0000000..ed24ff7 Binary files /dev/null and b/fs/images/technique/technique-guidelines-fc+-themes.png differ diff --git a/fs/integration/integration-oidc.md b/fs/integration/integration-oidc.md new file mode 100644 index 0000000..f777be3 --- /dev/null +++ b/fs/integration/integration-oidc.md @@ -0,0 +1,24 @@ + + +--- + +# Qu'est ce que le protocole OpenID Connect ? +## Introduction + +Le protocole OpenID Connect est au cœur du fonctionnement de FranceConnect+. C'est une couche d'identification basée sur protocole OAuth 2.0. Il permet à des Clients (ici, les Fournisseur de Service) d'accéder à l'identité des Utilisateurs finaux (les internautes) par l'intermédiaire d'un serveur d'autorisation (ici, les Fournisseurs d'Identité). + +La spécification du protocole se trouve sur http://openid.net/connect/. + +Pour une référence d'implémentation OpenID Connect voici le lien : https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth + +## Les flux standards + +Le protocole OpenID Connect définit 3 appels REST faits par le client, et 4 endpoints (un du côté client, et trois du côté provider). + +En amont, le client s'inscrit (en général manuellement) auprès du provider. Il lui fournit une URL de callback (l'URL du client vers lequel l'internaute est redirigé une fois authentifié), aussi appelée "callback endpoint". En retour le provider donne au client un client ID et un client secret. + +Lorsque l'internaute clique sur le bouton d'authentification du client, le flux est le suivant : + +1. Le client fait une redirection vers le "authorization endpoint" du provider avec son client id et son url de callback. Le provider redirige alors l'internaute vers sa mire d'authentification. Si l'internaute se loggue correctement, le provider renvoie un code d'autorisation au client. +2. Le client fait un appel Web service vers le "token endpoint" du provider avec le code d'autorisation reçu, et authentifie cette requête avec son client id et son client secret. Le provider retourne un access token (une chaîne de caractères encodée en base64), un id token (sous la forme d'un Json Web Token), et parfois un refresh token (une chaîne de caractères en base64). +3. Le client fait un appel Web service vers le "userInfo endpoint" du provider avec l'access token reçu, et le provider renvoie les informations de l'internaute au client. \ No newline at end of file diff --git a/fs/pilotage/README.md b/fs/pilotage/README.md new file mode 100644 index 0000000..2ce7f2d --- /dev/null +++ b/fs/pilotage/README.md @@ -0,0 +1,53 @@ +[Documentation Fournisseur](../README.md) > [Je veux devenir Fournisseur de Service](README.md) + +--- + +# Je veux devenir Fournisseur de Service + +Vous souhaitez devenir Fournisseur de Service pour FranceConnect+, voici les questions à vous poser. + +### Quelles sont les étapes pour devenir Fournisseur de Service ? + +Pour devenir fournisseur de service de FranceConnect+, vous devez réaliser les actions suivantes : + +1. vérifier les conditions d'éligibilité; +2. demander votre habilitation; +3. réaliser votre intégration; +4. faire qualifier votre intégration; +5. passer en production. + +[Plus d'informations](pilotage-etapes.md) + +### Quels sont les différents acteurs que je dois faire intervenir dans mon organisation pour devenir Fournisseur de Service ? + +Pour devenir fournisseur de service, vous devez faire intervenir des acteurs de votre organisation comme le responsable de traitement, votre délégué à la protection des données, votre RSSI ou votre responsable technique. + + +[Plus d'informations](pilotage-demarches-acteurs.md) + + +### Quelles sont les différences entre FranceConnect et FranceConnect+ ? + +La principale différences entre FranceConnect et FranceConnect+ est le niveau de garantie eIDAS supporté par la plateforme. + + [Plus d'informations](pilotage-differences-fc-fc+.md) + + ### L'usage de FranceConnect+ est-il payant ? + +L'usage de FranceConnect+ n'entraine aucune compensation financière entre la DINUM et le fournisseur de service. Cependant, il peut nécessiter une relation contractuel avec les fournisseurs d'identités et entrainer une facturation de l'usage des identités. + +[Plus d'informations](pilotage-facturation.md) + +### Quels sont les fournisseurs d'identités disponible sur FranceConnect+ ? + +La liste des fournisseurs d'identité est disponible sur le site internet de FranceConnect+. Il s'agit exclusivement de fournisseurs d'identité qualifié par l'ANSSI pour les niveau de garantie substantiel et élevé. + +[Plus d'informations](piloge-fi.md) + +### Je suis déjà Fournisseur de Service pour FranceConnect, que dois je faire en plus pour devenir Fournisseur de Service pour FranceConnect+ ? + +Si vous êtes fournisseur de service pour FranceConnect et que vous souhaitez devenir fournisseur de service pour FranceConnect+, vous devez : +- réaliser une nouvelle demande d'habilitation via datapass et - - réaliser quelques adaptions techniques pour intégrer les spécificités des FranceConnect+ +- demander une qualification par l'équipe FranceConnect + +[Plus d'informations](pilotage-integrer-fc+-apres-fc.md) diff --git a/fs/pilotage/piloge-fi.md b/fs/pilotage/piloge-fi.md new file mode 100644 index 0000000..3cf88dd --- /dev/null +++ b/fs/pilotage/piloge-fi.md @@ -0,0 +1,16 @@ +[Documentation Fournisseur](../README.md) > [Je veux devenir Fournisseur de Service](../README.md#je-veux-devenir-fournisseur-de-service) > Quels sont les fournisseurs d'identités disponible sur FranceConnect+ ? + +--- + +# Quels sont les fournisseurs d'identités disponible sur FranceConnect+ ? + +La liste des fournisseurs d'identité est disponible sur le site internet de [FranceConnect+](https://franceconnect.gouv.fr/france-connect-plus). Il s'agit exclusivement de fournisseurs d'identité qualifié par l'ANSSI pour les niveaux de garantie substantiel et élevé. + +En complément des fournisseurs d'identité, FranceConnect+ propose également une connection à la passerelle européenne eIDAS, permettant l'accès à votre fournisseu de service à des citoyens des autres états membres européens. Ceci est une obligation pour les fournisseurs de service publics utilisant FranceConnect+ et optionnel pour les fournisseurs de service privés. + + +--- + +Voir aussi : + +- [Qu'est ce qu'eIDAS et quels sont les niveaux de garantie de FranceConnect+ ?](../projet/projet-niveau-eidas.md) diff --git a/fs/pilotage/pilotage-demarches-acteurs.md b/fs/pilotage/pilotage-demarches-acteurs.md new file mode 100644 index 0000000..8da80a0 --- /dev/null +++ b/fs/pilotage/pilotage-demarches-acteurs.md @@ -0,0 +1,46 @@ +[Documentation Fournisseur](../README.md) > [Je veux devenir Fournisseur de Service](README.md) > Quels sont les acteurs à impliquer dans l'intégration de FranceConnect+ ? + +--- + +# Quels sont les acteurs à impliquer dans l'intégration de FranceConnect+ ? + +Pour devenir Fournisseur de Service de FranceConnect+, il est nécessaire de designé des personnes remplissants les rôles suivants : Responsable de traitement, Délégué à la protection des données, Responsable technique, Responsable de la Sécurité du Système d'Information. + +Il vous sera demandé lors de la demande d'habilitation à FranceConnec+ d'identifier les personnes ayant ces responsabilités. + +Les acteurs à impliquer sont les suivants : + +- Le responsable de traitement +- le délégué à la protection des données +- le responsable technique +- le responsable de la sécurité dur système d'information + + +## Responsable de traitement + +Le responsable du traitement des données est la personne physique ou morale qui, seul ou conjointement avec d’autres, détermine les finalités et les moyens du traitement des données à caractère personnel. Seule une personne appartenant à l’organisme demandeur peut être renseignée. ([plus d’infos](https://www.cnil.fr/fr/definition/responsable-de-traitement)) + +## Délégué à la protection des données + +C'est la personne qui s’assure que l’organisation protège convenablement les données à caractère personnel, conformément à la législation en vigueur. C'est généralement une personne appartenant à l’organisme demandeur. ([plus d’infos](https://www.cnil.fr/fr/designation-dpo)) + +## Responsable technique + +C'est la personne qui est reponsable de la mise en oeuvre du fournisseur de service de FranceConnect+. Cette personne recevra les accès techniques par mail. Le numéro de téléphone doit être un numéro de téléphone mobile. Il sera utilisé pour envoyer un code d’accès. Le responsable technique peut être le contact technique de votre prestataire. + +## Responsable de la Sécurité du Système d'Information + +Le Responsable de la sécurité des systèmes d’information (RSSI) +assure le pilotage de la démarche de cybersécurité sur un périmètre +organisationnel et/ou géographique au sein de l’organisation. Il définit +ou décline, selon la taille de l’organisation, la politique de sécurité des +systèmes d’information (prévention, protection, détection, résilience, +remédiation) et veille à son application. Il assure un rôle de conseil, +d’assistance, d’information, de formation et d’alerte, en particulier +auprès des directeurs métiers et/ou de la direction de son périmètre. + +--- + +Voir aussi : + +* [Quelles sont les étapes pour devenir Fournisseur de Service ? ](pilotage-etapes.md) \ No newline at end of file diff --git a/fs/pilotage/pilotage-differences-fc-fc+.md b/fs/pilotage/pilotage-differences-fc-fc+.md new file mode 100644 index 0000000..02c04b4 --- /dev/null +++ b/fs/pilotage/pilotage-differences-fc-fc+.md @@ -0,0 +1,24 @@ +[Documentation Fournisseur](../README.md) > [Je veux devenir Fournisseur de Service](README.md) > Quelles sont les différences entre FranceConnect et FranceConnect+ ? + +--- + +# Quelles sont les différences entre FranceConnect et FranceConnect+ ? + +La principale différences entre FranceConnect et FranceConnect+ est le niveau de garantie eIDAS supporté par la plateforme. Pour rappel, le règlement eIDAS prévoit trois niveau de garantie : + +> - Faible : à ce niveau, l’objectif est simplement de réduire le risque d’utilisation abusive ou d’altération de l’identité ; +> - Substantiel : à ce niveau, l’objectif est de réduire substantiellement le risque d’utilisation abusive ou d’altération de l’identité ; +> - Élevé : à ce niveau, l’objectif est d’empêcher l’utilisation abusive ou l’altération de l’identité. + +[[plus d'infos](https://www.ssi.gouv.fr/administration/reglementation/confiance-numerique/le-reglement-eidas/)] + + +La plateforme FranceConnect supporte uniquement le niveau de garantie faible. C'est la plateforme FranceConnect+ qui assurent les niveaux de garantie supérieur, c'est à dire les niveaux de garantie Substantiel et Élevé. + +--- + +Voir aussi : + +* [Qu'est ce qu'eIDAS et quels sont les niveaux de garantie de FranceConnect+ ?](../projet/projet-niveau-eidas.md) +* [Comment effectuer ma demande d'habilitation pour FranceConnect+ ?](../projet/projet-datapass.md) + diff --git a/fs/pilotage/pilotage-etapes.md b/fs/pilotage/pilotage-etapes.md new file mode 100644 index 0000000..f6edba3 --- /dev/null +++ b/fs/pilotage/pilotage-etapes.md @@ -0,0 +1,39 @@ +[Documentation Fournisseur](../README.md) > [Je veux devenir Fournisseur de Service](README.md) > Quelles sont les étapes pour devenir Fournisseur de Service ? +--- + +# Quelles sont les étapes pour devenir Fournisseur de Service ? + +### 1. Vérifier les conditions d'éligibilité + +Vous consultez les conditions d'éligibilité à FranceConnect. Les conditions juridiques, de sécurité et de qualité de service sont détaillées dans nos +conditions générales d'utilisations. Le cadre d'implémentation et d'intégration est détaillé dans nos [spécifications ergonomiques](../technique/technique-boutons-fc.md).# Quelles sont les étapes pour devenir Fournisseur de Service ? + + +### 2. Demander votre habilitation + +Vous soumettez une demande d'habilitation via le formulaire datapass FranceConnect et vous transmettez toutes les informations nécessaires à la validation de votre demande (respect du RGPD, contact du responsable technique, niveau de garantie eIDAS souhaité, données d'identité recueillies, etc). Votre demande est validée par le service juridique de la DINUM dans un délai moyen de 5 jours ouvrés. + +### 3. Réaliser votre intégration + +Si votre demande est acceptée, vous devez faire une demande pour pouvoir accéder à l'environnement d'intégration FranceConnect+. Celui-ci vous permettra de réaliser vos développements. Pour faire votre demande, il est nécessaire d'utiliser la démarche en ligne suivante : https://www.demarches-simplifiees.fr/commencer/demande-de-creation-d-un-fs-fc-plus. Veillez à bien préciser lors de votre demande concerne l'environnement d'intégration FranceConnect+ + +### 4. Faire qualifier votre intégration + +Vous devez présentez vos développements pour une qualification par l'équipe FranceConnect. La durée de cette phase de qualification dépend du respect des prérequis (techniques, sécurité, fonctionnels, UX...). N'hésitez pas à soumettre vos maquettes de parcours en amont pour une pré-qualification fonctionnelle et UX anticipée. + +Vous retrouvez l'ensemble des pré-requis dans la section *Recette interne* de la démarche simplifiée. + +Pour réaliser votre demande de qualification, vous devez utiliser la démarche en ligne suivante : https://www.demarches-simplifiees.fr/commencer/demande-qualification-fs-fcplus. Dans un premier temps, vous devez déjà réaliser par vous même une recette de votre intégration. Une fois votre recette réalisée, vous pouvez demander votre qualification par les équipes FranceConnect. + + +### 5. Passer en production + +Si votre implémentation est validée par notre équipe, vous recevez vos secrets pour passer en production. Pour cela, il est nécessaire d'utiliser la démarche en ligne suivante pour les demander : [https://www.demarches-simplifiees.fr/commencer/demande-de-creation-d-un-fs-fc-plus](https://www.demarches-simplifiees.fr/commencer/demande-de-creation-d-un-fs-fc-plus). Veillez à bien préciser lors de votre demande concerne l'environnement de production FranceConnect+. + +--- + +Voir aussi : +- [Quels sont les acteurs à impliquer dans l'intégration de FranceConnect+ ?](pilotage-demarches-acteurs.md) +- [Comment effectuer ma demande d'habilitation pour FranceConnect+ ?](../projet/projet-datapass.md) +- [Quelles sont les différences entre FranceConnect et FranceConnect+ ?](./pilotage-differences-fc-fc%2B.md) +- [Je suis déjà Fournisseur de Service pour FranceConnect, que dois je faire en plus pour devenir Fournisseur de Service pour FranceConnect+ ?](./pilotage-integrer-fc%2B-apres-fc.md) \ No newline at end of file diff --git a/fs/pilotage/pilotage-facturation.md b/fs/pilotage/pilotage-facturation.md new file mode 100644 index 0000000..0afeba5 --- /dev/null +++ b/fs/pilotage/pilotage-facturation.md @@ -0,0 +1,25 @@ +[Documentation Fournisseur](../README.md) > [Je veux devenir Fournisseur de Service](README.md) > L'usage de FranceConnect+ est-il payant? + +--- + +# L'usage de FranceConnect+ est-il payant? + +L'usage de FranceConnect+ n'entraine aucune compensation financière entre la DINUM et le fournisseur de service. Cependant, il peut nécessiter une relation contractuel avec les fournisseurs d'identités et entrainer une facturation de l'usage des identités. + +### Usage par les fournisseurs de service publics + +L'usage de FranceConnect+ est gratuit pour l'ensemble des fournisseurs de service public, quelque soit les fournisseurs d'identité utilisés par les usagers pour se connecter. + +### Usage par les fournisseurs de services privés + +Pour les fournisseurs de service privé, l'usage de FranceConnect+ nécessite une contractualisation avec l'ensemble des fournisseurs d'identité privés. Cela peut entrainer une facturation dépendant de la consommation des identités pour les fournisseurs de service. Dans ce cas, c'est la DINUM qui est en charge de fournir les volumétrie d'usages des fournisseurs d'identités par le fournisseur de service. + +L'usage des fournisseurs d'identité public est quant à lieu gratuit et ne nécessite pas de contractualisation entre le fournisseur de service et le fournisseur d'identité. + +**En bref :** L'usage de FranceConnect+ est payant pour les fournisseurs de service privés qui utilisent des fournisseurs de d'identité privés. + +--- + +Voir aussi : + +* [Quelles sont les différences entre FranceConnect et FranceConnect+ ?](../pilotage/pilotage-differences-fc-fc%2B.md) \ No newline at end of file diff --git a/fs/pilotage/pilotage-integrer-fc+-apres-fc.md b/fs/pilotage/pilotage-integrer-fc+-apres-fc.md new file mode 100644 index 0000000..9e43474 --- /dev/null +++ b/fs/pilotage/pilotage-integrer-fc+-apres-fc.md @@ -0,0 +1,40 @@ +[Documentation Fournisseur](../README.md) > [Je veux devenir Fournisseur de Service](README.md) > Je suis déjà Fournisseur de Service pour FranceConnect, que dois je faire en plus pour devenir Fournisseur de Service pour FranceConnect+ ? + +--- + +# Je suis déjà Fournisseur de Service pour FranceConnect, que dois je faire en plus pour devenir Fournisseur de Service pour FranceConnect+ ? + +## Demande d'habilitation + +Même si vous êtes déjà fournisseur de service FranceConnect, il est nécessaire de faire une demande d'habilitation spécifique à FranceConnect+ via [datapass](https://datapass.api.gouv.fr/franceconnect/). Lors de votre demande, veuillez à bien indiquer que votre demande FranceConnect+ dans la section *Niveau de garantie attendu par votre service*. + + +## Intégration + +FranceConnect+ étant une plateforme différente de FranceConnect, il est nécessaire de réaliser une intégration de FranceConnect+, en complément de l'intégration de FranceConnect. Vous devez donc suivre l'ensemble des étapes pour devenir Fournisseur de Service. + +L'intégration de FranceConnect+ en tant que Fournisseur de Service est légèrement différente de celle de FranceConnect car elle nécessite des mesures de sécurités supplémentaires afin de répondre à des exigences de sécurité spécifiques aux niveaux de garantie subtantiel et élevé. Vos équipes de développement devront par conséquent réaliser des évolutions pour pouvoir s'intégrer à FranceConnect+. Les différences principales par rapport à FranceConnect sont les suivants: + +- une plateforme différente, donc + - des URLs différentes pour accéder aux environnements; + - des secrets différents pour chacun des environnements (intégration, production) +- un chiffrement et un signature sur les jetons transmis +- une utilisation de mode discovery d'OpenID Connect +- une exposition des clés publiques de chiffrement et de signature + + +Les plateformes FranceConnect et FranceConnect+ reposent toutes les deux sur le même protocole, à savoir [OpenID Connect](https://openid.net/connect/). Hormis les différences cités ci dessus, leur fonctionnement est similaire. Ainsi les intégrations de FranceConnect et FranceConnect+ sont très similaire et ne nécessite pas pour un Fournisseur de Service une charge d'intégration important pour devenir Fournisseur de Service pour FranceConnect+ si vous l'êtes déjà pour FranceConnect. + +## Identifiant commun à FranceConnect et FranceConnect+ + +FranceConnect et FranceConnect+ fournissent un identifiant technique permettant d'identifier de manière unique un utilisateur pour votre service. Par défaut, cette identifiant est différent sur les deux plateforme. Il vous est possible, si vous en avez le besoin, de recevoir le même identifiant pour un même utilisateur pour votre service pour les deux plateformes. + +Pour pouvoir en bénéficier, il suffit de le préciser lors de votre demande de création de votre fournisseur de service. + +--- + +Voir aussi : + +- [Comment effectuer ma demande d'habilitation pour FranceConnect+ ?](../projet/projet-datapass.md) +- [Comment puis-je réaliser des tests de FranceConnect+ avant de soumettre ma demande d'habilitation ?](../projet/projet-tests-sans-datapass.md) +- [Comment FranceConnect+ utilise le protocole OpenId Connect ?](../technique/technique-oidc-fc.md) \ No newline at end of file diff --git a/fs/projet/README.md b/fs/projet/README.md new file mode 100644 index 0000000..1b85f6a --- /dev/null +++ b/fs/projet/README.md @@ -0,0 +1,59 @@ +# Je gère un projet d'intégration de FranceConnect+ + +Vous avez lancé un projet pour devenir FranceConnect+ et vous souhaiter connaitre les différentes problématique d'intégration de FranceConnect+, voici les questions à vous poser : + +### Comment effectuer ma demande d'habilitation pour FranceConnect+ ? + +Pour pouvoir utiliser FranceConnect+, il est nécessaire de faire une demande d'habilitation au travers de l'outil [datapass]([datapass](https://datapass.api.gouv.fr/franceconnect/)) mis à disposition par la DINUM. + +[Plus d'informations](./projet-datapass.md) + + +### Comment puis-je réaliser des tests de FranceConnect+ avant de soumettre ma demande d'habilitation ? + +Contrairement à la plateforme FranceConnect, il est nécessaire d'avoir sa demande d'habilitation (datapass) validée avant de pouvoir utiliser la plateforme FranceConnect+. + +[Plus d'informations](./projet-tests-sans-datapass.md) + +### Quel est l'écosystème de FranceConnect+ ? + +Il existe différents types d'acteur dans l'ecosystème de FranceConnect+ : +- les fournisseurs d'identité +- les fournisseurs de services +- les fournisseurs de données + +[Plus d'informations](./projet-ecosysteme-fc+.md) + + +### Quelles sont les données que je peux récupérer par FranceConnect+ sur mes usagers ? + +FranceConnect+ permet de récupérer les données suivantes de mes usagers : + +- Nom de naissance; +- Prénoms +- Sexe +- Date de naissance +- Code géographique INSEE de la ville de naissance +- Code géographique INSEE du pays de naissance + +[Plus d'informations](projet-donnees-fc+.md) + + +### Qu'est ce qu'eIDAS et quels sont les niveaux de garantie de FranceConnect+ ? + +Le règlement européen eIDAS encadre notamment les moyens d'identifications électronique. Il défini notamment des niveaux de garanties sur les identités numériques qui peut être utiliser pour authentifier et identifier les usagers. + +Les trois niveaux de garantie définis dans ce règlement sont les suivants : +- **Faible** : à ce niveau, l’objectif est simplement de réduire le risque d’utilisation abusive ou d’altération de l’identité ; +- **Substantiel** : à ce niveau, l’objectif est de réduire substantiellement le risque d’utilisation abusive ou d’altération de l’identité ; +- **Élevé** : à ce niveau, l’objectif est d’empêcher l’utilisation abusive ou l’altération de l’identité. + + +[Plus d'informations](./projet-niveau-eidas.md) + +### Comment donner accès à mon service à des usagers des autres états membres ? + +FranceConnect+ propose une passerelle qui permet aux usagers des autres états membres de s'authentifier et de s'identifier pour acceder à votre service. + +[Plus d'informations](./projet-fonctionnement-noeud-eidas.md) + diff --git a/fs/projet/projet-datapass.md b/fs/projet/projet-datapass.md new file mode 100644 index 0000000..543bb5b --- /dev/null +++ b/fs/projet/projet-datapass.md @@ -0,0 +1,24 @@ +[Documentation Fournisseur de Service](../README.md) > [Je gère un projet d'intégration de FranceConnect+](README.md) > Comment effectuer ma demande d'habilitation pour FranceConnect+ ? + +--- + +# Comment effectuer ma demande d'habilitation pour FranceConnect+ ? + +Pour pouvoir utiliser FranceConnect+, il est nécessaire de faire une demande d'habilitation au travers de l'outil [datapass](https://datapass.api.gouv.fr/franceconnect/) mis à disposition par la DINUM. + +Vous aurez besoin de renseigners les informations suivantes : + +- Informations du votre organisation +- Description du projet +- Les données auxquelles vous souhaitez avoir accès +- Le niveau de garantie attendu par votre service - pensez à préciser FranceConnect+ +- Le cadre juridique +- Les personnes impliquées (responsable de traitement, délégué à la protection des données, responsable technique). + +--- + +Voir aussi : + +- [Quelles sont les étapes pour devenir Fournisseur de Service ?](../pilotage/pilotage-etapes.md) +- [Comment puis-je réaliser des tests de FranceConnect+ avant de soumettre ma demande d'habilitation ?](projet-tests-sans-datapass.md) +- [Quels sont les acteurs à impliquer dans l'intégration de FranceConnect+ ?](../pilotage/pilotage-demarches-acteurs.md) diff --git a/fs/projet/projet-donnees-fc+.md b/fs/projet/projet-donnees-fc+.md new file mode 100644 index 0000000..a4c2f8c --- /dev/null +++ b/fs/projet/projet-donnees-fc+.md @@ -0,0 +1,34 @@ +[Documentation Fournisseur de Service](../README.md) > [Je gère un projet d'intégration de FranceConnect+](README.md) > Quelles sont les données que je peux récupérer par FranceConnect+ sur mes usagers ? + +--- + +# Quelles sont les données que je peux récupérer par FranceConnect+ sur mes usagers ? + +Les données usagers sont fournies par les Fournisseurs d'Identité aux Fournisseurs de Service, via FranceConnect+, conformément à l'habilitation obtenue via [datapass.api.gouv.fr](https://datapass.api.gouv.fr), et le choix des données réalisé par le fournisseur de service dans cette demande. + +L'identité pivot permet d'identifier un utilisateur particulier. + +* Nom de naissance +* Prénoms +* Sexe +* Date de naissance +* [Code géographique INSEE de la ville de naissance](https://www.insee.fr/fr/information/2560452) +* [Code géographique INSEE du pays de naissance](https://www.insee.fr/fr/information/2560452) + +En complément, il est possible d'obtenir le nom d'usage. Cependant cette donnée n'est pas obligatoirement connue par tous les Fournisseurs d'Identité. Cette donnée ne sera donc pas transmise systématiquement si vous la demandez. + +Vous pouvez avoir accès également à l'adresse email. Cette donnée de contact a également été vérifiée par le Fournisseur d'identité. Il est à remarquer que la donnée "adresse email" peut différer selon le Fournisseur d'Identité choisi par l'usager. + +FranceConnect+ transmet systématiquement au Fournisseur de Service un identifiant unique pour chaque utilisateur : + +* Cet identifiant est spécifique à chaque Fournisseur de Service. Un même utilisateur aura donc un identifiant unique différent pour chacun des Fournisseurs de Service auxquels il accède. +* Cet identifiant est le même quelque soit le Fournisseur d'Identité qui est utilisé par l'utilisateur. +* Cet identifiant n'est amené à changer quand dans le cas particulier où l'utilisateur a fait modifié ses données d'état civil. Dans tous les autres cas, cet identifiant sera systématiquement le même. + +Les données d'identité fournies au fournisseur de service sont celles directement issues du fournisseur d'identité choisi par l'utilisateur. Ces données peuvent donc légèrement varier d'un fournisseur d'identité à l'autre, nous préconisons donc de réaliser le rapprochement/réconciliation sur la base de l'identifiant unique de l'utilisateur fourni par FranceConnect+. Il est également possible de récupérer des données provenant du RNIPP en complément des données d'identités provenant du fournisseur d'identité. Cependant, ces données ne disposent pas du niveau de garantie substantiel ou élevé et doivent être utilisé uniquement pour faciliter le rapprochement/réconciliation. + +--- + +Voir aussi : + +- [Comment utiliser les scopes OpenID Connect pour accéder aux données des utilisateurs ? ](../technique/technique-scope-fc.md) \ No newline at end of file diff --git a/fs/projet/projet-ecosysteme-fc+.md b/fs/projet/projet-ecosysteme-fc+.md new file mode 100644 index 0000000..5916594 --- /dev/null +++ b/fs/projet/projet-ecosysteme-fc+.md @@ -0,0 +1,13 @@ +[Documentation Fournisseur de Service](../README.md) > [Je gère un projet d'intégration de FranceConnect+](README.md) > Quel est l'écosystème de FranceConnect+ ? + + +--- + +# Quel est l'écosystème de FranceConnect+ ? + + +--- + +Voir aussi : + +- []() \ No newline at end of file diff --git a/fs/projet/projet-fonctionnement-noeud-eidas.md b/fs/projet/projet-fonctionnement-noeud-eidas.md new file mode 100644 index 0000000..7ba022d --- /dev/null +++ b/fs/projet/projet-fonctionnement-noeud-eidas.md @@ -0,0 +1,49 @@ +[Documentation Fournisseur de Service](../README.md) > [Je gère un projet d'intégration de FranceConnect+](README.md) > Comment donner accès à mon service à des usagers des autres états membres ? + +--- + +# Comment donner accès à mon service à des usagers des autres états membres ? + +Vous souhaitez donner accès à votre service à des usagers des autres états membre. Cela est possible en utilisant FranceConnect+ et le noeud d'interopérabilité eIDAS français. + + +## Quel est l'objectif du noeud d'interopérabilité eIDAS ? + +Dans le cadre du règlement eIDAS, chaque état membre met à disposition un noeud d'intéropérabilité eIDAS qui permet à tout citoyen européen d'accéder à des fournisseurs de service d'un autre état membre en utilisant un schéma d'identification d'un autre état membre. + +Au niveau de la France, le noeud d'intéropérabilité est opéré par la DINUM au même titre que FranceConnect+. + +Il est donc possible pour des fournisseurs de service, d'authentifier et d'identifier les usagers des autres états membres avec les fournisseurs d'identités mis à disposition par leur état membre. + +Ainsi, les usagers des autres états membres peuvent accéder à votre service en utilisant le fournisseur d'identité qu'ils utilisent habituellement dans leur pays. + +## Quels sont les niveaux de garantie accessible via les schémas d'identification des autres états membre ? + +Les niveaux de garanties utilisables via les schémas d'idenitification des autres états membre sont les niveaux substantiels et élevés. Il n'est pas possible de demandés ou d'obtenir des identités de niveau de garantie faible via les schémas d'identification des autres états membres. + + +### Comment un fournisseur de service peut utiliser le noeud d'interopérabilité eIDAS français ? + +L'accès au noeud d'interoperabilité se fait au travers de FranceConnect+. Pour y avoir accès, il est nécessaire d'en faire la demande auprès de l'équipe FranceConnect. Par défaut, celui-ci n'est pas disponible. + +### Quel est le parcours d'un usager d'un autre état membre pour accéder à mon service ? + +Le point de départ est le même que pour les autres usagers, il est nécessaire de cliquer sur le bouton FranceConnect+ disponible sur votre service. + +Une fois sur la page de sélection du fournisseur d'identité, un bouton *Sign in with a digital identity from another european country* permet à l'usager d'indiquer qu'il souhaite utiliser le schéma d'identification d'un autre état membre. + + + +### Les données d'identités d'un usager d'un autre état membre sont elles les mêmes que celles que je récupère habituellement ? + +... + + +--- + +Voir aussi : + +* [Qu'est ce qu'eIDAS et quels sont les niveaux de garantie de FranceConnect+ ?](./projet-niveau-eidas.md) + + + diff --git a/fs/projet/projet-niveau-eidas.md b/fs/projet/projet-niveau-eidas.md new file mode 100644 index 0000000..17f2585 --- /dev/null +++ b/fs/projet/projet-niveau-eidas.md @@ -0,0 +1,56 @@ +[Documentation Fournisseur de Service](../README.md) > [Je gère un projet d'intégration de FranceConnect+](README.md) > Qu'est ce qu'eIDAS et quels sont les niveaux de garantie de FranceConnect+ ? + +--- + +# Qu'est ce qu'eIDAS et quels sont les niveaux de garantie de FranceConnect+ ? + +## Qu'est ce que le règlement eIDAS ? + +> Le règlement n° 910/2014 sur l'identification électronique et les services de confiance pour les +transactions électroniques au sein du marché intérieur, dit règlement « eIDAS », est un règlement +européen qui a été adopté le 23 juillet 2014 par le Parlement européen et le Conseil de l'Union +Européenne. L'objectif de ce règlement est de mettre en place un cadre juridique propre à +susciter une confiance accrue dans les transactions électroniques au sein du marché intérieur. +> +> Le règlement eIDAS s'applique à l’identification électronique et aux services de confiance +(faisant respectivement l’objet des chapitres II et III du présent document). Il accorde également +un effet juridique aux documents électroniques. + +Source : [FAQ eIDAS de l'ANSSI](https://www.ssi.gouv.fr/uploads/2017/01/eidas_faq_anssi.pdf) + +FranceConnect+ est concerné uniquement par le volet identification électronique du règlement. + +## Qu'est ce que les niveaux de garantie eIDAS ? + +Le niveau de garantie eIDAS permettre d'apporter une garantie sur l'identité qui est fournie au Fournisseur de Service. Ils sont définis par le règlement eIDAS avec chacun des exigences différentes. + +> * **Faible :** à ce niveau, l’objectif est simplement de réduire le risque d’utilisation abusive ou d’altération de l’identité ; +> * **Substantiel :** à ce niveau, l’objectif est de réduire substantiellement le risque d’utilisation abusive ou d’altération de l’identité ; +> * **Élevé :** à ce niveau, l’objectif est d’empêcher l’utilisation abusive ou l’altération de l’identité. + +Source : [Présentation du règlement eIDAS par l'ANSSI](https://www.ssi.gouv.fr/administration/reglementation/confiance-numerique/le-reglement-eidas/#:~:text=Substantiel%20%3A%20%C3%A0%20ce%20niveau%2C%20l,'alt%C3%A9ration%20de%20l'identit%C3%A9.) + +Le détail des exigeances est défini par [le règlement d’exécution n°2015/1502 du 8 septembre 2015](http://eur-lex.europa.eu/legal-content/FR/TXT/PDF/?uri=CELEX:32015R1502&from=FR) + +## Quels sont les niveaux eIDAS supportés par la plateforme FranceConnect+ ? + +FranceConnect+ a été qualifié par l'ANSSI pour le niveau élevé en tant que moyen d'identité électronique, c'est à dire que FranceConnect+ répond aux exigences pour permette d'apporter un niveau de garantie élevé en tant que moyen d'identification électronique. A ce titre, FranceConnect apparait dans la [liste des produits qualifiés par l'ANSSI](https://www.ssi.gouv.fr/uploads/liste-produits-et-services-qualifies.pdf) dans la section *moyen d'identification életronique*. + +Cependant, afin de pouvoir garantir un niveau élevé, il faut également que les Fournisseurs d'Identité soit également qualifié pour ce ce niveau. + +Actuellement, FranceConnect+ ne dispose que d'un seul Fournisseur d'Identité, L'identité Numérique La Poste, qui est qualifié pour le niveau substantiel par l'ANSSI. Ainsi, actuellement la plateforme FranceConnect+ ne peut délivrer des identités avec uniquement le niveau de garantie substantiel même s'il FranceConnect+ est déjà prêt pour délivrer des identités avec le niveau de garantie élevé. + +Le tableau ci-dessous récapitule les niveaux supportés par les deux plateformes FranceConnect et FranceConnect+. + +| Niveau de garantie | FranceConnect | FranceConnect+ | +| ------ | ------ | ------ | +| faible |  Oui | Non |  +| substantiel | Non | Oui |  +| élevé | Non | A venir | + + +--- + +Voir aussi : + +* [Comment donner accès à mon service à des usagers des autres états membres ?](./projet-fonctionnement-noeud-eidas.md) \ No newline at end of file diff --git a/fs/projet/projet-tests-sans-datapass.md b/fs/projet/projet-tests-sans-datapass.md new file mode 100644 index 0000000..8361a9f --- /dev/null +++ b/fs/projet/projet-tests-sans-datapass.md @@ -0,0 +1,14 @@ +[Documentation Fournisseur de Service](../README.md) > [Comment puis-je réaliser des tests de FranceConnect+ avant de soumettre ma demande d'habilitation ?](README.md) > Comment puis-je réaliser des tests de FranceConnect+ avant de soumettre ma demande d'habilitation ? + +--- + +# Comment puis-je réaliser des tests de FranceConnect+ avant de soumettre ma demande d'habilitation ? + +Contrairement à la plateforme FranceConnect, il est nécessaire d'avoir sa demande d'habilitation (datapass) validée avant de pouvoir utiliser la plateforme FranceConnect+. + +--- + +Voir aussi : + +- [Quelles sont les étapes pour devenir Fournisseur de Service ? ](../pilotage/pilotage-etapes.md) +- [Comment effectuer ma demande d'habilitation pour FranceConnect+ ?](./projet-datapass.md) \ No newline at end of file diff --git a/fs/technique/FranceConnect-Plus-Boutons.zip b/fs/technique/FranceConnect-Plus-Boutons.zip new file mode 100644 index 0000000..bd711b8 Binary files /dev/null and b/fs/technique/FranceConnect-Plus-Boutons.zip differ diff --git a/fs/technique/technique-boutons-fc.md b/fs/technique/technique-boutons-fc.md new file mode 100644 index 0000000..8dea5b0 --- /dev/null +++ b/fs/technique/technique-boutons-fc.md @@ -0,0 +1,73 @@ +[Documentation Fournisseur de Service](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment intégrer le bouton FranceConnect+ à mon service ? + +--- + +# Comment intégrer le bouton FranceConnect+ à mon service ? + +En fonction du type de service, il existe deux intégrations possibles du bouton FranceConnect+ : +- intégration en se basant sur le Système de Design de l'État; +- intégration ne se basant pas sur le Système de Design de l'État. + +## Intégration du Système de Design de l'État + +Votre service doit utiliser le [systeme de Design de l'État](https://www.systeme-de-design.gouv.fr/). Celui-ci intègre directement un bouton FranceConnect+. Vous pouvez consulter directement dans la documentation du composant [Bouton FranceConnect](https://www.systeme-de-design.gouv.fr/elements-d-interface/composants/bouton-franceconnect). + + +## Intégration hors du systeme de Design de l'Etat + +Les boutons d’action FranceConnect+ sont primordiaux dans l’usage du service. Il est obligatoire d’utiliser l’un des boutons proposés et aucun autre visuel pour la connexion des usagers. + +Téléchargements : + +* [FranceConnect-Plus-Boutons.zip](FranceConnect-Plus-Boutons.zip) + + +## Règles d'intégration du bouton FranceConnect+ + +Les règles suivantes doivent être respectées. Vous pouvez également les retrouver dans les [Guideline FranceConnect+](../images/technique/guidelines-fc%2B.png) + +### Couleurs, Design du bouton + +Le bouton FranceConnect+ est déclinable pour un affichage sur fond clair ou sombre. Veillez à utiliser celle adaptée au contraste. + +![theme clair et sombre FranceConnect+](../images/technique/technique-guidelines-fc%2B-themes.png) + +Le design, les couleurs et le label du bouton FranceConnect+ ne peuvent pas être modifiés. L'état au survol doit être implémenté. + +### Dimensions + +La taille recommandée pour une utilisation optimale est de 60 pixels de haut par 245 px de large. Le bouton peut être plus grand, mais l'homothétie doit être respectée. + +![Taille de l'image 60 x 245 pixels](../images/technique/technique-guidelines-fc%2B-dimensions.png) + +### Textes d'accompagnement + +Au dessus du bouton FranceConnect+, il vous sera demandé d'ajouter systématiquement la phrase explicative *FranceConnect+ est la solution proposée par l'État, pour renforcer la sécurité de vos services en ligne les plus sensibles*. + +Sous le bouton FranceConnect+, il vous sera demandé d'ajouter systématiquement un lien avec le texte "Qu'est-ce que FranceConnect+" qui pointera vers le site https://franceconnect.gouv.fr/france-connect-plus. La phrase doit avoir la couleur et le comportement d'un lien et doit être positionnée sous le bouton FranceConnect+ avec un écart de 12 pixels. + +![Lien "Qu'est ce que FranceConnect+ sous le bouton FranceConnect+](../images/technique/technique-guidelines-fc%2B-lien.png) + +### Positionnement du bouton FranceConnect+ par rapport aux autres modes d'authentification. + +Le bouton FranceConnect+ **doit être distinct de vos moyens de connexion natifs et en première position si vous êtres un service public**. Il est important de dissocier visuellement les différents moyens d’authentification : +- une séparation visible doit être mise en place entre eux ; +- la mention "OU" doit également y figurer afin de faire comprendre à l'utilisateur qu'il peut choisir entre FranceConnect+ ou un autre mode de connexion/d'inscription. + +![Intégration du bouton FranceConnect+ dans la page](../images/technique/technique-guidelines-fc%2B-position.png) + +### Intégration dans votre service. + +Le bouton FranceConnect+ doit être présent dans la section de votre service permettant aux utilisateurs de s'y connecter. + +Si votre service propose à vos utilisateurs de s'inscrire, le bouton FranceConnect+ doit être proposé également sur la page d'inscription. + +### À ne pas faire + +Lors de l'intégration du bouton FranceConnect+, il n'est pas autorisé de : + - déformer le bouton; + - changer sa couleur; + - modifier son label. + + ![](../images/technique/technique-guidelines-fc%2B-ne-pas-faire.png) + diff --git a/fs/technique/technique-deconnexion.md b/fs/technique/technique-deconnexion.md new file mode 100644 index 0000000..e86a6c7 --- /dev/null +++ b/fs/technique/technique-deconnexion.md @@ -0,0 +1,37 @@ +[Documentation Fournisseur de Service](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment déconnecter un utilisateur de FranceConnect+ ? + +--- + +# Comment déconnecter un utilisateur de FranceConnect+ ? + +Pour les niveaux Substantiel et Elevé, FranceConnect+ ne gère pas de session utilisateur et demande systématique à l'utilisateur de se ré-authentifier auprès d'un Founisseur d'Identité. + +Cependant, il est tout de même demandé au Fournisseur de Service de gérer : +* la déconnexion auprès de FranceConnect +* la révocation de l’accès token + +## Cinématique de déconnexion par un Fournisseur de Service + +FranceConnect+ implémente la section sur la déconnexion en cours de spécification dans la norme OpenID Connect : https://openid.net/specs/openid-connect-frontchannel-1_0.html#RPLogout + +FranceConnect+ ne gère pas la déconnexion de l'usager au service FranceConnect+ à la fermeture du navigateur. + +Le Fournisseur de Service doit pouvoir déconnecter l'utilisateur de sa session FranceConnect. La cinématique globale est celle-ci : + +1. L' utilisateur clique sur un lien de déconnexion présenté par le FS. +2. Le FS doit déconnecter l'utilisateur de son application et de sa session FranceConnect. +3. L' utilisateur est redirigé vers la page de retour spécifiée par le FS. +4. Le FS doit préciser l'URL où l'on doit rediriger l'utilisateur une fois qu'il a choisi de se déconnecter ou non de FranceConnect+ via le paramètre post_logout_redirect_uri, ainsi que passer l'id_token récupéré lors de l'authentification de l'utilisateur via le paramètre id_token_hint. + +Il est obligatoire de renseigner les différentes urls de redirections de déconnexion dans les paramètres client + +## Révocation de l'access token + +En tant que Fournisseur de Service, vous avez la possibilité de révoquer un *access token*. Pour cela, FranceConnect+ respecte les spécifications OAuth 2.0 sur lesquelles se base OpenId Connect. La spécification de la révocation de token se trouve à cette adresse https://tools.ietf.org/html/rfc7009 + +--- + +Voir aussi : + +- [Comment FranceConnect+ utilise le protocole OpenId Connect ?](technique-oidc-fc.md) +- [Qu'est ce que le protocole OpenID Connect ?](technique-oidc.md) \ No newline at end of file diff --git a/fs/technique/technique-eidas-identite-eu.md b/fs/technique/technique-eidas-identite-eu.md new file mode 100644 index 0000000..67b940c --- /dev/null +++ b/fs/technique/technique-eidas-identite-eu.md @@ -0,0 +1,37 @@ +[Documentation Fournisseur](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment récupérer les données d'identités provenant d'un pays européens via la noeud eIDAS français ? + +--- + +# Comment récupérer les données d'identités provenant d'un pays européens via la noeud eIDAS français ? + +Il est possible de permettre aux usagers des autres pays européens d'accéder à votre service en s'authentifiant avec le schéma d'identification de leur pays. + +Pour votre service, cela se passe en utilisant la plateforme FranceConnect+. + +## Quelles sont les données d'identité accessible pour un usager européen ? + +| Claim | Obligatoire | Commentaire | +| ------ | ------ | ------ | +| openid | X | même format que pour une identité française | +| gender | | `male`, `female` ou `unspecified` | +| birthdate | X | même format que pour une identité française, ne gère pas les présumés nées| +| birthplace | | Ne correspond pas à un COG. Le format est libre pour chaque pays. | +| given_name | X | Correspond au prénom de la personne. Ce n'est pa obligatoirement le prénom de naissance.| +| family_name | X | Contient le nom d'usage de la personne | + + + +## Comment savoir s'il s'agit d'une identité provenant d'un fournisseur d'identité français ou d'une identité européenne ? + +Cette information est indiqué dans le claim *amr* qui peut contenir plusieurs valeurs. Il est nécessaire de demander cette information via la demande du claim spécifique *amr*. + +| Valeur | Origine de l'identité | +| ------ | --------------------- | +| fr | identité provenant d'un fournisseur d'identité français | +| eidas | identité provenant d'un schéma d'identité d'un autre pays | + +--- + +Voir aussi : + +- [Qu'est ce qu'eIDAS et quels sont les niveaux de garantie de FranceConnect+ ?](../projet/projet-niveau-eidas.md) diff --git a/fs/technique/technique-eidas.md b/fs/technique/technique-eidas.md new file mode 100644 index 0000000..92c1d20 --- /dev/null +++ b/fs/technique/technique-eidas.md @@ -0,0 +1,58 @@ +[Documentation Fournisseur de Service](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment utiliser les niveaux de garantie eIDAS sur FranceConnect+ ? + +--- + +# Comment utiliser les niveaux de garantie eIDAS sur FranceConnect+ ? + +## Les niveaux eIDAS disponible sur la plateforme FranceConnect+ + +La plaforme FranceConnect+ est qualifié pour fournir des identités de niveau de garantie eIDAS substantiel et élevé. Le niveau de garantie faible n'est pas supporté. Si vous souhaitez obtenir des identités ayant un niveau de garantie faible, vous devez pour cela utiliser la plateforme FranceConnect. + +## Spécifier un niveau de garantie eIDAS souhaité lors de la cinématique FranceConnect+ ? + +### Utilisation du paramètre *acr_values* + +FranceConnect+ s'appuie sur le paramètre *acr_values* de la norme [OpenID Connect](http://openid.net/specs/openid-connect-basic-1_0.html#RequestParameters) pour permettre de préciser le niveau de garantie attendu par votre fournisseur de service. Il s'agit d'un paramètre optionnel. Si celui-ci n'est pas indiqué dans les paramètre de la requête, alors c'est le niveau de garantie le plus élevé supporté par la plateforme qui sera pris en compte, c'est à dire le niveau élevé. + +Les valeurs du paramètre à indiquer en fonction du niveau de garantie souhaitez sont les suivantes : + +- eidas2 : niveau substantiel +- eidas3 : niveau élevé + +Exemple d'appel précisant un niveau eIDAS minimum : + +``` +https://fcp.integ01.dev-franceconnect.fr/api/v2/authorize?response_type=code&client_id=123456&redirect_uri=https%3A%2F%2Ffournisseur-de-service.dev-franceconnect.fr%2Flogin-callback&scope=openid%20profile%20email%20address%20phone%20preferred_username%20email%20address%20phone%20preferred_username&state=randomValue&nonce=randomValue&acr_values=eidas2 +``` + +A noter que si la valeur du paramètre *acr_values* est *eidas1*, FranceConnect+ retournera une erreur indiquant que le niveau de garantie demandé n'est pas supporté par la plateforme FranceConnect+. Cette valeur correspond au niveau de garantie faible et est supporté exclusivement par la plateforme FranceConnect. + +Toute valeur différente de *eidas1*, *eidas2* et *eidas3* sera ignoré. + + +### Impact pour l'utilisateur. + +Lorsqu'un niveau de garantie eIDAS est demandé, alors l'utilisateur ne se verra proposer que les fournisseurs d'identités qui peuvent satisfaire sa demande. + +Ainsi, si le niveau demandé est *eidas2*, alors tous les fournisseurs d'identités disponible sur FranceConnect+ seront proposés à l'utilisateur. Si le niveau demandé est *eidas3*, alors seuls les fournisseurs d'identités pouvant fournir des identités de niveau élevé seront proposé à l'utilisateur. + +## Contrôler le niveau de garantie de l'identité récupérée + +Le niveau de garantie de l'identité récupéré auprès de FranceConnect+ est indiqué dans le claim *acr* présent dans l'[ID Token](https://openid.net/specs/openid-connect-basic-1_0.html#IDToken). + +Comme indiqué dans la norme [OpenID Connect](https://openid.net/specs/openid-connect-basic-1_0.html#IDTokenValidation), votre fournisseur de service doit s'assurer que le niveau de garantie de l'identité récupéré auprès de FranceConnect+ est bien conforme à celui attendu. + +Les valeurs possible pour le claim *acr* sont les suivantes : + +- eidas2 : niveau substantiel +- eidas3 : niveau élevé + + +Il est de la responsabilité du Fournisseur de service de s'assurer que le niveau retourné est au moins égal ou supérieur à celui demandé (si eidas2 est demandé, eidas3 doit être accepté tout comme eidas2). + +--- + +Voir aussi : + +- [Qu'est ce qu'eIDAS et quels sont les niveaux de garantie de FranceConnect+ ?](../projet/projet-niveau-eidas.md) +- [Comment FranceConnect+ utilise le protocole OpenId Connect ? ](technique-oidc.md) \ No newline at end of file diff --git a/fs/technique/technique-endpoints.md b/fs/technique/technique-endpoints.md new file mode 100644 index 0000000..f61e337 --- /dev/null +++ b/fs/technique/technique-endpoints.md @@ -0,0 +1,395 @@ +[Documentation Fournisseur de Service](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment utiliser les différents Endpoints FranceConnect+ ? + +--- + +# Comment utiliser les différents Endpoints FranceConnect+ ? + +FranceConnect+ met en oeuvre le protocole OpenID Connect pour permettre à un Fournisseur de Services de déléguer à FranceConnect+ l'identification et l'authentification des usagers. + +### Openid Configuration Endpoints + +
+ GET /api/v2/.well-known/openid-configuration + +##### Description + +Implémente la requête de `Provider Configuration` + +https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationRequest + +##### Paramètres + +> Aucun + +##### Réponses + +> | code http | content-type |réponse | +> |---------------|-----------------------------------|---------------------------------------------------------------------| +> | `200` | `application/json;charset=utf-8` | Document JSON décrivant la configuration de FranceConnect+ | + +##### Exemple d'appel + +> ``` +> GET /api/v2/.well-known/openid-configuration HTTP/1.1 +> Host: auth.integ01.dev-franceconnect.fr +> ``` + +Configuration FranceConnect+ sur l'environnement d'intégration: + +https://auth.integ01.dev-franceconnect.fr/api/v2/.well-known/openid-configuration + +
+ +
+ GET /api/v2/jwks + +##### Description + +Liste les clés de signature utilisées par FranceConnect+ + +##### Paramètres + +> Aucun + +> | code http | content-type |réponse | +> |---------------|-----------------------------------|---------------------------------------------------------------------| +> | `200` | `application/json;charset=utf-8` | Document JSON décrivant les clés de signature de FranceConnect+ | + +##### Exemple d'appel + +> ``` +> GET /api/v2/jwks HTTP/1.1 +> Host: auth.integ01.dev-franceconnect.fr +> ``` + +Clés FranceConnect+ sur l'environnement d'intégration: + +https://auth.integ01.dev-franceconnect.fr/api/v2/jwks + +
+ +### Authorization Endpoint + +
+ GET /api/v2/authorize + +##### Description + +Implémente le `Authorization Endpoint` de Openid Connect: + +https://openid.net/specs/openid-connect-core-1_0.html#AuthorizationEndpoint + +##### Paramètres + +> | nom | requis/optionnel | type de données | description | +> |--------|-----------|----------------|------------------------------------------------------| +> | `response_type` | requis | string | `code` | +> | `client_id` | requis | string | `` Identifiant du FS, communiqué lors de son inscription auprès de FC+ | +> | `redirect_uri` | requis | string |` %2F` Url de retour vers le FS (encodée), communiquée lors de son inscription auprès de FC+ | +> | `acr_values` | requis | string | `eidas2 | eidas3` FranceConnect+ supporte les niveaux eIDAS substantiel et élevé | +> | `scope` | requis | string | `` Liste des scopes demandés séparés par des espaces (%20 au format unicode dans l'URL) ou des '+' | +> | `claims` | optionnel | string | `` Objet JSON encodé décrivant les claims demandés ([Voir spécification Openid Connect](https://openid.net/specs/openid-connect-core-1_0.html#ClaimsParameter)) | +> | `state` | requis | string (minimum 32 caractères) | `` Champ obligatoire, généré aléatoirement par le FS, que FC+ renvoie tel quel dans la redirection qui suit l'authentification, pour être ensuite vérifié par le FS. Il est utilisé afin d’empêcher l’exploitation de failles CSRF | +> | `nonce` | requis | string (minimum 32 caractères) | `` Champ obligatoire, généré aléatoirement par le FS que FC renvoie tel quel dans la réponse à l'appel au `Token Endpoint`, pour être ensuite vérifié par le FS. Il est utilisé pour empêcher les attaques par rejeu | +> | `prompt` | optionnel | string | `login` FC+ force une demande de réauthentification avec le FI à chaque connexion | + +##### Réponses + +> | code http | content-type |réponse | +> |---------------|-----------------------------------|---------------------------------------------------------------------| +> | `303` (succès) | `text/html;charset=UTF-8` | Redirection vers la page de sélection du FI `/api/v2/interaction/{interactionHash}` où {interactionHash} est un hash lié à la session de l'usager | +> | `303` (erreur) | `text/html;charset=UTF-8` | [Redirection vers le FS après erreur de connexion](#redirection-vers-le-fs-après-erreur-de-connexion) | +> | `400` (mauvais format)| `text/html;charset=UTF-8` | La page d'erreur avec code `Y000400` est affichée en cas de mauvais format | + +##### Exemple d'appel + +> ``` +> GET /api/v2/authorize?response_type=code&prompt=login&acr_values=eidas2& +> scope=openid+gender+given_name+family_name+email+preferred_username& +> claims=%7B%22id_token%22%3A%7B%22amr%22%3A%7B%22essential%22%3Atrue%7D%7D%7D& +> client_id=6925fb8143c76eded44d32b40c0cb1006065f7f003de52712b78985704f39950& +> redirect_uri=https%3A%2F%2Ffsp1v2.integ01.fcp.fournisseur-de-service.fr%2Foidc-callback& +> state=9ed67ae42fdc5d0a6867a5425a284745f4f73ce8b6edf76e453487aa1b73cc89& +> nonce=7db9b35458f2288bade947791f1c8fa2d02954f8eb7d9909dc68784f7c4aea29 HTTP/1.1 +> Host: auth.integ01.dev-franceconnect.fr +> ``` + +
+ +
+ POST /api/v2/authorize + +##### Description + +Implémente le `Authorization Endpoint` de Openid Connect: + +https://openid.net/specs/openid-connect-core-1_0.html#AuthorizationEndpoint + +##### Entête + +> | nom | requis/optionnel | valeur | +> |----------------|--------|-------------------------------------| +> | `Content-Type` | requis | `application/x-www-form-urlencoded` | + +##### Body + +> | nom | requis/optionnel | type de données | description | +> |--------|-----------|----------------|------------------------------------------------------| +> | `response_type` | requis | string | `code` | +> | `client_id` | requis | string | `` Identifiant du FS, communiqué lors de son inscription auprès de FC+ | +> | `redirect_uri` | requis | string |`%2F` Url de retour vers le FS (encodée), communiquée lors de son inscription auprès de FC+ | +> | `acr_values` | requis | string | `eidas2 | eidas3` FranceConnect+ supporte les niveaux eIDAS substantiel et élevé | +> | `scope` | requis | string | `` Liste des scopes demandés séparés par des espaces (%20 au format unicode dans l'URL) ou des '+' | +> | `claims` | optionnel | string | `` Objet JSON encodé décrivant les claims demandés ([Voir spécification Openid Connect](https://openid.net/specs/openid-connect-core-1_0.html#ClaimsParameter)) | +> | `state` | requis | string (minimum 32 caractères) | `` Champ obligatoire, généré aléatoirement par le FS, que FC+ renvoie tel quel dans la redirection qui suit l'authentification, pour être ensuite vérifié par le FS. Il est utilisé afin d’empêcher l’exploitation de failles CSRF | +> | `nonce` | requis | string (minimum 32 caractères) | `` Champ obligatoire, généré aléatoirement par le FS que FC renvoie tel quel dans la réponse à l'appel au `Token Endpoint`, pour être ensuite vérifié par le FS. Il est utilisé pour empêcher les attaques par rejeu | +> | `prompt` | optionnel | string | `login` FC+ force une demande de réauthentification avec le FI à chaque connexion | + +##### Réponses + +> | code http | content-type |réponse | +> |---------------|-----------------------------------|---------------------------------------------------------------------| +> | `303` (succès) | `text/html;charset=UTF-8` | Redirection vers la page de recherche des FI `/api/v2/interaction/{interactionHash}` où {interactionHash} est un hash lié à la session de l'usager | +> | `303` (erreur) | `text/html;charset=UTF-8` | [Redirection vers le FS après erreur de connexion](#redirection-vers-le-fs-après-erreur-de-connexion) | +> | `400` (mauvais format)| `text/html;charset=UTF-8` | La page d'erreur avec code `Y000400` est affichée en cas de mauvais format | + +##### Exemple d'appel + +> ``` +> POST /api/v2/authorize HTTP/1.1 +> Host: auth.integ01.dev-franceconnect.fr +> Content-Type: application/x-www-form-urlencoded +> +> response_type=code&prompt=login&acr_values=eidas2& +> scope=openid+gender+given_name+family_name+email+preferred_username& +> claims=%7B%22id_token%22%3A%7B%22amr%22%3A%7B%22essential%22%3Atrue%7D%7D%7D& +> client_id=6925fb8143c76eded44d32b40c0cb1006065f7f003de52712b78985704f39950& +> redirect_uri=https%3A%2F%2Ffsp1v2.integ01.fcp.fournisseur-de-service.fr%2Foidc-callback& +> state=9ed67ae42fdc5d0a6867a5425a284745f4f73ce8b6edf76e453487aa1b73cc89& +> nonce=7db9b35458f2288bade947791f1c8fa2d02954f8eb7d9909dc68784f7c4aea29 +> ``` + +
+ +### Redirection vers le FS après erreur de connexion + +
+ GET <FS_URL>/<URL_CALLBACK> + +##### Description + +Redirection vers le FS après une erreur de connexion. + +FranceConnect+ renvoie le code d'erreur, la description de l'erreur et le state. + +##### Paramètres + +> | nom | requis/optionnel | type de données | description | +> |--------|-----------|----------------|------------------------------------------------------| +> | `error` | requis | string | code d'erreur | +> | `error_description` | requis | string | description de l'erreur | +> | `state` | requis | string (minimum 32 caractères) | `` communiqué par par le FS dans l'appel au `Authorization Endpoint`. Cette information est à vérifier par le FS, afin d’empêcher l’exploitation de failles CSRF | + +##### Exemple d'appel + +Exemple de retour vers le FS de mock + +> ``` +> GET /oidc-callback?state=9ed67ae42fdc5d0a6867a5425a284745f4f73ce8b6edf76e453487aa1b73cc89 +> error_description=User+auth+aborted&error=access_denied HTTP/1.1 +> Host: fsp1v2.integ01.fcp.fournisseur-de-service.fr +> ``` + +
+ + +### Redirection vers le FS après connexion + +
+ GET <FS_URL>/<URL_CALLBACK> + +##### Description + +Redirection vers le FS après connexion chez le FI. + +FranceConnect+ renvoie le code d'autorisation et le state. + +##### Paramètres + +> | nom | requis/optionnel | type de données | description | +> |--------|-----------|----------------|------------------------------------------------------| +> | `code` | requis | string | `` code d'autorisation à transmettre au `Token Endpoint` | +> | `state` | requis | string (minimum 32 caractères) | `` communiqué par par le FS dans l'appel au `Authorization Endpoint`. Cette information est à vérifier par le FS, afin d’empêcher l’exploitation de failles CSRF | + +##### Exemple d'appel + +Exemple de retour vers le FS de mock + +> ``` +> GET /oidc-callback?code=_DOF10msXreojwyScrXmfqvwp8q3p1G7ZIzatMj60it& +> state=9ed67ae42fdc5d0a6867a5425a284745f4f73ce8b6edf76e453487aa1b73cc89 HTTP/1.1 +> Host: fsp1v2.integ01.fcp.fournisseur-de-service.fr +> ``` + +
+ +### Token Endpoint + +
+ POST /api/v2/token + +##### Description + +Implémente le `Token Endpoint` de Openid Connect: + +https://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint + +##### Entête + +> | nom | requis/optionnel | valeur | +> |----------------|--------|-------------------------------------| +> | `Content-Type` | requis | `application/x-www-form-urlencoded` | + +##### Body + +> | nom | requis/optionnel | type de données | description | +> |--------|-----------|----------------|------------------------------------------------------| +> | `grant_type` | requis | string | `authorization_code` | +> | `client_id` | requis | string | `` Identifiant du FS, communiqué lors de son inscription auprès de FC+ | +> | `client_secret` | requis | string | `` Le secret du FS, communiqué lors de son inscription auprès de FC+ | +> | `redirect_uri` | requis | string |` %2F` Url de retour vers le FS (encodée), communiqué lors de l'appel au `Authorization Endpoint` | +> | `code` | requis | string | `` code d'autorisation fourni par FranceConnect+ après connexion | + +##### Réponses + +> | code http | content-type |réponse | +> |---------------|-----------------------------------|---------------------------------------------------------------------| +> | `200` | `application/json;charset=utf-8` | La réponse contenant l'access token | +> | `400` | `application/json;charset=utf-8` | JSON document décrivant l'origine de l'erreur de format | + +##### Format de la réponse en succès + +``` +{ + 'access_token': , + 'token_type': 'Bearer', + 'expires_in': 60, + 'id_token': +} +``` + +Voir le format de l'[id_token](../doc_fs.md#id_token). + +
+ +### UserInfo Endpoint + +
+ GET /api/v2/userinfo + +##### Description + +Implémente le `UserInfo Endpoint` de Openid Connect: + +https://openid.net/specs/openid-connect-core-1_0.html#UserInfo + +##### Entête + +> | nom | requis/optionnel | valeur | +> |----------------|--------|-------------------------------------| +> | `Authorization` | requis | `Bearer ` où `` a été communiqué par le `Token Endpoint` | + +##### Paramètres + +> Aucun + +##### Réponses + +> | code http | content-type |réponse | +> |---------------|-----------------------------------|---------------------------------------------------------------------| +> | `200` | `application/jwt` | JSON Web Token contenant les claims transmis par le FI | +> | `400` | `application/json;charset=utf-8` | JSON document décrivant l'origine de l'erreur de format | + +Voir le format de [userinfo](../doc_fs.md#userinfo). + +
+ +#### Logout Endpoint + +
+ GET /api/v2/session/end + +##### Description + +Implémente le `Logout Endpoint` de Openid Connect: + +http://openid.net/specs/openid-connect-session-1_0.html#RPLogout + +:warning: Cet appel doit être réalisé via une redirection dans le navigateur de l'usager, afin d'expirer les cookies de session FranceConnect+ et FI. + +##### Paramètres + +> | nom | requis/optionnel | type de données | description | +> |--------|-----------|----------------|------------------------------------------------------| +> | `id_token_hint` | requis | string | JWT renvoyé par le endpoint `Token Endpoint` | +> | `state` | requis | string | `` Champ obligatoire, généré aléatoirement par le FS, que FC+ renvoie tel quel dans la redirection qui suit la déconnexion, pour être ensuite vérifié par le FS. Il est utilisé afin d’empêcher l’exploitation de failles CSRF | +> | `post_logout_redirect_uri` | requis | string | `` L'URL de redirection vers le FS après la déconnexion à FranceConnect+ | + +##### Réponses + +> | code http | content-type |réponse | +> |---------------|-----------------------------------|-------------------------------------------------------------------| +> | `303` | `text/html;charset=UTF-8` | Redirection vers le FI pour déconnexion, puis [redirection vers le FS après déconnexion](#redirection-vers-le-fs-après-déconnexion) | + +##### Exemple d'appel + +> ``` +> GET /api/v2/session/end?id_token_hint=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3MDRlMDI0Mj +> I5MDE1ZDJiZDQ3ZjdhNWU1YWIwNWIzNWM4MzM2YWI0MDNjMzgwMjI5ODVmOGNmYWRjODZmZTkxIiwiYW1yIjpbInB3ZCJdLCJ +> hdXRoX3RpbWUiOjE2Njg1MzAzMjYsImFjciI6ImVpZGFzMSIsIm5vbmNlIjoiYWZjODFmZGExZmJiNmQzYzg3NmFmNzVjNzM3 +> YTEzMDdhMWIyOWJhMDg3M2VmYTA1OWU0NTM1ZDEyMmM5ZGI1YSIsImF0X2hhc2giOiJJVEJTV1J2NW1HRmxxTGQ0Sm5nbnRnI +> iwiYXVkIjoiNjkyNWZiODE0M2M3NmVkZWQ0NGQzMmI0MGMwY2IxMDA2MDY1ZjdmMDAzZGU1MjcxMmI3ODk4NTcwNGYzOTk1MC +> IsImV4cCI6MTY2ODUzMDM4NiwiaWF0IjoxNjY4NTMwMzI2LCJpc3MiOiJodHRwczovL2ZjYS5pbnRlZzAxLmRldi1hZ2VudGN +> vbm5lY3QuZnIvYXBpL3YyIn0.hg1n4WJbzZECwz4VldAybXYreEXJ4fxpSWqDs9V4tTk& +> state=3b7bd7fb38ccab89864563f17a89c4cb3bd400164ce828b4cfc2cb01ce8ed9da& +> post_logout_redirect_uri=https%3A%2F%2Ffsa1v2.integ01.dev-agentconnect.fr%2Flogout-callback HTTP/1.1 +> Host: auth.integ01.dev-franceconnect.fr +> ``` + +
+ +### Redirection vers le FS après déconnexion + +
+ GET <FS_URL>/<POST_LOGOUT_REDIRECT_URI> + +##### Description + +Redirection vers le FS après déconnexion. + +FranceConnect+ renvoie le state communiqué par le FS lors de la demande de déconnexion. + +##### Paramètres + +> | nom | requis/optionnel | type de données | description | +> |--------|-----------|----------------|------------------------------------------------------| +> | `state` | requis | string (minimum 32 caractères) | `` communiqué par par le FS dans l'appel au `Logout Endpoint`. Cette information est à vérifier par le FS, afin d’empêcher l’exploitation de failles CSRF | + +##### Exemple d'appel + +Exemple de retour vers le FS de mock à déconnexion + +> ``` +> GET /logout-callback?state=3b7bd7fb38ccab89864563f17a89c4cb3bd400164ce828b4cfc2cb01ce8ed9da HTTP/1.1 +> Host: fsp1v2.integ01.fcp.fournisseur-de-service.fr +> ``` + +
+ +--- + +Voir aussi : + +* [Comment FranceConnect+ utilise le protocole OpenId Connect ?](./technique-env-fc.md) +* [Comment utiliser les scopes OpenID Connect pour accéder aux données des utilisateurs ?](./technique-scope-fc.md) + diff --git a/fs/technique/technique-env-fc.md b/fs/technique/technique-env-fc.md new file mode 100644 index 0000000..ba5e00b --- /dev/null +++ b/fs/technique/technique-env-fc.md @@ -0,0 +1,76 @@ +[Documentation Fournisseur](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment accéder aux différents environnements de FranceConnect+ ? + +--- + +# Comment accéder aux différents environnements de FranceConnect+ ? + +FranceConnect met à disposition deux environnements : + +- intégration : à utiliser pour l'ensemble de vos développements et test hors production +- production : à utiliser uniquement pour votre service en production + + +## Accès à l'environnement d'intégration FranceConnect+ + +# Récupération des clés d'intégration + +Pour accéder à l'intégration, après validation de votre demande d'habilitation, vous devez effectuer une [demande de création d'un fournisseur de service pour FranceConnect+](https://www.demarches-simplifiees.fr/commencer/demande-de-creation-d-un-fs-fc-plus). + +## Accès à l'environnement d'intégration + +Pour vous permettre de réaliser les développements liés à l'intégration de FranceConnect, nous mettons à disposition un environnement d'intégration. Les accès à cet environnement se font à travers des clés qui vous sont communiquées sur votre espace partenaire. + +Pour utiliser l'environnement d'intégration, il faut au préalable avoir : +- avoir fait une demande datapass et que celle-ci soit validée +- avoir fait une demande de création d'un FS en environnement d'intégration FC+ et avoir reçu vos clés d'intégration + +Sur notre environnement d'intégration, vous pouvez utiliser le fournisseur d'identité "Démonstration" dont les données sont modifiables ici : https://github.com/france-connect/identity-provider-example/blob/master/database.csv + + +Les adresses de notre environnement d'intégration sont les suivantes : + +| EndPoint | Adresse | +| ------ | ------ | +| [Discovery URL](technique-endpoints.md#openid-configuration-endpoints) | https://auth.integ01.dev-franceconnect.fr/api/v2/.well-known/openid-configuration | +| [JWKS URL](technique-endpoints.md#openid-configuration-endpoints) | https://auth.integ01.dev-franceconnect.fr/api/v2/jwks | +| [Authorization](technique-endpoints.md#authorization-endpoint) | https://auth.integ01.dev-franceconnect.fr/api/v2/authorize | +| [Token](technique-endpoints.md#token-endpoint) | https://auth.integ01.dev-franceconnect.fr/api/v2/token | +| [UserInfo](technique-endpoints.md#userinfo-endpoint) | https://auth.integ01.dev-franceconnect.fr/api/v2/userinfo | +| [Logout](technique-endpoints.md#logout-endpoint) | https://auth.integ01.dev-franceconnect.fr/api/v2/session/end | + +## Accès à l'environnement de production FranceConnect+ + +# Récupération des clés de production + +Pour accéder à l'intégration, après qualification de votre intégration de FranceConnect+ dans votre service, vous devez effectuer une [demande de création d'un fournisseur de service pour FranceConnect+](https://www.demarches-simplifiees.fr/commencer/demande-de-creation-d-un-fs-fc-plus). + +## Accès à l'environnement de production + +Pour avoir accès à l'environnement de production FranceConnect+, il faut au préalable avoir : + +1. Reçu la qualification de vos développements par FranceConnect+ sur un environnement autre que votre production. +2. Demandé une mise en production via le formulaire à votre disposition ( *TODO lien vers le formulaire de MEP FC+*) +3. Configuré votre fournisseur de service de production FranceConnect+ avec les clés de production qui vous ont été fournies par l'équipe FranceConnect. + +**Attention :** Il ne faut surtout pas utiliser les clés d'intégration que vous avez utilisées lors de vos développements avec votre Fournisseur de Service en production. Les clés d'intégration ne sont utilisables que sur l'environnement d'intégration FranceConnect+. De même, il n'est pas possible d'utiliser des clés de production de FranceConnect sur FranceConnect+. + + +Les adresses de notre environnement de production sont les suivantes : + +| EndPoint | Adresse | +| ------ | ------ | +| [Discovery URL](technique-endpoints.md#openid-configuration-endpoints) | https://auth.franceconnect.gouv.fr/api/v2/.well-known/openid-configuration | +| [JWKS URL](technique-endpoints.md#openid-configuration-endpoints) | https://auth.franceconnect.gouv.fr/api/v2/jwks | +| [Authorization](technique-endpoints.md#authorization-endpoint) | https://auth.franceconnect.gouv.fr/api/v2/authorize | +| [Token](technique-endpoints.md#token-endpoint) | https://auth.franceconnect.gouv.fr/api/v2/token | +| [UserInfo](technique-endpoints.md#userinfo-endpoint) | https://auth.franceconnect.gouv.fr/api/v2/userinfo | +| [Logout](technique-endpoints.md#logout-endpoint) | https://auth.franceconnect.gouv.fr/api/v2/session/end | + + +--- + +Voir aussi : + +- [Comment effectuer ma demande d'habilitation pour FranceConnect+ ?](../projet/projet-datapass.md) +- [Quels échanges ont lieu entre mon service et FranceConnect+ lors d'une cinématique ?](./technique-oidc-flux.md) +- [Comment utiliser les différents Endpoints FranceConnect+ ?](technique-endpoints.md) diff --git a/fs/technique/technique-erreurs.md b/fs/technique/technique-erreurs.md new file mode 100644 index 0000000..680f9f5 --- /dev/null +++ b/fs/technique/technique-erreurs.md @@ -0,0 +1,15 @@ +[Documentation Fournisseur](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment gérer les erreurs renvoyées par FranceConnect+ ? + +--- + +# Comment gérer les erreurs renvoyées par FranceConnect+ ? + +En tant qu'OpenID Connect provider, FranceConnect+ peut renvoyer toutes sortes d'erreurs à une application cliente. Pour ce faire, FranceConnect+ passe par le mécanisme de retour d'erreurs d'un fournisseur d'identité openid connect tel que décrit dans la norme ( http://openid.net/specs/openid-connect-core-1_0.html#AuthError, en particulier les sections 3.1.2.6 (authentification), 3.1.3.4 (jeton d'accès), 5.3.3 (service d'informations utilisateur) ) + + +--- + +Voir aussi : + +- [Comment FranceConnect+ utilise le protocole OpenId Connect ?](technique-oidc-fc.md) +- [Qu'est ce que le protocole OpenID Connect ?](technique-oidc.md) \ No newline at end of file diff --git a/fs/technique/technique-glossaire.md b/fs/technique/technique-glossaire.md new file mode 100644 index 0000000..bdd239c --- /dev/null +++ b/fs/technique/technique-glossaire.md @@ -0,0 +1,96 @@ +# Glossaire + +#### **FC_URL:** +Il s'agit le l'URL de l'environnement FranceConnect+ que vous utiliser: +- [integration](technique-env-fc.md#acc%C3%A8s-%C3%A0-lenvironnement-dint%C3%A9gration) : https://auth.integ01.dev-franceconnect.fr +- [production](technique-env-fc.md#acc%C3%A8s-%C3%A0-lenvironnement-de-production) : https://auth.franceconnect.gouv.fr + +#### **FS_URL:** +Il s'agit de l'URLde votre fournisseur de service + + +#### **CALLBACK_URL_DATA:** +le callback du FS, communiqué lors de son inscription auprès de FC + +#### **POST_LOGOUT_REDIRECT_URI:** +Il s'agit de l'URL de votre fournisseur de service vers laquelle l'usager va être redirigée une fois l'utilisateur déconnecté de FranceConnect+. + +[plus d'info](https://openid.net/specs/openid-connect-rpinitiated-1_0.html#RedirectionAfterLogout) + +#### **CLIENT_ID:** +Identifiant du FS, communiqué lors de son inscription auprès de FC + +#### **CLIENT_SECRET:** +Le secret du FS, communiqué lors de son inscription auprès de FC + +#### **AUTHZ_CODE:** +Code retourné (dans l'URL) par FC au FS lorsque ce dernier fait un appel sur le endpoint FC_URL/api/v1/authorize. Il est ensuite passé (dans le corps de la requête HTTP POST) lors de l'appel sur le endpoint FC_URL/api/v1/token + +#### **ACCESS_TOKEN:** +Token retourné (dans le corps HTTP) par l'appel au endpoint FC_URL/api/v2/token. Il est ensuite passé lors de l'appel au endpoint FC_URL/api/v2/userinfo + +#### **SCOPES:** +Les scopes permettent de définir +Liste des scopes demandés séparés par des espaces (donc par %20 au format unicode dans l'URL) + +Voici la liste supportée par FranceConnect+ : + + * openid : obligatoire, permet de demander l'identifiant technique de l'utilisateur au format OpenIDConnect + * profile : obligatoire, permet de récupérer l'essentiel de l'identité pivot. Si disponible, renvoie aussi le preferred_username + * birth : obligatoire, permet de récupérer la ville et le département de naissance de la personne (identité pivot) + * email : obligatoire, permet de récupérer l'adresse électronique de la personne + +Cette liste de scopes est définie par la norme OpenIDConnect + +L'identité pivot complète se récupère soit par le scope identite_pivot, soit en cumulant deux scopes différents (profile + birth) car les informations de ville et de département de naissance de la personne ne font pas partie des données pouvant être renvoyées en soumettant le scope 'profile' seul. Le découpage est fait ici dans un souci de se conformer à la norme. + +#### **ID_TOKEN:** +Objet JWT retourné par l'appel au endpoint FC_URL/api/v2/token. L'objet JWT est un objet JSON formatté et signé. Le JSON doit contenir ces six clés : aud,exp,iat,iss,sub et nonce. + +Exemple de JWT : + +``` +eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2ZjcC5kb2NrZXIuZGV2LWZyYW5jZWNvbm5lY3QuZnIiLCJzdWIiOiI0ZDMyN2RkMWU0MjdkYWY0ZDUwMjk2YWI3MWQ2ZjNmYzgyY2NjNDA3NDI5NDM1MjFkNDJjYjJiYWU0ZGY0MWFmdjEiLCJhdWQiOiJhMGNkNjQzNzJkYjZlY2YzOWMzMTdjMGM3NGNlOTBmMDJkOGFkN2Q1MTBjZTA1NDg4M2I3NTlkNjY2YTk5NmJjIiwiZXhwIjoxNjE5NjA0NTE4LCJpYXQiOjE2MTk2MDQ0NTgsIm5vbmNlIjoiY3VzdG9tTm9uY2UxMSIsImlkcCI6IkZDIiwiYWNyIjoiZWlkYXMxIiwiYW1yIjpudWxsfQ.AdbcnBJluh1UZb4ylEM6oSoarHw-Cb_4--kFWfOJre4 +``` + +Exemple de header du JWT : +```json +{ + "typ": "JWT", + "alg": "HS256" +} +``` + +Exemple de payload du JWT : + +```json +{ + "iss": "https://fcp.docker.dev-franceconnect.fr", + "sub": "4d327dd1e427daf4d50296ab71d6f3fc82ccc40742943521d42cb2bae4df41afv1", + "aud": "a0cd64372db6ecf39c317c0c74ce90f02d8ad7d510ce054883b759d666a996bc", + "exp": 1619604518, + "iat": 1619604458, + "nonce": "customNonce11", + "idp": "FC", + "acr": "eidas2", + "amr": null +} +``` +Les champs *aud, exp, iat, iss, sub* sont des champs obligatoires de la norme OpenId Connect. Le *nonce* est un paramètre obligatoirement envoyé lors de l'appel à `/api/v2/authorize`. Le FS doit impérativement vérifier que la valeur correspond bien à celle qu'il a envoyée, et qui doit être liée à la session de l'utilisateur. + +Si vous utilisez une librairie pour transformer le json en JWT, il génèrera une chaîne de caractères constitué de 3 chaînes base64 séparées par un point. + +#### **ID_TOKEN_HINT:** +Objet JWT identique au format ID_TOKEN qui a été reçu lors de l'échange avec l'appel à FC_URL/api/v1/token et doit être passé en paramètre lors de l'appel à FC_URL/api/v2/session/end + +#### **USER_INFO:** +Voir la section identité pivot + +#### **STATE:** +Champ obligatoire, généré aléatoirement par le FS, que FC renvoie tel quel dans la redirection qui suit l'authentification, pour être ensuite vérifié par le FS. Il est utilisé afin d’empêcher l’exploitation de failles CSRF + +#### **NONCE :** +Champ obligatoire, généré aléatoirement par le FS que FC renvoie tel quel dans la réponse à l'appel à /token, pour être ensuite vérifié par le FS. Il est utilisé pour empêcher les attaques par rejeu + +#### **SUB:** +Identifiant technique (unique et stable dans le temps pour un individu donné) fourni par FranceConnect+ au FS. Le SUB est présent dans l'IdToken retourné au FS ainsi que dans les informations d'identité. Le SUB retourné par FranceConnect+ est spécifique à chaque fournisseur de service (i.e: Un usager aura toujours le même SUB pour un Fournisseur de Service donné, en revanche il aura un SUB différent par Fournisseur de Service qu'il utilise). diff --git a/fs/technique/technique-oidc-fc.md b/fs/technique/technique-oidc-fc.md new file mode 100644 index 0000000..0db6db5 --- /dev/null +++ b/fs/technique/technique-oidc-fc.md @@ -0,0 +1,107 @@ +[Documentation Fournisseur](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment FranceConnect+ utilise le protocole OpenId Connect ? + +--- + +# Comment FranceConnect+ utilise le protocole OpenId Connect ? + +FranceConnect+ met en oeuvre le protocole OpenID Connect pour permettre à un fournisseur de service de déléguer à FranceConnect+ l'identificiation et l'authentification des usagers, ainsi que la gestion des consentements qui sont nécessaire à la transmission des données personnelles des utilisateurs auprès du fournisseur de service. + +## Les acteurs + +Pour rappel, le protocole OpenID Connect défini les acteurs suivants : *User*, *Relying Party* et *OpenID Provider*. + +OpenId Connect fait intervenir 3 acteurs : + +| Acteur OpenId Connect | Acteur dans le contexte FranceConnect+ | +| ------ | ------ | +| User |  Usager du fournisseur de service | +| Relying Party | Fournisseur de service |  +| OpenID Provider | FranceConnect+ | + +## Flow OpenID Connect + +Le protocole OpenID Connect propose différents *flow* permettant de récupérer des tokens. FranceConnect+ n'implémente que [Authorization code flow](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth). + +## Discovery Mode + +Le protocole OpenID Connect permet à *l'Identity Provider* d'exposer à *Relying Party* de récupérer dynamiquement ses données de configuration (*meta-data*). + +[Plus d'information sur OpenID Connect Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) + +FranceConnect+ expose ses méta-data via les discovery url suivante : + +| Environnement | Adresse | +| ------ | ------ | +| Integration | https://auth.integ01.dev-franceconnect.fr/api/v2/.well-known/openid-configuration | +| Production | https://auth.franceconnect.gouv.fr/api/v2/.well-known/openid-configuration | + + + +## Signature et chiffrement des jetons + +FranceConnect+ permet de récupérer différents types de jetons : + +| Jeton | Format | +| --- | --- | +| *access token* | chaine de caractères | +| *id_token* | JWT |  +| *user info* | JWT |  + +L'ensemble de jetons JWT fournis par FranceConnect+, c'est à dire l'ID Token et les *User Info* sont chiffrés et signés afin de garantir un niveau de confidentialité et d'intégrité afin de satisfaire les exigences des niveaux de garantie subtantiel et élévée défini dans le règlement eIDAS. + +### Signature des jetons + +Les jetons sont **signés** par FranceConnect en utilisant les clés de chiffrement de FranceConnect+ afin de permettre au fournisseur de service de **s'assurer que ces deux jetons sont bien emis par FranceConnect+**. Le fournisseur de service doit donc vérifier la signature des jetons en ayant pris le soin de récupérer les clés publiques de signature de FranceConnect+. + +La **signature** permet de garantir **l'intégrité** et **l'authenticité** des données échangées. + +## Chiffrement des jetons + +Les jetons sont **chiffrés** par FranceConnect en utilisant un des clés publiques de chiffrement mis à disposition par le fournisseur de service afin de **s'assurer que seul le fournisseur de service ne puisse consulter** les informations présentes dans ces jetons. Le fournisseur de service doit mettre à disposition de FranceConnect+ ses clés publiques de chiffrement. + +Le **chiffrement** permet de garantir la **confidentialité** des données échangées. + +## Algorithme de signature et de chiffrement + +Tous les échanges de jetons JWT entre FranceConnect+ et le Fournisseur de Service sont signés et chiffrés en utilisant les algorithmes suivants : + +**Signature de jetons par FranceConnect+** : + +- Asymétrique : + + - ES256 (EC + SHA256) + +**Chiffrement des jetons (jwe+jws)** : + +- Hybride : + + - RSA-OEAP + AES256-GCM + - ECDH-ES + AES256-GCM + +Les spécifications des algorithmes de signatures et de chiffrements utilisés sont les suivantes : + +* [JWA - https://tools.ietf.org/html/rfc7518](https://tools.ietf.org/html/rfc7518) +* [JWS - https://tools.ietf.org/html/rfc7515#appendix-A.3](https://tools.ietf.org/html/rfc7515#appendix-A.3) +* [JWE - https://tools.ietf.org/html/rfc7516#appendix-A.1](https://tools.ietf.org/html/rfc7516#appendix-A.1) + +#### Exposition des clés de singature + +Les clés publiques de signature de FranceConnect+ sont disponibles via la *JWKS URL* présente dans les méta-data de la *Discovery URL* à l'adresse suivantes et sont changées régulièrement : + +| Environnement | adresses du endpoint | +| ------ | ------ | +| intégration | https://auth.integ01.dev-franceconnect.fr/api/v2/jwks | +| production | https://auth.franceconnect.gouv.fr/api/v2/jwks | + +#### Exposition des clés de chiffrement + +Les clés publiques de chiffrement du fournisseur de service doivent être exposées à FranceConnect+ par le fournisseur de service sous la forme d'une *URL* au format JWK. + +[Plus d'information sur le JWK](https://datatracker.ietf.org/doc/html/rfc7517) + +--- + +Voir aussi : + +- [Qu'est ce que le protocole OpenID Connect ?](technique-oidc.md) +- [Quels échanges ont lieu entre mon service et FranceConnect+ lors d'une cinématique ?](technique-oidc-flux.md) diff --git a/fs/technique/technique-oidc-flux.md b/fs/technique/technique-oidc-flux.md new file mode 100644 index 0000000..b316ce4 --- /dev/null +++ b/fs/technique/technique-oidc-flux.md @@ -0,0 +1,23 @@ +[Documentation Fournisseur](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Quels échanges ont lieu entre mon service et FranceConnect+ lors d'une cinématique ? + +--- + +# Quels échanges ont lieu entre mon service et FranceConnect+ lors d'une cinématique ? + + +## Détail du fonctionnement + +Le diagramme de flux représente entre l'utilisateur, FranceConnect+ et votre service est le suivant. + + +![diagramme de séquence FS](../diagrams/diagram-sequence-fs-fc.png) + + +La récupération de l'identité pivot doit être faite dans la suite immédiate des appels précédents (authentification et récupération du code). Le fait d'appeler ce Web service plus tard n'est aujourd'hui pas proposé. + +--- + +Voir aussi : + +- [Comment FranceConnect+ utilise le protocole OpenId Connect ?](technique-oidc-fc.md) +- [Qu'est ce que le protocole OpenID Connect ?](technique-oidc.md) \ No newline at end of file diff --git a/fs/technique/technique-oidc.md b/fs/technique/technique-oidc.md new file mode 100644 index 0000000..d16339d --- /dev/null +++ b/fs/technique/technique-oidc.md @@ -0,0 +1,136 @@ +[Documentation Fournisseur](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Qu'est ce que le protocole OpenID Connect ? + +--- + +# Qu'est ce que le protocole OpenID Connect ? + + +Le protocole OpenID Connect est au cœur du fonctionnement de FranceConnect. C'est une couche d'identification basée sur protocole OAuth 2.0. Il permet à des *Clients* d'accéder à l'identité des *Utilisateurs* par l'intermédiaire d'un *Serveur d'Autorisation* . + +La spécification du protocole se trouve sur http://openid.net/connect/. + +Pour une référence d'implémentation OpenID Connect voici le lien : https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth + + +## Qu'est ce que le protocole OAuth 2.0 + +OAuth 2.0 est un protocole destiné délégué les accès à des resources. Son objectif est de décrire comment l'accès à des ressources, des données, exposées par exemple sous la forme d'API sécurisé, peut être délégué à un client, une application ou un service en ligne, en ayant recueilli l'autorisation de l'utilisateur. + +Ce protocole fait intervenir quatre acteurs : + +* *Resource owner* : il s'agit de la personne qui est propriétaire des resources, le plus souvent c'est l'utilisateur; +* *Resource server* : il s'agit du serveur qui héberge les resources du *Resource owner*; +* *Client* : il s'agit de l'application ou du service qui souhaite accéder aux ressources +* *Authorization Server* : Il s'agit du serveur qui recueiller les autorisations des propriétaires des ressources et génère le jeton d'autorisation qui sont utilisé pour accéder aux ressources. + +Le serveur d'autorisation gère deux types de jetons : +* *access token* : jeton qui permet de valider l'accès à un ressource. La durée de validité de ce jeton est limité et généralement de l'ordre de quelques minutes; +* *refresh token* : jeton qui permet de renouveller l'autorisation sans la demander à nouveau au propriétaire de la ressource. Il permet de récupérer un nouvel *access token*. La durée de validité de ce jeton est généralement de plusieurs jours voir de plusieurs mois. Ce jeton doit être stocké de manière sécurisé par le client. + +Les clients doivent être déclarés auprès du serveur d'autorisation. Les informations à fournir par le client sont : +- le nom de l'application +- la liste des urls de redirections : il s'agit des urls vers lesquelles les utilisateurs vont être redirigé par le serveur d'autorisation, une fois l'autorisation accordé. +- les types d'autorisation qui pourront être utilisé par le client + +Une fois déclarée, le serveur d'autorisation fourni au client un couple de client_id / client_secret qui permettra d'autthenfier le client auprès du serveur d'autorisation. + +Le diagramme de séquence représente de manière générale les intégrations dans une cinématique OAuth 2.0 + +drawing + +1. Le client demande un accès au ressource auprès du proriétaire des ressources ( *resource owner ) en précisant le périmètre de la demande à l'aide de scopes. Le client s'identifie à l'aide de son client_id et indique le type d'autorisation demandée. + +2. Si le propriétaire de la ressource accepte d'accorder l'accès à ces ressources, une autorisation d'accès est délivrer au client + +3. Le client demande auprès du serveur d'autorisation un jeton d'accès ( *access token* ) en s'authentifiant et en fournissant l'autorisation d'accès reçu à l'étape précédente. + +4. Le serveur d'autorisation fourni un jeton d'accès après avoir authentifié le client et vérifier la validité de l'autorisation d'accès. + +5. Le client demande des ressources au serveur de ressources en fournissant l'access token fourni par le serveur d'autorisations. + +6. Le serveur de ressources retournes les ressources demandés en ayant au préalable vérifié la validité de l'access token. + +OAuth 2.0 propose les types d'autorisations suivants: authorization code, implicit, resource owner credentials, client credentials. + +Il faut noter que le protocole OAuth 2.O ne gère pas l'authentification de l'utilisateur. L'identité de l'utilisateur ne permet pas au client d'accéder au informations d'identités de l'utilisateur. Afin de rajouter ces informations, le protocole Openid Connect étant OAuth 2.0 pour intégrer l'accès aux informations d'identités de l'utilisateur. + +## Qu'apporte OpenID Connect à OAuth 2.0 ? + +Le protocole OpenID Connect s'appuie sur OAuth 2.0 en ajoutant des fonctionnalités supplémentaires : + +- La gestion d'information sur l'authentification +- l'ajout d'un ID Token +- la gestion d'un SSO et d'un déconnection +- une API pour récupérer les informations sur l'utilisateur (/userinfo) +- un standard sur les informations sur l'utilisateur +- un service de découverte des informations du serveur OpenID. + +### Quels sont les acteurs qui interviennent dans OpenId Connect ? + +OpenId Connect fait intervenir 3 acteurs : + +| Acteur OpenId Connect | Acteur similaire dans OAuth 2.0 | +| ------ | ------ | +| User |  Resource Owner | +| Relying Party | Client |  +| OpenID Provider | Authorization Server | + +### Qu'est ce que l'ID Token ? + +L'ID token est un jeton au format JWT qui est fourni en même temps que l'*access token*, il contient +- des information sur l'authtentification + - dates d'expiration, d'authentification, de création + - des moyens de contrôle permettant de valider l'ID Token et l'Access Token +- des attributs ( claims ) sur l'utilisateurs, qui peuvent être : + - standard : profile, email, address, phone, ... + - personnalisés par le serveur OpenId Connect. + + +**Exemple d'ID Token :** + +```json +{ + "sub": "4d327dd1e427daf4d50296ab71d6f3fc82ccc40742943521d42cb2bae4df41afv1", + "amr": [ "fc" ], + "auth_time": 1619605379, + "acr": "eidas3", + "nonce": "8c1696f884cac760436c9551ce34be81a3ab61171bf486dd31a58d2bc23a7bbd", + "at_hash": "zc4hJ6cxMmrkb8KQn9UXbg", + "aud": "6925fb8143c76eded44d32b40c0cb1006065f7f003de52712b78985704f39950", + "exp": 1619605440, + "iat": 1619605380, + "iss": "https://corev2.docker.dev-franceconnect.fr/api/v2" +} +``` + +[Plus d'information sur l'ID Token](https://openid.net/developers/specs/) + +### Quels sont les endpoints d'OpenId Connect ? + +Le protocole OpenID Connect propose les endpoints suivants : + +- **authorization** : permet de demander une authentification de l'utilisateur +- **token** : permet de demander un tocket ( *access token*, *refresh token*, *id token* ) +- **userinfo** : permet de récupérer les informations sur l'utilisateur +- **revocation** : permet de révoquer un token (*access token*, *refresh token*) +- **introspection** : permet de valider un jeton (*access token*, *refresh token*) +- **discovery** : permet de récupérer des informations sur le serveur OpenId Connect + +### Comment récupérer les tokens ? + +OpenId proposte 3 types de flow qui permettent de récupérer des tokens : + +- **Authorization code flow** : l'appel au endpoint *authorization* permet de récupérer un code d'autorisation qui est utilisé pour récupérer les tokens. +- **Implicit flow** : l'appel au endpoint *authorization* permet de récupérer directement les tokens, le refresh token ne peut pas être récupéré. +- **Hybrid flow** : Il s'agit d'un mix entre les deux. + +--- + +Voir aussi : + +- [Comment FranceConnect+ utilise le protocole OpenId Connect ?](./technique-oidc-fc.md) +- [Quels échanges ont lieu entre mon service et FranceConnect+ lors d'une cinématique ?](./technique-oidc-flux.md) + + + + diff --git a/fs/technique/technique-scope-fc.md b/fs/technique/technique-scope-fc.md new file mode 100644 index 0000000..2196279 --- /dev/null +++ b/fs/technique/technique-scope-fc.md @@ -0,0 +1,122 @@ +[Documentation Fournisseur](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Comment utiliser les scopes OpenID Connect pour accéder aux données des utilisateurs ? + +--- + +# Comment utiliser les scopes OpenID Connect pour accéder aux données des utilisateurs ? + +Les données des utilisateurs mis à disposition d'un fournisseur de service est décrit à la page [Je veux connaitre les données que je peux récupérer de FranceConnect+ ](../projet/projet-donnees-fc+.md). Pour rappel les données d'identité accessible sont les suivantes : + +* Nom de naissance +* Prénoms +* Sexe +* Date de naissance +* [Code géographique INSEE de la ville de naissance](https://www.insee.fr/fr/information/2560452) +* [Code géographique INSEE du pays de naissance](https://www.insee.fr/fr/information/2560452) +* Nom d'usage + +## Scope et Claims dans OpenID Connect + +### Qu'est ce qu'un scope dans OpenID Connect ? + +> Les clients OpenID Connect utilisent des *scopes* tels que définis dans la section 3.3 de [OAuth 2.0 [RFC6749]](https://openid.net/specs/openid-connect-basic-1_0.html#RFC6749) pour spécifier quels privilèges d'accès sont demandés pour les *access token*. Les *scopes* associées aux *access token* déterminent les ressources qui seront disponibles lorsqu'elles sont utilisées pour accéder aux *endpoints* protégés par OAuth 2.0. Pour OpenID Connect, les *scopes* peuvent être utilisées pour demander que des ensembles d'informations spécifiques soient mis à disposition en tant que *claims*. + +*Source: [OpenID Connect Basic Client Implementer's Guide 1.0](https://openid.net/specs/openid-connect-basic-1_0.html#Scopes)* + +Le protocole OpenID Connect défini un certain nombre de [scopes standards](https://openid.net/specs/openid-connect-basic-1_0.html#Scopes) qu'il est possible d'étendre avec des *scopes* spécifiques supplémentaires en fonction du besoin de l'*identity provider*. + +*En bref :* Les scopes permettent de définir l'ensemble des informations à disposition du fournisseur de service pour une cinématique. + +### Qu'est ce qu'un claim dans OpenID Connect ? + +Dans OpenId Connect, un claim est une information relative à l'utilisateur ou à la phase l'authentification. Ces informations peuvent être disponible soit dans l'ID Token, soit dans la réponse du UserInfo. Les claims retournés dans ces jetons dépendent des scopes associés à l'*access token*. + +Le protocole OpenId Connect defini un certain nombre de [claims standards](https://openid.net/specs/openid-connect-core-1_0.html#Claims). + +*En Bref :* Les claims sont les informations sur l'utilisateur ou la phase d'authentification disponible dans l'ID Token ou dans la réponse de UserInfo. + +## Les scopes et les claims dans FranceConnect+ + +### Liste des claims + +#### Les données d'identité + +| Claims | Type | Description | Format | +|--------------|--------|-------------|--------| +| given_name | string | les prénoms séparés par des espaces (standard OpenIDConnect) | [A-Za-zÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸàâäçéèêëîïôöùûüÿÆŒæœ -'] | | +| family_name | string | le nom de famille de naissance (standard OpenIDConnect) |  [A-ZÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ \-']| | +| birthdate | string | la date de naissance au format YYYY-MM-DD (standard OpenIDConnect) | [ YYYY-01-01 ] - (\d{4})-01-01 - (Présumé mois) [ YYYY-MM-01 ] - (\d{4})-(\d{2})-01 - (Présumé jours) [ YYYY-MM-DD ] - (\d{4})-(\d{2})-(\d{2}) | +| gender | string | male pour les hommes, female pour les femmes (standard OpenIDConnect)| Masculin : male Féminin : female |  +| birthplace | string | le code INSEE du lieu de naissance sur 5 chiffres (ou une chaîne vide si la personne est née à l'étranger). Une lettre peut être présente pour les personnes nées en corse.| Si né en France (Taille de 5) [(([0-8][0-9AB])|(9[0-8AB]))[0-9]{3}] - [Details](http://xml.insee.fr/schema/cog.html#CodeCommuneFrancaiseOuPaysOuTerritoireEtranger_stype) - [Liste](https://www.insee.fr/fr/information/3363419)
En cas de pays étranger : Champs vide |  +| birthcountry | string | le code INSEE du pays de naissance sur 5 chiffres | Pour les pays étrangers (Taille de 5 ) [99[0-9]{3}] - [Details](http://xml.insee.fr/schema/cog.html#CodePaysOuTerritoireEtranger_stype) Pour la France 99100 | + + +### Les données complémentaires + +| Claims | Type | Description | Format | +|--------------|--------|-------------|--------| +| sub | string | identifiant technique (standard OpenIDConnect) | 66 caractères hexa + lettre 'v' | +| email | string | l'adresse électronique de contact de la personne (standard OpenIDConnect) | [RFC 5322](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc5322.html#addrspec) | +| preferred_username | string | le nom d'usage (standard OpenIDConnect) | [A-ZÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ \-'] | + +### Les données provenant du RNIPP + +L'ensemble des données, hormis le sub, ci-dessus proviennent du fournisseur d'identité et ont le niveau de garantie correspondant ( substantiel ou élevé suivant le fournisseur d'identité ). Afin de faciliter la réconciliation entre les données d'identités mis à disposition par FranceConnect+ et les référentiels de certains FI ( fournisseurs de service publique exclusivement ), des données provenant du RNIPP peuvent également être mise à disposition en fonction du besoin. Attention, le RNIPP ne disposant pas de qualification en tant que MIE, les données provenant du RNIPP n'ont pas de garantie de niveau substantiel ou élevé. Il est donc nécessaire d'utiliser ces données afin de faciliter les réconciliations et uniquement cela. Les données provenant du fournisseurs d'identités doivent être utiliser pour garantir l'identité de l'usager. + + +| Claims | Type | Description | Format | +|--------------|--------|-------------|--------| +| rnipp_given_name | string | les prénoms séparés par des espaces (standard OpenIDConnect) | [A-Za-zÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸàâäçéèêëîïôöùûüÿÆŒæœ -'] | | +| rnipp_family_name | string | le nom de famille de naissance (standard OpenIDConnect) |  [A-ZÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ \-']| | +| rnipp_birthdate | string | la date de naissance au format YYYY-MM-DD (standard OpenIDConnect) | [ YYYY-01-01 ] - (\d{4})-01-01 - (Présumé mois) [ YYYY-MM-01 ] - (\d{4})-(\d{2})-01 - (Présumé jours) [ YYYY-MM-DD ] - (\d{4})-(\d{2})-(\d{2}) | +| rnipp_gender | string | male pour les hommes, female pour les femmes (standard OpenIDConnect)| Masculin : male Féminin : female |  +| rnipp_birthplace | string | le code INSEE du lieu de naissance sur 5 chiffres (ou une chaîne vide si la personne est née à l'étranger). Une lettre peut être présente pour les personnes nées en corse.| Si né en France (Taille de 5) [(([0-8][0-9AB])|(9[0-8AB]))[0-9]{3}] - [Details](http://xml.insee.fr/schema/cog.html#CodeCommuneFrancaiseOuPaysOuTerritoireEtranger_stype) - [Liste](https://www.insee.fr/fr/information/3363419)
En cas de pays étranger : Champs vide |  +| rnipp_birthcountry | string | le code INSEE du pays de naissance sur 5 chiffres | Pour les pays étrangers (Taille de 5 ) [99[0-9]{3}] - [Details](http://xml.insee.fr/schema/cog.html#CodePaysOuTerritoireEtranger_stype) Pour la France 99100 | + + +### Les données sur l'authentification + +Les claims relatifs à l'authentification disponible par FranceConnect+ sont des claims standards et sont disponible uniquement dans l'ID Token. Ces claims sont les suivants : + +- amr +- acr +- sid +- auth_time +- iss + +[Plus d'informations sur ces claims](https://openid.net/specs/openid-connect-basic-1_0.html#IDToken) + +### Correspondance entre scope et claims sur FranceConnect+ + +Le tableau suivant décris la liste des *claims* accessible en fonction des *scopes* associés à l'access token. + +| Scope | Claims | +| --- | --- | +| openid | sub | +| gender | gender | +| birthdate | birthdate | +| birthcountry | birthcountry | +| birthplace | birthplace | +| given_name | given_name | +| family_name | family_name | +| email | email | +| preferred_username | preferred_username | +| profile | family_name, given_name, preferred_username, gender, birthdate | +| birth | birthplace, birthcountry | +| identite_pivot |given_name, family_name, birthdate, gender, birthplace, birthcountry | +| rnipp_given_name | given_name, rnipp_given_name | +| rnipp_family_name | family_name, rnipp_family_name | +| rnipp_gender | gender, rnipp_gender | +| rnipp_birthcountry | birthcountry, rnipp_birthcountry | +| rnipp_birthplace | birthplace, rnipp_birthplace | +| rnipp_birthdate | birthdate, rnipp_birthdate | +| rnipp_profile | given_name, family_name, birthdate, gender,preferred_username,rnipp_given_name, rnipp_family_name, rnipp_birthdate, rnipp_gender | +| rnipp_birth | birthplace, birthcountry, rnipp_birthplace, rnipp_birthcountry | +| rnipp_identite_pivot | given_name, family_name, birthdate, gender, birthplace, birthcountry, rnipp_given_name, rnipp_family_name, rnipp_birthdate, rnipp_gender, rnipp_birthplace, rnipp_birthcountry| + +--- + +Voir aussi: + +- [Quelles sont les données que je peux récupérer par FranceConnect+ sur mes usagers ?](../projet/projet-donnees-fc%2B.md) +- [Comment FranceConnect+ utilise le protocole OpenId Connect ?](technique-oidc-fc.md) +- [Qu'est ce que le protocole OpenID Connect ?](technique-oidc.md) \ No newline at end of file diff --git a/fs/technique/technique-sessions.md b/fs/technique/technique-sessions.md new file mode 100644 index 0000000..22f0eaf --- /dev/null +++ b/fs/technique/technique-sessions.md @@ -0,0 +1,16 @@ +[Documentation Fournisseur](../README.md) > [J'intègre FranceConnect+ dans mon service en ligne](../README.md#jintègre-franceconnect-dans-mon-service-en-ligne) > Quelles sont les durées de vie des sessions et jetons de FranceConnect+ ? + +--- + +# Quelles sont les durées de vie des sessions et jetons de FranceConnect+ ? + +FranceConnect+ gère plusieurs types de données ayant une durée de vie limitée lors du déroulé d'une authentification par OpenID Connect ou de la fourniture d'un jeton d'accès à une ressource protégée (cinématique OAuth2 classique). Chacune de ces données possède une durée de vie qui lui est propre au delà de laquelle elle doit être régénérée. En voici le détail : + +| Type | Utilisé lors de ... | Durée de vie | +| ------ | ------ | ------ | +| Session Web | A chaque authentification et pour maintenir la session côté FranceConnect+ | 30 minutes sans action | +| Access Token | Récupération d'informations (phase 3 cinématique d'authentification / cinématique OAuth2) | 60 secondes | +| Authorization code | Code fourni lors du début de la démarche d'authentification, il sert ensuite à récupérer l'access token | 30 secondes | +| Consentement | Consentement donné par l'utilisateur pour l'accès à une ressource protégée (associée à un scope au sens OAuth2) | 5 secondes | + +--- \ No newline at end of file