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

Mensagem de erro

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

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

O que significa

O token de ID foi assinado pelo provedor certo, mas a claim `aud` dele não contém o `ClientID` que você configurou em `oidc.Config`. O go-oidc implementa a regra do OpenID Connect segundo a qual um token de ID só é válido para o cliente para o qual foi emitido; o primeiro valor entre aspas é o seu `ClientID`, e a lista traz os públicos-alvo do token.

Por que acontece

Como corrigir

  1. 1.

    Usar o ID do cliente do aplicativo em que o usuário fez login

    Para tokens de ID, configure exatamente o ID do cliente para o qual o token foi emitido.

    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 tokens de acesso de API, verificar por conta própria o público-alvo da API

    O `SkipClientIDCheck` só desativa a comparação embutida com o ID do cliente. Substitua-a por uma verificação explícita do identificador da sua API — nunca abra mão completamente da validação do público-alvo.

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

Erros relacionados

Ver toda a base de erros de assinatura