github.com/golang-jwt/jwt/v5 analyse, valide et signe des JWT avec les clés de la bibliothèque standard : []byte pour HMAC, *rsa.PublicKey, *ecdsa.PublicKey et ed25519.PublicKey. La 5.3.1 a signé et vérifié les familles HS, RS, PS et ES ainsi qu’EdDSA ; ES256K et les noms entièrement spécifiés Ed25519 et Ed448 n’ont aucune méthode de signature enregistrée.
La vérification repose sur la keyfunc que vous passez à jwt.Parse. Chaque méthode de signature contrôle le type Go de la clé qu’elle reçoit : avec une keyfunc qui renvoie *ecdsa.PublicKey, un jeton RS256 a échoué avec RSA verify expects *rsa.PublicKey et un jeton HS256 dont la clé HMAC était le texte PEM a échoué avec HMAC verify expects []byte. Cette protection disparaît si la keyfunc renvoie des octets bruts pour chaque jeton : lors des essais, une keyfunc qui charge le fichier PEM en []byte a permis à ce jeton HS256 falsifié de passer la vérification. Passez jwt.WithValidMethods avec l’algorithme exact et gardez une keyfunc typée, comme le fait l’exemple.
alg: none ne passe la vérification que lorsque la keyfunc renvoie la sentinelle jwt.UnsafeAllowNoneSignatureType ; toute vraie clé donne 'none' signature type is not allowed. ES256 refuse une clé P-384 à la signature avec un laconique key is invalid. Les signatures ES256 sont au format r‖s brut de 64 octets qu’exige JWS ; une signature DER échoue avec crypto/ecdsa: verification error, une erreur que le débogueur JWT et le convertisseur DER ⇄ brut aident à diagnostiquer.
La validation des claims est active par défaut dans la v5, mais exp est facultatif (un jeton qui n’en a pas reste valide indéfiniment) et il n’y a aucune marge de tolérance. jwt.WithExpirationRequired(), jwt.WithIssuer, jwt.WithAudience et jwt.WithLeeway comblent ces lacunes ; les erreurs peuvent être identifiées avec errors.Is(err, jwt.ErrTokenExpired) plutôt qu’en comparant des chaînes.
Pour vérifier les jetons d’un fournisseur d’identité, associez golang-jwt à un client JWKS et contrôlez ce que publie le fournisseur avec le vérificateur JWKS ; go-jose est l’alternative lorsqu’il faut gérer JWE ou JWK.