Muito obrigado pela rápida resposta e acho essa alternativa ótima! Um detalhe é que, talvez isto deixaria a solução menos simples, pois o consumidor teria que implementar o cálculo do hash do lado dele. O Stripe já colocou isso dentro da lib deles, então nesse contexto fica fácil, pois a pessoa provavelmente já vai estar com essa lib instalada.
Talvez uma alternativa mais simples seja apenas enviar por cabeçalho uma chave que foi gerada por vocês (por exemplo, na criação da conta). Se eu tiver acesso a essa chave, basta eu colocar ela numa variável de ambiente do meu lado e fazer a conferência.
O último serviço que tive que usar dessa forma foi uma integração que fiz com a Hotmart. Eles disponibilizaram uma chave pelo painel deles, e num evento de webhook/callback eles mandam essa chave pelo cabeçalho. Isso não evita um replay attack (diferente do Stripe, que na assinatura tem um timer), mas é o suficiente, principalmente para a chamada de um cron. Faz sentido?
Se sim, sugiro primeiro implementar de forma simples e depois complicar se a demanda por isso se tornar uma realidade 🤝