Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Segurança API Externa <--> APP

Qual seria o método recomendado para permitir que apenas a aplicação Ionic pudesse mandar requisições para a API externa que a alimenta?

Imagine um APP de compras que um POST para /compras/compra cria uma nova compra e um PUT atualiza aquela compra liberando a mesma para entrega. Como garantir que apenas o APP possa realizar esta alteração, já que o mesmo pode ser acessado por diversos outros Ips externos, etc. Como impedir que o app seja depurado, as rotas da API externas descobertas e que qualquer usuário malicioso consiga fazer essas requisições?

Access-Control-Allow-Origin não iria funcionar, afinal o mesmo opera apenas em contexto de páginas.

Talvez alguma lógica com chaves que alterem-se igualmente tanto no APP quanto na API poderia resolver, já que mesmo que a lógica fosse interceptada o usuário malicioso não teria acesso por muito tempo.

Alguma ideia?

2 respostas

Oi Ian,

Nesse caso não tem como deixar a API "invisível" para o mundo, pois ela precisa estar disponivel via HTTP para ser acessada pela APP.

O jeito então é limitar o acesso, deixando apenas acessar quem tiver permissão.

O mais comum no mercado é utilizar JWT (Json Web Token) para controle de autorização de acesso: https://jwt.io/

A ideia é que toda requisição feita à API leve junto um token que será validado e se estiver ok, o acesso ao recurso é liberado.

Dá uma pesquisada a respeito. O JWT é suportado em praticamente todas as linguagens/plataformas.

solução!

Boa tarde, Ian! Como vai?

Fora o que o Rodrigo já falou sobre o JWT, pra complementar, eu indicaria vc usar HTTPS pq ele já vai acrescentar mais segurança na sua comunicação entre API e aplicativo.

Além disso, não tem como vc impedir que o aplicativo seja depurado e outras pessoas descubram as URLs da sua API! Vc pode aplicar processos de uglifying, mas mesmo assim a engenharia reversa está aí e com ela é possível quebrar esse tipo de processo! Então aqui, voltamos ao ponto inicial que é utilizar o JWT + HTTPS e só aceitar requisições de usuários autenticados com tokens válidos.

Nesse artigo, em inglês, há uma discussão maior sobre esse assunto!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!