Acabei de ler este artigo, que tem alguns anos, mas descreve uma maneira inteligente de proteger suas APIs REST. Essencialmente:
- Cada cliente possui um par de chaves pública / privada exclusivo
- Somente o cliente e o servidor conhecem a chave privada; nunca é enviado por fio
- Com cada solicitação, o cliente obtém várias entradas (a solicitação inteira em si, o registro de data e hora atual e a chave privada) e as executa através de uma função HMAC para produzir um hash da solicitação
- O cliente envia a solicitação normal (que contém a chave pública) e o hash para o servidor
- O servidor procura a chave privada do cliente (com base na chave pública fornecida) e faz alguma verificação de carimbo de data / hora (que reconhecidamente não entendo) para verificar se a solicitação não é vítima de um ataque de repetição
- Se tudo estiver bem, o servidor utilizará a chave privada e a mesma função HMAC para gerar seu próprio hash da solicitação
- O servidor compara os dois hashes (o enviado pelo cliente e o gerado); se corresponderem, a solicitação será autenticada e permitida a continuação
Tropecei no JWT , o que parece muito semelhante. No entanto, o primeiro artigo não menciona o JWT e, portanto, estou me perguntando se o JWT é diferente da solução de autenticação acima e, em caso afirmativo, como.