<!-- Generated from prerendered index.html. HTML SHA-256: 05f90a8345dcd71aeb6525c36f71f515de66e6ba7a6bfbd6ffe3fdb07a1509be -->

# 04 · Identification en production aujourd'hui : FranceConnect+

> Section autonome du guide [eIDAS 2, échange par échange](https://signature.codethelaw.eu/).

En production

Flux OpenID Connect en production, documenté par la DINUM. Les exemples reprennent la documentation partenaires ; les valeurs propres à FranceConnect+ (acr, iss) sont adaptées et signalées.

Avant le portefeuille, l'identification de niveau substantiel ou élevé passe en France par la fédération FranceConnect+. La différence de modèle est nette : ici, c'est la fédération qui signe une assertion sur l'utilisateur ; l'utilisateur ne signe rien lui-même.

## 4.1 Demander une authentification de niveau substantiel

Fournisseur de service → FranceConnect+ · authorize

### Entrée

Requête d'autorisation (flux code, seul flux implémenté).

**HTTP**

```http
GET /api/v2/authorize?response_type=code
  &acr_values=eidas2
  &scope=openid%20given_name%20family_name%20birthdate%20birthplace%20birthcountry%20gender
  &client_id=<CLIENT_ID>
  &redirect_uri=https%3A%2F%2Ffs.example.fr%2Foidc-callback
  &state=6f9986e85da4f2855defbbbae9eb6ef53dc0e9d06f95426c014edfde2787e31d
  &nonce=3441bb3a2c2c41a070d9200aa78b389c5d477a4787a4b479170819d55f7f8df2 HTTP/1.1
Host: auth.franceconnect.gouv.fr
```

### Traitement

1.  acr\_values = eidas2 (substantiel) ou eidas3 (élevé) ; eidas1 renvoie une erreur sur FranceConnect+.
2.  state protège contre le CSRF, nonce contre le rejeu : tous deux aléatoires, d'au moins 32 caractères.

### Sortie

Réponse.

**HTTP**

```http
HTTP/1.1 303 See Other
Location: /api/v2/interaction/{interactionHash}   -- choix du fournisseur d'identité
```

**Suite :** L'usager choisit son fournisseur d'identité, par exemple France Identité.

## 4.2 S'authentifier avec France Identité

Personne → Fournisseur d'identité · Authentification

### Entrée

Parcours public.

**TEXTE**

```text
1. Choisir France Identité
2. Scanner le QR code avec l'application
3. Saisir le code personnel
4. Lire la carte en NFC (requis pour certains services FranceConnect+)
```

### Traitement

1.  L'application déverrouille l'identité certifiée et, si demandé, relit la puce de la carte (section 1).
2.  Le fournisseur d'identité renvoie à FranceConnect+ le niveau réellement atteint.

### Sortie

Résultat transmis à la fédération.

**TEXTE**

```text
Identité de niveau substantiel, avec la méthode d'authentification utilisée
```

**NON PUBLIÉ.** Le protocole entre FranceConnect+ et ses fournisseurs d'identité n'est pas reproduit ici.

**Suite :** FranceConnect+ redirige l'usager vers le fournisseur de service avec un code.

## 4.3 Recevoir le code d'autorisation

FranceConnect+ → Fournisseur de service · code

### Entrée

Redirection.

**HTTP**

```http
GET /oidc-callback?code=EIkPNC7db4tziWvGJvKQFaYFAjCEV0YBqbl9Im9xhpD
  &state=6f9986e85da4f2855defbbbae9eb6ef53dc0e9d06f95426c014edfde2787e31d HTTP/1.1
Host: fs.example.fr
```

### Traitement

1.  Le fournisseur de service vérifie que state est celui de sa session.

### Sortie

**TEXTE**

```text
code à usage unique, à échanger côté serveur
```

**Suite :** Échange du code contre l'id\_token, de serveur à serveur.

## 4.4 Échanger le code contre l'id\_token

Fournisseur de service → FranceConnect+ · token

### Entrée

Requête.

**HTTP**

```http
POST /api/v2/token HTTP/1.1
Host: auth.franceconnect.gouv.fr
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=<CLIENT_ID>&client_secret=<CLIENT_SECRET>
&redirect_uri=https%3A%2F%2Ffs.example.fr%2Foidc-callback&code=EIkPNC7db4tziWvGJvKQFaYFAjCEV0YBqbl9Im9xhpD
```

### Traitement

1.  FranceConnect+ récupère la clé publique de chiffrement du fournisseur de service (URL JWKS déclarée).
2.  Il signe l'id\_token en ES256, puis le chiffre (RSA-OAEP-256 ou ECDH-ES, avec AES-256-GCM) : JWE contenant un JWS.

### Sortie

Réponse (id\_token chiffré).

**JSON**

```json
{
  "access_token": "goSq0H6mF__-FqxLyD0z13SAtq9-D-LNJ489Znua2Qa",
  "expires_in": 60,
  "id_token": "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIi…",
  "scope": "openid given_name family_name birthdate birthplace birthcountry gender",
  "token_type": "Bearer"
}
```

**Suite :** Le fournisseur de service déchiffre, puis vérifie la signature.

## 4.5 Déchiffrer et vérifier l'id\_token

Fournisseur de service → Fournisseur de service · Vérification

### Entrée

JWE reçu, clés JWKS de FranceConnect+ (régulièrement renouvelées).

**TEXTE**

```text
GET https://auth.franceconnect.gouv.fr/api/v2/jwks
```

### Traitement

1.  Déchiffrer le JWE avec la clé privée du fournisseur de service.
2.  Vérifier la signature ES256 avec la clé désignée par kid dans les JWKS.
3.  Vérifier iss, aud = client\_id, nonce = celui envoyé, exp.
4.  Vérifier que acr est au moins égal au niveau demandé (eidas3 est accepté si eidas2 était demandé).

### Sortie

JWS décodé (exemple ; acr et iss adaptés à FranceConnect+).

**JSON**

```json
{ "alg": "ES256", "typ": "JWT", "kid": "sign_20211013_e6e32b46" }
{
  "sub": "739d6f6a14be39575ec3745bdcf8aec44d687b752b47054196d15ae4d7a7b2c6v1",
  "auth_time": 1759482000,
  "acr": "eidas2",
  "nonce": "3441bb3a2c2c41a070d9200aa78b389c5d477a4787a4b479170819d55f7f8df2",
  "aud": "<CLIENT_ID>",
  "exp": 1759482060,
  "iat": 1759482000,
  "iss": "https://auth.franceconnect.gouv.fr/api/v2"
}
```

**NOTE.** sub est un identifiant par secteur (pairwise) : deux services de secteurs différents reçoivent des sub différents pour la même personne.

**Suite :** Avec l'access\_token, le fournisseur de service récupère les attributs d'identité.

## 4.6 Récupérer l'identité pivot

Fournisseur de service → FranceConnect+ · userinfo

### Entrée

Requête.

**HTTP**

```http
GET /api/v2/userinfo HTTP/1.1
Host: auth.franceconnect.gouv.fr
Authorization: Bearer goSq0H6mF__-FqxLyD0z13SAtq9-D-LNJ489Znua2Qa
```

### Traitement

1.  Réponse application/jwt : JWE à déchiffrer, puis JWS ES256 à vérifier, comme l'id\_token.

### Sortie

Charge utile décodée (valeurs de la documentation partenaires).

**JSON**

```json
{
  "sub": "f5b288566867cb435099290b879ea20f5c89ed0a106a99ae050a94f60c369802v1",
  "gender": "female",
  "birthdate": "1962-08-24",
  "birthcountry": "99100",
  "birthplace": "75107",
  "given_name": "Angela Claire Louise",
  "given_name_array": ["Angela", "Claire", "Louise"],
  "family_name": "DUBOIS",
  "aud": "<CLIENT_ID>",
  "iss": "https://auth.franceconnect.gouv.fr/api/v2",
  "iat": 1759482010,
  "exp": 1759482070
}
```

**BASE LÉGALE.** Comparaison avec la section 3 : ici la preuve transférable est la signature de FranceConnect+, pas celle de l'usager. La passerelle eIDAS de FranceConnect, en production, permet aussi d'accepter les moyens d'identification notifiés d'autres États membres.

**Suite :** Ces champs forment l'identité pivot, que le service ne doit pas laisser modifier.

## Sources

-   [FranceConnect, endpoints disponibles](https://docs.partenaires.franceconnect.gouv.fr/fs/fs-technique/fs-technique-endpoints/)
-   [FranceConnect, implémentation d'OpenID Connect (signature et chiffrement)](https://docs.partenaires.franceconnect.gouv.fr/fs/fs-technique/fs-technique-oidc-fc-plus/)
-   [FranceConnect, niveaux de garantie eIDAS et ACR](https://docs.partenaires.franceconnect.gouv.fr/fs/fs-technique/fs-technique-eidas-acr/)
-   [FranceConnect, compte France Identité](https://www.franceconnect.gouv.fr/comptes-disponibles/france-identite/)
