Aller au contenu
ecdsa.com
go-jose (Go)Go

Message d’erreur

go-jose/go-jose: error in cryptographic primitive

Également affiché sous la forme

  • square/go-jose: error in cryptographic primitive

go-jose v2 (importé sous gopkg.in/square/go-jose.v2) utilisait le préfixe « square/go-jose: » ; les versions v3 et v4 utilisent « go-jose/go-jose: ». La même erreur est renvoyée pour les échecs de déchiffrement JWE.

go-jose (Go) — jose.ErrCryptoFailure from JSONWebSignature.Verify / jwt.JSONWebToken.Claims

Ce que cela signifie

L’échec générique de signature (ou de déchiffrement) de go-jose, `jose.ErrCryptoFailure`. Le JWS a été analysé et l’algorithme était autorisé, mais la vérification de la signature avec la clé fournie a échoué. go-jose n’en dit volontairement pas plus – pour un vérificateur, une mauvaise clé et un jeton modifié se ressemblent –, si bien que l’enquête revient toujours à ceci : quelle clé avez-vous fournie, et le jeton a-t-il été modifié ?

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Sélectionner la clé par kid, puis valider les claims

    Résolvez exactement une clé à partir du `kid` de l’en-tête dans le JWKS de l’émetteur, vérifiez la signature, puis validez `iss`, `aud` et `exp` avec `Claims.Validate` : go-jose ne vérifie pas les claims de lui-même.

    go
    // keys: *jose.JSONWebKeySet fetched from the issuer's jwks_uri
    parsed, err := jwt.ParseSigned(raw, []jose.SignatureAlgorithm{jose.ES256})
    if err != nil {
    	return err
    }
    kid := parsed.Headers[0].KeyID
    matches := keys.Key(kid) // all keys with this kid
    if len(matches) != 1 {
    	return fmt.Errorf("no unique key for kid %q", kid)
    }
    var claims jwt.Claims
    if err := parsed.Claims(matches[0].Key, &claims); err != nil {
    	return err
    }
    return claims.Validate(jwt.Expected{Issuer: "https://issuer.example.com/", AnyAudience: jwt.Audience{"api"}, Time: time.Now()})

Erreurs associées

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