Visão geral:
Minha empresa desenvolveu uma API de taxa limitada. Nosso objetivo é duplo:
- R: Crie um ecossistema de desenvolvedor forte em torno de nosso produto.
- B: Demonstre o poder de nossa API usando-a para conduzir nosso próprio aplicativo.
Esclarecimento: Por que limite de taxa?
Limitamos nossa taxa de API, porque a vendemos como um complemento ao nosso produto. O acesso anônimo à nossa API tem um limite muito baixo para chamadas de API por hora, enquanto nossos clientes pagos têm permissão para mais de 1000 chamadas por hora ou mais.
O problema:
Nossa API de taxa limitada é ótima para o ecossistema do desenvolvedor, mas para que possamos aplicá-la em dogfood, não podemos permitir que seja restrita à mesma limitação de taxa. O front-end de nossa API é todo em JavaScript, fazendo chamadas Ajax diretas para a API.
Portanto, a questão é:
Como você protege uma API de modo que a limitação de taxa possa ser removida onde, no processo, a remoção dessa limitação de taxa não pode ser facilmente falsificada?
Soluções exploradas (e por que não funcionaram)
Verifique o referenciador em relação ao cabeçalho do host. - Falha porque o referenciador é facilmente falsificado.
Use um HMAC para criar uma assinatura com base na solicitação e um segredo compartilhado e, em seguida, verifique a solicitação no servidor. - Falha porque o segredo e o algoritmo seriam facilmente determinados examinando o JavaScript de front end.
Proceda à solicitação e assine a solicitação no proxy - Ainda falho, pois o próprio proxy expõe a API.
A questão:
Estou pensando nas mentes brilhantes do Stack Overflow para apresentar soluções alternativas. Como resolveria este problema?