Zum Inhalt springen
ecdsa.com
coreos/go-oidc (Go)Go

Fehlermeldung

oidc: malformed jwt: unexpected signature algorithm "ES256"; expected ["RS256"]

Auch ausgegeben als

  • oidc: id token signed with unsupported algorithm, expected ["RS256"] got "ES256"

go-oidc v3.0–v3.5 prüfte den Algorithmus nach dem Parsen und formulierte es als „oidc: id token signed with unsupported algorithm, expected [\"RS256\"] got \"ES256\"“; spätere Releases (geprüft mit v3.10, v3.14, v3.17 und v3.21) lehnen ihn schon beim Parsen ab, daher „malformed jwt“.

coreos/go-oidc (Go) — IDTokenVerifier.Verify with the default SupportedSigningAlgs

Was der Fehler bedeutet

Das ID-Token ist mit einem Algorithmus signiert, der nicht in `SupportedSigningAlgs` des Verifiers steht. Ist diese Liste leer und wurde der Verifier nicht aus einem per Discovery ermittelten Provider erzeugt, fällt go-oidc auf RS256 als einzigen Algorithmus zurück – den Standard, den die Spezifikation von OpenID Connect vorschreibt –, deshalb wird jedes Token mit ES256, PS256 oder EdDSA abgelehnt, bevor seine Signatur geprüft wird. go-oidc meldet das als „malformed jwt“, weil die Prüfung schon beim Parsen der JWS stattfindet.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Algorithmus des Providers explizit angeben

    Setze `SupportedSigningAlgs` auf den oder die Algorithmen, die der Provider verwendet. Halte die Liste kurz; sie ist eine Allowlist.

    go
    verifier := oidc.NewVerifier(issuer, keySet, &oidc.Config{
    	ClientID:             clientID,
    	SupportedSigningAlgs: []string{oidc.ES256}, // what the provider actually signs with
    })
  2. 2.

    Algorithmen aus der Discovery übernehmen

    `provider.Verifier` liest die unterstützten Algorithmen aus den Metadaten des Providers, sodass nichts von Hand synchron gehalten werden muss.

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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen