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

Fehlermeldung

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

Auch ausgegeben als

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

Die beiden URLs in Anführungszeichen sind dein konfigurierter Aussteller und der `issuer` des Providers. go-oidc v3.0–v3.16 gab „oidc: issuer did not match the issuer returned by provider, expected \"…\" got \"…\"“ aus; der aktuelle Wortlaut und der Typ `IssuerMismatchError` kamen mit v3.17.0.

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

Was der Fehler bedeutet

`oidc.NewProvider` hat das Discovery-Dokument von der Aussteller-URL abgerufen, die du übergeben hast, und das Feld `issuer` des Dokuments entspricht nicht exakt dieser URL. OpenID Connect Discovery verlangt, dass beide identisch sind, und go-oidc setzt das durch, weil der Claim `iss` jedes ID-Tokens mit dem Wert von `issuer` verglichen wird. Die erste URL in Anführungszeichen ist deine, die zweite die des Providers.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Exakten Aussteller-String konfigurieren

    Kopiere `issuer` wörtlich aus dem Discovery-Dokument, einschließlich Schema, Pfad und Schrägstrich am Ende.

    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.

    Discovery-URL und Aussteller bewusst trennen

    Mit `oidc.InsecureIssuerURLContext` rufst du die Discovery von einer URL ab, während Tokens gegen den öffentlichen Aussteller validiert werden. Verwende das nur für Split-Horizon-Setups, die du selbst verwaltest; der Name erinnert an den Kompromiss.

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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen