Перейти к содержимому
ecdsa.com
coreos/go-oidc (Go)Go

Сообщение об ошибке

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

Также выводится как

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

go-oidc v3.0–v3.5 проверяла алгоритм после разбора и формулировала ошибку так: «oidc: id token signed with unsupported algorithm, expected [\"RS256\"] got \"ES256\"»; более поздние версии (проверено на v3.10, v3.14, v3.17 и v3.21) отклоняют токен ещё при разборе, отсюда «malformed jwt».

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

Что это означает

ID-токен подписан алгоритмом, которого нет в `SupportedSigningAlgs` объекта проверки. Если этот список пуст, а объект проверки создан не из провайдера, полученного через документ обнаружения, go-oidc принимает только RS256 (это значение по умолчанию предписывает спецификация OpenID Connect), поэтому любой токен ES256, PS256 или EdDSA отклоняется ещё до проверки подписи. go-oidc сообщает об этом как о «malformed jwt», потому что проверка происходит при разборе JWS.

Почему это происходит

Как исправить

  1. 1.

    Явно укажите алгоритм провайдера

    Задайте в `SupportedSigningAlgs` алгоритм или алгоритмы, которые использует провайдер. Не раздувайте список: это список разрешённых алгоритмов.

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

    Берите алгоритмы из документа обнаружения

    `provider.Verifier` читает поддерживаемые алгоритмы из метаданных провайдера, поэтому ничего не нужно синхронизировать вручную.

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

Связанные ошибки

Открыть всю базу ошибок подписей