Executando verificação de segurança...
2

Fala Dechamps!

Primeiro, é um prazer ver você comentando aqui na nossa solução, isso de verdade é um baita motivador para nós.

Vamos lá, sua pergunta foi excelente e trouxe uma questão muito importante para a mesa, aqui do nosso lado, já temos mapeado uma possível solução para esta questão e vamos nos inspirar no que o Stripe faz com a segurança dos webhooks deles.

Basicamente, para trazer esta garantia de que os endpoints só irão ser chamados pelo NextCron, nós vamos adotar nos próximos dias a estratégia de HMAC (Hash-based Message Authentication Code), ou seja, com essa técnica, o NextCron pode incluir um hash de autenticação na solicitação, que é calculado usando uma chave secreta compartilhada e os dados da solicitação. Em seguida, seu aplicativo pode verificar se o hash na solicitação corresponde ao hash esperado, usando a mesma chave secreta.

Desta forma, acreditamos que iremos assegurar o conteúdo da solicitação enviada pelo NextCron e os endpoints em si.

Para isso, vamos disponibilizar uma biblioteca que fará esta integração de forma bem simplificada.

O que você acha desta alternativa?

Carregando publicação patrocinada...
1

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 🤝

2

Pronto! Acabei de subir os updates aqui e implementamos a sua sugestão no NextCron. Agora, em toda a requisição você receberá o token fornecido da conta em um parametro do header.

Na documentação você pode conferir o resultado:
https://docs.nextcron.co/security/protecting-endpoints

Novamente, te agradeço muito pelo seu feedback e sugestão, sentiu falta de mais alguma coisa?

Estava pensando aqui, eu acredito muito nessa ferramenta resolvendo a dor do desenvolvedor, você toparia usar em algum projeto seu? Faz sentido?

Grande abraço

1

Simplesmente sensacional, que agilidade absurda 😍

Eu topo testar sim! Estou programando uma plataforma de curso, usando Next.js e Vercel e, por ter menos movimento, as lambdas são desalocadas e a conexão com o banco é descartada... e isso é custoso de subir de novo. Posso usar o cron para esquentar as lambdas?

1

Muito Feliz por ter gostado!

Vai ser um prazer ter você testando a nossa solução, temos grandes planos para ela.

Acredito que ela resolve este problema sim, inclusive utilizamos em outras duas plataformas SaaS que também estão na Vercel para resolver um problema parecido com o supabase.

Posso te chamar em outro lugar para continuarmos esta conversa?

1
1

Excelente sugestão!

No caso, entregariamos isso pronto na Lib do NextCron, assim como o Stripe faz.

Mas, desta forma que você falou faz muito sentido. Vou trazer esta solução agora mesmo e já complementar a documentação.