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
- Visão geral de extensibilidade
- Integrações outbound — como
integrations[].authé usado do ponto de vista de quem consome, não implementa, um provider de auth de saída.