OPT-OAU-003Bank and TPPinconsistencyOAuth2 and tokens

OpenID Connect and signed request

Does the bank implement OpenID Connect, and does it accept a signed request?

The options

  • OAuth2 only

    No IdToken.

  • OpenID Connect

    An IdToken on top of the tokens. ui_locales becomes mandatory.

  • Signed Request Object

    If the server accepts it, the parameters go in a signed JWT. Plain parameters can be sent alongside.

Bank side
Optional for the bank. The spec sets neither the key nor the signing algorithm of the Request Object.
TPP side
Check nonce in the IdToken when you sent one, and auth_time when you sent max_age.
Spec inconsistency
The spec writes max-age in one place and max_age in another. OpenID Connect Core uses max_age.

Entry checked on October 19, 2026.

Based on the STET PSD2 API 1.6.3 specification, licensed CC BY 3.0 FR.

The entry as stored
{
  "id": "OPT-OAU-003",
  "edition": "1.6.3",
  "chooser": "both",
  "title": {
    "fr": "OpenID Connect et requête signée",
    "en": "OpenID Connect and signed request",
    "es": "OpenID Connect y petición firmada",
    "pt-br": "OpenID Connect e requisição assinada"
  },
  "question": {
    "fr": "La banque implémente-t-elle OpenID Connect, et accepte-t-elle une requête signée ?",
    "en": "Does the bank implement OpenID Connect, and does it accept a signed request?",
    "es": "¿Implementa el banco OpenID Connect, y acepta una petición firmada?",
    "pt-br": "O banco implementa OpenID Connect e aceita uma requisição assinada?"
  },
  "options": [
    {
      "label": {
        "fr": "OAuth2 seul",
        "en": "OAuth2 only",
        "es": "Solo OAuth2",
        "pt-br": "Só OAuth2"
      },
      "text": {
        "fr": "Pas d'IdToken.",
        "en": "No IdToken.",
        "es": "Sin IdToken.",
        "pt-br": "Sem IdToken."
      }
    },
    {
      "label": {
        "fr": "OpenID Connect",
        "en": "OpenID Connect",
        "es": "OpenID Connect",
        "pt-br": "OpenID Connect"
      },
      "text": {
        "fr": "Un IdToken en plus des tokens. `ui_locales` devient obligatoire.",
        "en": "An IdToken on top of the tokens. `ui_locales` becomes mandatory.",
        "es": "Un IdToken además de los tokens. `ui_locales` pasa a ser obligatorio.",
        "pt-br": "Um IdToken além dos tokens. `ui_locales` passa a ser obrigatório."
      }
    },
    {
      "label": {
        "fr": "Request Object signé",
        "en": "Signed Request Object",
        "es": "Request Object firmado",
        "pt-br": "Request Object assinado"
      },
      "text": {
        "fr": "Si le serveur l'accepte, les paramètres passent dans un JWT signé. Les paramètres en clair peuvent être envoyés à côté.",
        "en": "If the server accepts it, the parameters go in a signed JWT. Plain parameters can be sent alongside.",
        "es": "Si el servidor lo acepta, los parámetros van en un JWT firmado. Los parámetros en claro pueden enviarse junto a él.",
        "pt-br": "Se o servidor aceitar, os parâmetros vão em um JWT assinado. Os parâmetros em claro também podem ser enviados junto."
      }
    }
  ],
  "stet": {
    "sections": [
      {
        "part": "framework",
        "section": "3.4.2.4",
        "page": 28
      }
    ],
    "openapi": [],
    "flows": [],
    "changes": [],
    "remark": null
  },
  "aspsp": {
    "fr": "Optionnel pour la banque. La spec ne fixe ni la clé ni l'algorithme de signature du Request Object.",
    "en": "Optional for the bank. The spec sets neither the key nor the signing algorithm of the Request Object.",
    "es": "Opcional para el banco. La especificación no fija ni la clave ni el algoritmo de firma del Request Object.",
    "pt-br": "Opcional para o banco. A especificação não define nem a chave nem o algoritmo de assinatura do Request Object."
  },
  "tpp": {
    "fr": "Vérifier `nonce` dans l'IdToken quand on l'a envoyé, et `auth_time` quand on a envoyé `max_age`.",
    "en": "Check `nonce` in the IdToken when you sent one, and `auth_time` when you sent `max_age`.",
    "es": "Verificar `nonce` en el IdToken si se envió, y `auth_time` si se envió `max_age`.",
    "pt-br": "Verificar `nonce` no IdToken quando ele tiver sido enviado, e `auth_time` quando `max_age` tiver sido enviado."
  },
  "regulation": null,
  "note": {
    "fr": "La spec écrit `max-age` à un endroit et `max_age` à un autre. OpenID Connect Core utilise `max_age`.",
    "en": "The spec writes `max-age` in one place and `max_age` in another. OpenID Connect Core uses `max_age`.",
    "es": "La especificación escribe `max-age` en un sitio y `max_age` en otro. OpenID Connect Core usa `max_age`.",
    "pt-br": "A especificação escreve `max-age` em um lugar e `max_age` em outro. O OpenID Connect Core usa `max_age`."
  },
  "production": null,
  "verifiedAt": "2026-10-19"
}