Saltar al contenido
ecdsa.com
coreos/go-oidc (Go)Go

Mensaje de error

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

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

Qué significa

El token de ID está firmado por el proveedor correcto, pero su claim `aud` no contiene el `ClientID` configurado en `oidc.Config`. go-oidc aplica la regla de OpenID Connect según la cual un token de ID solo es válido para el cliente al que se emitió; el primer valor entre comillas es tu `ClientID`, y la lista son las audiencias del token.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Usar el ID de cliente de la aplicación con la que inició sesión el usuario

    Para los tokens de ID, configura exactamente el ID de cliente para el que se emitió el token.

    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.

    Para los tokens de acceso de una API, comprobar por tu cuenta la audiencia de la API

    `SkipClientIDCheck` solo desactiva la comparación integrada del ID de cliente. Sustitúyela por una comprobación explícita del identificador de tu API; nunca omitas por completo la validación de la audiencia.

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

Errores relacionados

Explorar toda la base de datos de errores de firma