Aller au contenu
ecdsa.com
coreos/go-oidc (Go)Go

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

Comment corriger l’erreur

  1. 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. 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})

Erreurs associées

Parcourir toute la base de données des erreurs de signature