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

Fehlermeldung

oidc: expected audience "api-client" got ["web-client"]

coreos/go-oidc (Go) — IDTokenVerifier.Verify

Was der Fehler bedeutet

Das ID-Token ist vom richtigen Provider signiert, aber sein Claim `aud` enthält nicht die `ClientID`, die du in `oidc.Config` konfiguriert hast. go-oidc setzt die Regel von OpenID Connect um, nach der ein ID-Token nur für den Client gültig ist, für den es ausgestellt wurde; der erste Wert in Anführungszeichen ist deine `ClientID`, die Liste enthält die Audiences des Tokens.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Client-ID der App verwenden, die den Nutzer angemeldet hat

    Konfiguriere für ID-Tokens genau die Client-ID, für die das Token ausgestellt wurde.

    go
    verifier := provider.Verifier(&oidc.Config{
    	ClientID: os.Getenv("OIDC_CLIENT_ID"), // the client the user signed in to; must equal the token's aud
    })
    idToken, err := verifier.Verify(ctx, rawIDToken)
  2. 2.

    Bei Access Tokens für APIs die Audience der API selbst prüfen

    `SkipClientIDCheck` schaltet nur den eingebauten Vergleich mit der Client-ID ab. Ersetze ihn durch eine explizite Prüfung auf den Bezeichner deiner API – überspringe die Prüfung der Audience nie ganz.

    go
    // Verifying a JWT access token for an API: check signature/issuer/expiry here,
    // then check the API audience yourself.
    verifier := provider.Verifier(&oidc.Config{SkipClientIDCheck: true})
    tok, err := verifier.Verify(ctx, rawAccessToken)
    if err != nil {
    	return err
    }
    if !slices.Contains(tok.Audience, "https://api.example.com") {
    	return errors.New("token not issued for this API")
    }

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen