6
respostas

Como proteger o usuário e senha utilizados em uma requisição $http.get para uma api com Authorize?

Tenho uma api que utiliza token para autenticação em suas actions. Para obter um token, se faz necessária a passagem de usuário e senha do lado cliente, onde o mesmo receberá um token de utilização. O problema é que o meu cliente por ser um javascript (Angular JS) por exemplo, não consegue proteger esse usuário e senha que serão utilizados no consuma da api. Ex: Existe uma api que forncece informações sobre produtos de limpeza e a mesma possui autenticação. Quero criar um formulário simples em Angular JS para consumir essa api e apresentar os produtos consultados. Para utilizar o formulário, o usuário não precisa se autenticar(Como se fosse uma busca no google) . Para receber um token da api preciso passar o usuário e a senha da seguinte forma:

var data = "grant_type=password&username=" + userName + "&password=" + password;

$http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })...

Minha dúvida está em como eu posso proteger os dados de usuário e senha, uma vez que o javascript não é compilado. Já tentei minificar, porém não funcionou pois basta utilizar a ferramenta de desenv do browser e os dados são localizados facilmente. Existe alguma forma de criptografar essas informações?

Poderiam me ajudar, por favor?

Obrigado.

6 respostas

Na prática não se encripta essas informações, o que é encriptado é a conexão com o servidor que deve ser https e não http. Por padrão, em uma conexão https todo o fluxo é criptografado e não há como alguém obter as credenciais durante o envio. Aliás, hoje em dia é tudo https, não conheço ninguém mais que crie aplicações utilizado http (olhe o link do site da Alura, é https). É bem provável que você já esteja usando https e se for, não tem o que se preocupar.

Flávio, boa tarde. Entendi a sua explicação,porém, não me ajudou muito.

Conheço um site que foi desenvolvido em angularjs onde seus arquivos estão divididos em pastas de controllers e services. Essa aplicação consome uma web api que utiliza token. Esse site está hospedado em https. Com a ajuda da ferramenta de desenvolvedor do browser, eu consegui localizar o usuario e a senha, obter um token e consumir um serviço usando o postman. Esse foi o problema que eu havia relatado.

Você esta dizendo que o usuário e senha estão fixos no código do programa? Olha, se for isso, acho difícil você encontrar uma solução.

Pois é, eu também acho muito difícil. O André Baltieri tem um artigo sobre o consumo de web api com angularjs usando token e nesse artigo ele também mantém o usuário e senha fixos no código. Por esse motivo, mudei a forma de utilização e passei a habilitar em minha api, o cors de acesso apenas para um determinado domínio. Dessa forma não tenho mais token e consigo limitar o acesso a api. O problema dessa habilitação via cors é que não consigo disponibilizar a api para ser consumida por um app mobile por exemplo. Estou revendo os meus conceitos de front-end quanto a utilização de usuário e senha para consumo de api's. No momento estou usando Asp Net MVC pois o mesmo é compilado e dessa maneira, as credências de acesso e as rotas da api, ficam escondidos.

De qualquer forma muito obrigado pela ajuda e parabéns pelos cursos ministrados.

Bom, essa parte de token a qual você refere, no segundo curso de Angular 6 da Alura, eu falo sobre autenticação com token. Por mais que você esteja utilizando o Angularjs (Angular 1.X), talvez seja legal dar uma olhada na explicação dessa aula, no conceito de autenticação por token, mesmo que seja 2X para pegar o conceito.

Já no curso MEAN da Alura, eu uso AngularJS e faço autenticação com token também, talvez dar uma olhadinha nele não fará mal algum.

Torço para que ajude!

Farei os cursos com certeza.

Mais uma vez, muito obrigado.