O Design de Princípios da Arquitetura Moderna da Web, de Roy T. Fielding e Richard N. Taylor , ou seja, a sequência de trabalhos de todas as terminologias REST, contém definição de interação cliente-servidor:
Todas as interações REST são sem estado . Ou seja, cada solicitação contém todas as informações necessárias para que um conector entenda a solicitação, independentemente de quaisquer solicitações que possam ter precedido .
Essa restrição realiza quatro funções, 1 e 3 são importantes neste caso específico:
- 1º : elimina a necessidade de os conectores manterem o estado do aplicativo entre as solicitações , reduzindo o consumo de recursos físicos e melhorando a escalabilidade;
- 3º : permite ao intermediário visualizar e entender uma solicitação isoladamente , o que pode ser necessário quando os serviços são reorganizados dinamicamente;
E agora vamos voltar ao seu caso de segurança. Cada solicitação deve conter todas as informações necessárias e a autorização / autenticação não é uma exceção. Como conseguir isso? Envie literalmente todas as informações necessárias pelos fios a cada solicitação.
Um dos exemplos de como arquivar isso é o código de autenticação de mensagens baseado em hash ou HMAC . Na prática, isso significa adicionar um código de hash da mensagem atual a cada solicitação. Código hash calculado pela função hash criptográfica em combinação com uma chave criptográfica secreta . A função de hash criptográfico é predefinida ou faz parte da concepção REST de código sob demanda (por exemplo, JavaScript). A chave criptográfica secreta deve ser fornecida pelo servidor ao cliente como recurso, e o cliente a utiliza para calcular o código de hash para cada solicitação.
Existem muitos exemplos de implementações do HMAC , mas eu gostaria que você prestasse atenção nos três seguintes:
Como funciona na prática
Se o cliente conhece a chave secreta, está pronto para operar com recursos. Caso contrário, ele será redirecionado temporariamente (código de status 307 Redirecionamento temporário) para autorizar e obter chave secreta e, em seguida, redirecionado de volta ao recurso original. Nesse caso, não é necessário saber de antemão (ou seja, código fixo em algum lugar) qual é o URL para autorizar o cliente e é possível ajustar esse esquema com o tempo.
Espero que isso ajude você a encontrar a solução adequada!