Guia — IOutboundAuthProvider

Autenticação para integrações de saída (chamadas http.call/grpc.call), ativada por scheme: na configuração de auth de um recurso de spec.integrations.

Exemplo mínimo (API key estática)

using Pipevine.Core.Configuration;
using Pipevine.Model.Auth;
using Pipevine.Security.Abstractions;
using Pipevine.Security.Abstractions.Secrets;

public sealed class AcmeApiKeyOutboundAuthProvider(ISecretResolverRegistry secretResolvers) : IOutboundAuthProvider
{
    public async ValueTask ApplyAsync(HttpRequestMessage request, AuthSchemeDefinition definition, CancellationToken ct)
    {
        var config = PipevineNodeJsonConverter.ToJsonNode(definition.Config);
        var keyRef = config?["apiKey"]?.GetValue<string>()
            ?? throw new InvalidOperationException($"Scheme '{definition.Id}': requer 'apiKey'.");

        var apiKey = (await SecretReference.ResolveIfReferenceAsync(keyRef, secretResolvers, ct).ConfigureAwait(false))!;
        request.Headers.Add("X-Api-Key", apiKey);
    }
}

Para um esquema com token que expira (OAuth2 client credentials, por exemplo), cacheie o token por definition.Id e renove antes do vencimento — a implementação de referência de oauth2-client-credentials faz exatamente isso (cache com um lock por esquema, renovação antecipada configurável).

Ativação

spec:
  integrations:
    - id: partner-api
      kind: http
      baseUrl: "https://partner.example.com"
      auth: { scheme: acme-apikey, ref: partner-key }
  auth:
    schemes:
      - { id: partner-key, scheme: acme-apikey, apiKey: "${secret:env:PARTNER_API_KEY}" }
services.AddKeyedSingleton<IOutboundAuthProvider, AcmeApiKeyOutboundAuthProvider>("acme-apikey");

Por convenção, um esquema de auth que serve os dois sentidos (entrada e saída) vive no mesmo pacote: o pacote de JWT do core traz tanto o IInboundAuthScheme quanto o IOutboundAuthProvider de JWT juntos.

Para onde ir daqui