OPT-OAU-002Choix de la banqueincohérenceOAuth2 et tokens

PKCE exigé ou non

Le serveur d'autorisation exige-t-il PKCE ?

Les options

  • Non exigé

    Le code d'autorisation suffit.

  • Exigé

    code_challenge et code_verifier deviennent obligatoires. Méthode plain par défaut, ou S256.

Côté banque
Si PKCE est exigé, refuser une requête sans code_challenge. La spec n'impose pas S256 et garde plain comme valeur par défaut.
Côté TPP
Le protocole ne dit pas au TPP si PKCE est exigé, il faut le lire dans la documentation de la banque. Préférer S256 quand la banque l'accepte.
Incohérence de la spec
La vérification du code_verifier au token endpoint est écrite sans condition, contrairement à celle de /authorize.

Fiche vérifiée le 19 octobre 2026.

D'après la spécification STET PSD2 API 1.6.3, sous licence CC BY 3.0 FR.

La fiche telle qu'elle est stockée
{
  "id": "OPT-OAU-002",
  "edition": "1.6.3",
  "chooser": "aspsp",
  "title": {
    "fr": "PKCE exigé ou non",
    "en": "PKCE required or not",
    "es": "PKCE obligatorio o no",
    "pt-br": "PKCE obrigatório ou não"
  },
  "question": {
    "fr": "Le serveur d'autorisation exige-t-il PKCE ?",
    "en": "Does the authorization server require PKCE?",
    "es": "¿Exige PKCE el servidor de autorización?",
    "pt-br": "O servidor de autorização exige PKCE?"
  },
  "options": [
    {
      "label": {
        "fr": "Non exigé",
        "en": "Not required",
        "es": "No exigido",
        "pt-br": "Não exigido"
      },
      "text": {
        "fr": "Le code d'autorisation suffit.",
        "en": "The authorization code is enough.",
        "es": "Basta con el código de autorización.",
        "pt-br": "O código de autorização basta."
      }
    },
    {
      "label": {
        "fr": "Exigé",
        "en": "Required",
        "es": "Exigido",
        "pt-br": "Exigido"
      },
      "text": {
        "fr": "`code_challenge` et `code_verifier` deviennent obligatoires. Méthode `plain` par défaut, ou `S256`.",
        "en": "`code_challenge` and `code_verifier` become mandatory. The method is `plain` by default, or `S256`.",
        "es": "`code_challenge` y `code_verifier` pasan a ser obligatorios. Método `plain` por defecto, o `S256`.",
        "pt-br": "`code_challenge` e `code_verifier` passam a ser obrigatórios. Método `plain` por padrão, ou `S256`."
      }
    }
  ],
  "stet": {
    "sections": [
      {
        "part": "framework",
        "section": "3.4.2.3",
        "page": 25
      }
    ],
    "openapi": [],
    "flows": [],
    "changes": [],
    "remark": null
  },
  "aspsp": {
    "fr": "Si PKCE est exigé, refuser une requête sans `code_challenge`. La spec n'impose pas `S256` et garde `plain` comme valeur par défaut.",
    "en": "If PKCE is required, reject a request without `code_challenge`. The spec does not mandate `S256` and keeps `plain` as the default value.",
    "es": "Si se exige PKCE, rechazar toda petición sin `code_challenge`. La especificación no impone `S256` y mantiene `plain` como valor por defecto.",
    "pt-br": "Se PKCE for exigido, recusar uma requisição sem `code_challenge`. A especificação não impõe `S256` e mantém `plain` como valor padrão."
  },
  "tpp": {
    "fr": "Le protocole ne dit pas au TPP si PKCE est exigé, il faut le lire dans la documentation de la banque. Préférer `S256` quand la banque l'accepte.",
    "en": "The protocol does not tell the TPP whether PKCE is required. Check the bank's documentation. Prefer `S256` when the bank accepts it.",
    "es": "El protocolo no le dice al TPP si se exige PKCE: hay que consultarlo en la documentación del banco. Preferir `S256` cuando el banco lo acepte.",
    "pt-br": "O protocolo não diz ao TPP se PKCE é exigido. É preciso ver isso na documentação do banco. Preferir `S256` quando o banco aceitar."
  },
  "regulation": null,
  "note": {
    "fr": "La vérification du `code_verifier` au token endpoint est écrite sans condition, contrairement à celle de `/authorize`.",
    "en": "The `code_verifier` check at the token endpoint is written without a condition, unlike the one at `/authorize`.",
    "es": "La verificación del `code_verifier` en el token endpoint está redactada sin condición, a diferencia de la de `/authorize`.",
    "pt-br": "A verificação do `code_verifier` no token endpoint está escrita sem condição, ao contrário da verificação em `/authorize`."
  },
  "production": null,
  "verifiedAt": "2026-10-19"
}