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

Message d’erreur

failed to verify signature: failed to verify id token signature

Également affiché sous la forme

  • failed to verify signature: fetching keys oidc: get keys failed

Lorsque la requête JWKS elle-même échoue, le texte est « failed to verify signature: fetching keys oidc: get keys failed … », suivi de l’erreur HTTP ou réseau.

coreos/go-oidc (Go) — IDTokenVerifier.Verify with a RemoteKeySet

Ce que cela signifie

go-oidc a téléchargé le jeu de clés du fournisseur (en le récupérant une seconde fois si le `kid` était inconnu), et aucune clé publiée n’a vérifié la signature du jeton. go-oidc ne distingue pas « aucune clé avec ce kid » de « une clé avec ce kid, mais une signature incorrecte » : dans les deux cas, le jeton n’a pas été signé par une clé que ce fournisseur publie actuellement. Si le jeu de clés n’a pas pu être récupéré du tout, le message se poursuit plutôt par « fetching keys … ».

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Construire le vérificateur à partir de la découverte

    `provider.Verifier` utilise le `jwks_uri` du document de découverte du fournisseur ainsi que l’émetteur du fournisseur, ce qui élimine les URL configurées à la main comme source de non-concordance.

    go
    provider, err := oidc.NewProvider(ctx, "https://accounts.example.com") // discovery gives the right jwks_uri
    if err != nil {
    	return err
    }
    verifier := provider.Verifier(&oidc.Config{ClientID: clientID})
    idToken, err := verifier.Verify(ctx, rawIDToken)
  2. 2.

    Comparer le kid du jeton aux clés publiées

    Si le `kid` n’est pas publié, le jeton vient d’ailleurs ou le fournisseur n’a pas terminé une rotation. S’il est publié, la clé correspondante n’a pas signé ce jeton.

    bash
    # kid in the token header vs kids the provider publishes
    python3 -c 'import base64,json,sys; h=sys.argv[1].split(".")[0]; print(json.loads(base64.urlsafe_b64decode(h+"="*(-len(h)%4))))' "$ID_TOKEN"
    curl -s "$(curl -s https://accounts.example.com/.well-known/openid-configuration | jq -r .jwks_uri)" | jq '.keys[] | {kid, alg, kty}'

Erreurs associées

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