github.com/golang-jwt/jwt/v5 parst, validiert und signiert JWTs mit den Schlüsseltypen der Standardbibliothek: []byte für HMAC, *rsa.PublicKey, *ecdsa.PublicKey und ed25519.PublicKey. In 5.3.1 funktionierten Signieren und Prüfen mit den Familien HS, RS, PS und ES sowie mit EdDSA; für ES256K und die vollständig spezifizierten Namen Ed25519 und Ed448 ist keine Signaturmethode registriert.
Ob die Prüfung greift, hängt von der Keyfunc ab, die du an jwt.Parse übergibst. Jede Signaturmethode prüft den Go-Typ des Schlüssels, den sie erhält: Mit einer Keyfunc, die *ecdsa.PublicKey zurückgibt, scheiterte ein RS256-Token mit RSA verify expects *rsa.PublicKey und ein HS256-Token mit dem PEM-Text als Schlüssel mit HMAC verify expects []byte. Der Schutz verschwindet, wenn die Keyfunc für jedes Token rohe Bytes zurückgibt – mit einer Keyfunc, die die PEM-Datei als []byte lädt, bestand dieses gefälschte HS256-Token die Prüfung. Übergib jwt.WithValidMethods mit genau dem Algorithmus und sorge dafür, dass die Keyfunc typisierte Schlüssel zurückgibt, wie es das Beispiel tut.
Ein Token mit alg: none besteht die Prüfung nur, wenn die Keyfunc den Sentinel-Wert jwt.UnsafeAllowNoneSignatureType zurückgibt; jeder echte Schlüssel führt zu 'none' signature type is not allowed. ES256 lehnt einen P-384-Schlüssel schon beim Signieren mit einem knappen key is invalid ab. ES256-Signaturen sind das 64 Byte lange rohe r‖s, das JWS verlangt; eine DER-Signatur scheitert mit crypto/ecdsa: verification error – diesen Fehler aufzuspüren helfen der JWT-Debugger und der Konverter DER ⇄ Raw.
In v5 ist die Validierung der Claims standardmäßig aktiv, aber exp ist optional – ein Token ohne diesen Claim ist für immer gültig –, und es gibt keine Toleranz (Leeway). jwt.WithExpirationRequired(), jwt.WithIssuer, jwt.WithAudience und jwt.WithLeeway schließen diese Lücken; Fehler lassen sich mit errors.Is(err, jwt.ErrTokenExpired) erkennen, statt Strings zu vergleichen.
Um Tokens eines Identity Providers zu prüfen, kombiniere golang-jwt mit einem JWKS-Client und prüfe mit dem JWKS-Checker, was der Anbieter veröffentlicht; go-jose ist die Alternative, wenn du JWE oder JWK verarbeiten musst.