Pular para o conteúdo
ecdsa.com
coreos/go-oidc (Go)Go

Mensagem de erro

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

Também aparece como

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

O go-oidc v3.0–v3.5 verificava o algoritmo depois da análise e formulava a mensagem como “oidc: id token signed with unsupported algorithm, expected [\"RS256\"] got \"ES256\"”; versões posteriores (verificadas na v3.10, v3.14, v3.17 e v3.21) rejeitam o token durante a análise, daí o “malformed jwt”.

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

O que significa

O token de ID foi assinado com um algoritmo que não está em `SupportedSigningAlgs` do verificador. Quando essa lista está vazia e o verificador não foi criado a partir de um provedor descoberto, o go-oidc recorre apenas ao RS256 — o padrão que a especificação do OpenID Connect exige — e, assim, qualquer token ES256, PS256 ou EdDSA é rejeitado antes que a assinatura seja verificada. O go-oidc relata isso como “malformed jwt” porque a verificação acontece durante a análise do JWS.

Por que acontece

Como corrigir

  1. 1.

    Listar explicitamente o algoritmo do provedor

    Defina `SupportedSigningAlgs` com o algoritmo (ou os algoritmos) que o provedor usa. Mantenha a lista curta: ela é uma lista de algoritmos permitidos.

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

    Deixar que a descoberta forneça os algoritmos

    O `provider.Verifier` lê os algoritmos aceitos nos metadados do provedor, então nada precisa ser sincronizado à mão.

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

Erros relacionados

Ver toda a base de erros de assinatura