Aller au contenu
ecdsa.com
coreos/go-oidc (Go)Go

Message d’erreur

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

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

Ce que cela signifie

Le jeton d’ID est signé par le bon fournisseur, mais son claim `aud` ne contient pas le `ClientID` que vous avez configuré dans `oidc.Config`. go-oidc applique la règle d’OpenID Connect selon laquelle un jeton d’ID n’est valide que pour le client auquel il a été émis ; la première valeur entre guillemets est votre `ClientID`, la liste contient les audiences du jeton.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Utiliser l’ID client de l’application qui a connecté l’utilisateur

    Pour les jetons d’ID, configurez exactement l’ID client pour lequel le jeton a été émis.

    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.

    Jetons d’accès d’API : vérifier vous-même l’audience de l’API

    `SkipClientIDCheck` désactive uniquement la comparaison intégrée de l’ID client. Remplacez-la par une vérification explicite de l’identifiant de votre API ; ne renoncez jamais complètement à la validation de l’audience.

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

Erreurs associées

Parcourir toute la base de données des erreurs de signature