Message d’erreur
oidc: malformed jwt: unexpected signature algorithm "ES256"; expected ["RS256"]
Également affiché sous la forme
- oidc: id token signed with unsupported algorithm, expected ["RS256"] got "ES256"
go-oidc v3.0–v3.5 vérifiait l’algorithme après l’analyse et formulait l’erreur ainsi : « oidc: id token signed with unsupported algorithm, expected [\"RS256\"] got \"ES256\" » ; les versions ultérieures (vérifiées sur v3.10, v3.14, v3.17 et v3.21) le rejettent pendant l’analyse, d’où « malformed jwt ».
coreos/go-oidc (Go) — IDTokenVerifier.Verify with the default SupportedSigningAlgs
Ce que cela signifie
Le jeton d’ID est signé avec un algorithme qui ne figure pas dans le `SupportedSigningAlgs` du vérificateur. Lorsque cette liste est vide et que le vérificateur n’a pas été créé à partir d’un fournisseur découvert, go-oidc se rabat sur RS256 seul, la valeur par défaut qu’impose la spécification OpenID Connect : tout jeton ES256, PS256 ou EdDSA est donc rejeté avant même la vérification de sa signature. go-oidc le signale comme « malformed jwt », car le contrôle a lieu pendant l’analyse du JWS.
Pourquoi cela se produit
Vérificateur créé à la main sans algorithmes
fréquente`oidc.NewVerifier(issuer, keySet, &oidc.Config{ClientID: …})` sans `SupportedSigningAlgs` n’accepte que RS256. Les fournisseurs qui signent avec ES256 (c’est le cas de nombreux fournisseurs auto-hébergés) échouent immédiatement.
Le fournisseur a changé d’algorithme de signature
occasionnelleUn vérificateur doté d’une liste explicite cesse de fonctionner lorsque le fournisseur passe, par rotation, à une clé d’un autre type. Les vérificateurs fondés sur la découverte récupèrent la nouvelle valeur dans `id_token_signing_alg_values_supported`.
Le jeton ne provient pas de ce fournisseur
occasionnelleLes jetons d’un autre émetteur qui utilisent un algorithme différent échouent à ce contrôle avant même le contrôle de l’émetteur.
Comment corriger l’erreur
- 1.
Indiquer explicitement l’algorithme du fournisseur
Renseignez dans `SupportedSigningAlgs` le ou les algorithmes qu’utilise le fournisseur. Gardez la liste courte : c’est une liste d’autorisation.
go verifier := oidc.NewVerifier(issuer, keySet, &oidc.Config{ ClientID: clientID, SupportedSigningAlgs: []string{oidc.ES256}, // what the provider actually signs with }) - 2.
Laisser la découverte fournir les algorithmes
`provider.Verifier` lit les algorithmes pris en charge dans les métadonnées du fournisseur : rien n’est donc à synchroniser à la main.
go // provider.Verifier takes the algorithms from id_token_signing_alg_values_supported. provider, err := oidc.NewProvider(ctx, issuer) if err != nil { return err } verifier := provider.Verifier(&oidc.Config{ClientID: clientID})