Saltar al contenido
ecdsa.com
coreos/go-oidc (Go)Go

Mensaje de error

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

También se muestra como

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

go-oidc v3.0–v3.5 comprobaba el algoritmo después del análisis y lo formulaba como «oidc: id token signed with unsupported algorithm, expected [\"RS256\"] got \"ES256\"»; las versiones posteriores (comprobado en v3.10, v3.14, v3.17 y v3.21) lo rechazan durante el análisis, de ahí «malformed jwt».

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

Qué significa

El token de ID está firmado con un algoritmo que no figura en el `SupportedSigningAlgs` del verificador. Cuando esa lista está vacía y el verificador no se creó a partir de un proveedor descubierto, go-oidc recurre solo a RS256 —el valor predeterminado que exige la especificación de OpenID Connect—, así que cualquier token ES256, PS256 o EdDSA se rechaza antes de comprobar su firma. go-oidc lo notifica como «malformed jwt» porque la comprobación ocurre mientras analiza el JWS.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Indicar explícitamente el algoritmo del proveedor

    Asigna a `SupportedSigningAlgs` el algoritmo o los algoritmos que usa el proveedor. Mantén la lista corta: es una lista de permitidos.

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

    Dejar que el descubrimiento proporcione los algoritmos

    `provider.Verifier` lee los algoritmos admitidos de los metadatos del proveedor, así que no hay nada que mantener sincronizado a mano.

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

Errores relacionados

Explorar toda la base de datos de errores de firma