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

Mensagem de erro

oidc: issuer URL provided to client ("https://accounts.example.com") did not match the issuer URL returned by provider ("https://accounts.example.com/")

Também aparece como

  • oidc: issuer did not match the issuer returned by provider, expected "https://accounts.example.com" got "https://accounts.example.com/"

As duas URLs entre aspas são o emissor que você configurou e o `issuer` do provedor. O go-oidc v3.0–v3.16 imprimia “oidc: issuer did not match the issuer returned by provider, expected \"…\" got \"…\"”; o texto atual e o tipo `IssuerMismatchError` chegaram na v3.17.0.

coreos/go-oidc (Go) — *oidc.IssuerMismatchError from oidc.NewProvider

O que significa

O `oidc.NewProvider` buscou o documento de descoberta na URL do emissor que você informou, e o campo `issuer` do documento não é exatamente essa URL. O OpenID Connect Discovery exige que as duas sejam idênticas, e o go-oidc impõe essa regra porque é com o valor de `issuer` que o `iss` de cada token de ID será comparado. A primeira URL entre aspas é a sua; a segunda, a do provedor.

Por que acontece

Como corrigir

  1. 1.

    Configurar a string exata do emissor

    Copie o `issuer` do documento de descoberta exatamente como está, incluindo o esquema, o caminho e a barra final.

    bash
    curl -s https://accounts.example.com/.well-known/openid-configuration | jq -r .issuer
    # use exactly this string in oidc.NewProvider(ctx, issuer)
  2. 2.

    Separar de propósito a URL de descoberta e o emissor

    O `oidc.InsecureIssuerURLContext` permite buscar o documento de descoberta em uma URL e validar os tokens com base no emissor público. Use-o só em configurações de split-horizon que você controla; o nome serve de lembrete do risco que você aceita.

    go
    // Only when discovery must be fetched from an internal address (for example inside Kubernetes)
    // while tokens carry the public issuer. The verifier still checks iss against the public value.
    ctx = oidc.InsecureIssuerURLContext(ctx, "https://login.example.com/realms/main")
    provider, err := oidc.NewProvider(ctx, "http://keycloak.auth.svc.cluster.local:8080/realms/main")

Erros relacionados

Ver toda a base de erros de assinatura