Fournisseur d'identité Particulier
INTRODUCTION
Le protocole OpenID Connect est au coeur du fonctionnement de FC. C'est une surcouche d'identification au protocole OAuth 2.0. Il permet à des Clients (ici, les FS) d'accéder à l'identité des Utilisateurs finaux (les internautes) par l'intermédiaire d'un serveur d'autorisation (ici, les FIs).
Les FS doivent donc être des clients OpenID Connect (aussi appelés relying parties), et les FIs doivent être des fournisseurs OpenID Connect (aussi appelés providers).
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 : http://openid.net/specs/openid-connect-core-1_0.html
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 :
DANS LE CADRE DE FRANCECONNECT
Les flux FranceConnect implémentent les flux standards 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).
L'IDENTITÉ PIVOT
L'identité pivot fait partie des données usagers fournies par les Fournisseurs d'Identité aux Fournisseurs de Service, via FranceConnect . Elle permet d'identifier un utilisateur particulier.
Champs | Obligatoire | Type | Description |
---|---|---|---|
given_name | oui | string | les prénoms séparés par des espaces (standard OpenIDConnect) |
family_name | oui | string | le nom de naissance (standard OpenIDConnect) |
birthdate | oui | string | la date de naissance au format YYYY-MM-DD (standard OpenIDConnect) |
gender | oui | string | male pour les hommes, female pour les femmes (standard OpenIDConnect) |
birthplace | oui | string | le code INSEE du lieu de naissance sur 5 chiffres (ou une chaîne vide si la personne est née à l'étranger) |
birthcountry | oui | string | le code INSEE du pays de naissance sur 5 chiffres |
LES DONNÉES COMPLÉMENTAIRES
Champs | Obligatoire | Type | Description |
---|---|---|---|
sub | oui | string | identifiant technique (standard OpenIDConnect) |
oui | string | l'adresse électronique de contact de la personne (standard OpenIDConnect) | |
preferred_username | non | string | le nom d'usage (standard OpenIDConnect) |
Pour devenir fournisseur d'identité FranceConnect, envoyer votre demande à l'adresse support.partenaires@franceconnect.gouv.fr avec les éléments suivants :
En environnement d'intégration de FranceConnect, les endpoints sont disponibles en HTTPS.
FranceConnect doit être capable d'interroger le FI. Pensez à configurer votre proxy, si nécessaire, pour autoriser l'accès Internet depuis FC.
https://fcp.integ01.dev-franceconnect.fr/oidc_callback |
DESCRIPTION
Contexte : L'internaute a cliqué sur le fournisseur d'identité de son choix. FC redirige vers le /user/authorize du FI.REQUETE
URL:
<FI_URL>/user/authorize?response_type=code&client_id=<CLIENT_ID>&redirect_uri=<FC_URL> %2Foidc_callback&scope=<SCOPES>&state=<STATE>&nonce=<NONCE>&acr_values=<ACR_VALUES>
Méthode : GET
REPONSE
/
DESCRIPTION
Contexte : Le FI redirige vers le callback du FC.REQUETE
URL:<FC_URL>/oidc_callback?code=<AUTHZ_CODE>&state=<STATE>Méthode : GET
REPONSE
/
DESCRIPTION
Contexte : Le FC fait un appel au FI pour récupérer un access token, un id token, et un refresh token.REQUETE
URL:<FI_URL>/user/tokenMéthode : POST
REPONSE
Corps HTTP:
{ 'access_token': <ACCESS_TOKEN>, 'token_type': 'Bearer', 'expires_in': 3600, 'refresh_token': <REFRESH_TOKEN>, 'id_token': <ID_TOKEN> }
DESCRIPTION
Contexte : Le FC fait un appel au FI pour récupérer les USER_INFO de l'internaute.REQUETE
URL:<FI_URL>/api/user?schema=openidMéthode : GET
REPONSE
Corps HTTP:
<USER_INFO>
DESCRIPTION
Contexte : L'usager demande de se déconnecter de FC, on appel le fournisseur de service utilisé par celui-ciREQUETE
URL ( champs obligatoire ):<FI_URL>/end_session_endpoint?id_token_hint=<ID_TOKEN_HINT>&post_logout_redirect_uri=<POST_LOGOUT_REDIRECT_URI>&state=<STATE>Méthode : GET
REPONSE
Redirection vers le FC_URL/<POST_LOGOUT_REDIRECT_URI>
Méthode : GETERREUR
<HTTP/1.1>404 Not Found
ou
<HTTP/1.1>500 Internal Server Error
EIDAS est un nouveau 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. En tant que FI, il est nécessaire de retourner à FranceConnect le niveau eIDAS avec lequel l'utilisateur vient de s'authentifier.
De manière analogue à ce qui est fait pour demander un FI réputé utiliser un niveau eIDAS particulier à France Connect (cf la section correspondante dans la documentation FS), le FI doit signifier à FranceConnect avec quel niveau eIDAS l'authentification s'est faite.
Dans le cadre du FI, cela se traduit par le fait de positionner le claim "acr" dans l'ID Token renvoyé au client (http://openid.net/specs/openid-connect-core-1_0.html#rfc.section.2). De la même manière que pour un FS demandant à FranceConnect de filtrer les FIs réputés compatibles avec un niveau eIDAS particulier, le claim acr retourné dans l'ID Token peut être :
Cette donnée est retournée à FranceConnect, qui lui même la retourne au FS et au FD (sans la modifier).
En tant que FI, la gestion d'erreur est relativement simple : il faut retourner les informations d'erreur à FranceConnect (s'il y en a) par l'URL de callback fournie en utilisant le formalisme se trouvant dans la norme (exemple: http://openid.net/specs/openid-connect-core-1_0.html#AuthError).Par rapport à un FI, FranceConnect est toujours positionné en tant que client OpenID Connect, il n'est donc jamais en position de répondre quoi que ce soit à un FI.
La mire de connexion du fournisseur d'identité doit tout d'abord être responsive, afin d'être utilisable sur mobile.
Les éléments suivants y sont obligatoires, afin d'éviter l'abandon de l'usager lors d'une cinématique FranceConnect :
Pour une meilleure compréhension de la présence du fournisseur d'identité dans l'écosystème FranceConnect, nous recommandons également les éléments suivants sur la mire de connexion du fournisseur d'identité :
Ci-dessous les éléments visuels nécessaires :
Téléchargements :
Il est primordial que le parcours d’identification soit communiqué à l’équipe FranceConnect le plus en amont possible de la réalisation sous la forme qui vous convient (ex: spécifications fonctionnelles ou sous forme de maquettes) à l'adresse suivante : support.partenaires@franceconnect.gouv.fr.
L’équipe FranceConnect est là pour vous aider à proposer l’expérience usager la plus adaptée. N'hésitez pas à la solliciter pour éviter d'impacter vos délais de mise en production.
FC_URL | URL de FranceConnect |
---|---|
FI_URL | Votre URL, en tant que fournisseur d'identité |
CLIENT_ID | Identifiant de FC, communiqué par le FI à FC lors de son inscription. |
CLIENT_SECRET | Secret de FC, communiqué par le FI à FC lors de son inscription. |
AUTHZ_CODE | Code retourné (dans l'URL) par le FI à FC lorsque ce dernier fait un appel sur le endpoint FI_URL/user/authorize. Il est ensuite passé (dans le corps de la requête HTTP POST) lors de l'appel sur le endpoint FI_URL/user/token. |
ACCESS_TOKEN | Token retourné (dans le corps HTTP) par l'appel au endpoint FI_URL/user/token. Il est ensuite passé lors de l'appel au endpoint FI_URL/api/user. |
REFRESH_TOKEN | Token retourné (dans le corps HTTP) par l'appel au endpoint FI_URL/user/token. Il n'est pas utilisé par la suite. |
SCOPES |
Liste des scopes demandés séparés par des espaces (donc par %20 au format unicode dans l'URL). Voici la liste demandé par FranceConnect
|
ID_TOKEN |
Objet JWT retourné par l'appel au endpoint <FC_URL>/user/token. L'objet JWT est un objet JSON formaté et signé. Pour l'instant, FranceConnect ne supporte que l'algorithme de signature HS256 (HMAC using SHA-256 hash algorithm). Le JSON doit contenir ces six clés : aus, exp, iat, iss, nonce, sub. La clé à utiliser pour la signature est le secret partagé avec FranceConnect (que vous lui avez attribué avec un client_id lors de son provisioning en tant que client OpenID Connect du FI) Notez que le champ nonce est bien obligatoire et doit obligatoirement retourner la valeur fournie par FranceConnect dans l'URL de redirection au début de la cinématique d'authentification. Exemple : { 'aud': '895fae591ccae777094931e269e46447', 'exp':1412953984, 'iat': 1412950384, 'iss':'http://impots-franceconnect.fr', 'sub': 4344343423, 'nonce': 34324432468 } Si vous utilisez une librairie pour transformer le json en JWT, il génèrera une chaîne de caractères constituée de 3 chaînes base64 séparées par un point. |
USER_INFO | Voir la section identité pivot |
STATE | Champ obligatoire, généré aléatoirement par FC, que FI renvoie tel quel dans la redirection qui suit l'authentification, pour être ensuite vérifié par FC. Il est utilisé afin d’empêcher l’exploitation de failles CSRF. |
NONCE | Champ obligatoire, généré aléatoirement par FC que le FI renvoie tel quel dans la réponse à l'appel à /token, pour être ensuite vérifié par FC. 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 le FI à FC. Le sub doit être présent dans l'IdToken retourné à FC ainsi que dans les informations d'identité. Pour plus d'informations sur le rôle et la description du "sub", se référer à la documentation OpenID Connect http://openid.net/specs/openid-connect-basic-1_0.html (section 2.2) |
ACR_VALUES | Champ facultatif, fourni par le FS à FC et par FC au FI. Il correspond au niveau d'authentification demandé par le FS (niveau eidas). Pour plus d'informations sur le rôle et la description du champ "acr_values", se référer à la documentation OpenID Connect http://openid.net/specs/openid-connect-basic-1_0.html (section 2.1.1.1) |