Continuando o artigo anterior, vamos agora testar a nossa implementação da segurança em uma Web API usando Tokens.
Na figura abaixo, vemos o esquema de funcionamento bem resumido do fluxo das informações:
Explicando:
Primeiro, temos que autenticar o usuário usando suas credencias e obter o token. Fazemos isso enviando um POST para o servidor usando a URI:
- http://servidor:XXX/token
A seguir, para cada requisição feita temos que enviar junto o token obtido para poder acessar a Web API. Fazemos isso enviando a requisição usando a URI.
- http://servidor:XXX/api/usuarios
Acessando a Web API
A primeira coisa que vamos fazer é verificar se a nossa Web API esta funcionando. Para isso, vamos executar o projeto e tentaremos acessar os recursos da nossa Web API usando o Postman.
Neste momento, nossa Web API ainda não está protegida e deve permitir o acesso total à todos os serviços.
Nota: Para instalar o Postman, acesse este link: https://www.getpostman.com/apps ou abra o Google Chrome, digite postman e clique no link: Postman – Chrome Web Store
1- GET – http://localhost:2480/api/funcionarios
2- GET – http://localhost:2480/api/funcionarios/3
3- POST – http://localhost:2480/api/funcionarios
4- PUT – http://localhost:2480/api/funcionarios/1010
5- DELETE – http://localhost:2480/api/funcionarios/1010
Vemos pelo resultado, que nossa Web API está totalmente funcional. mas não esta protegida, e assim, qualquer um pode enviar requisições, acessar e realizar as operações usando a Web API.
Protegendo a Web API
Vamos agora proteger a nossa Web API de forma que somente usuários que possuam o token de acesso possam acessar nossa Web API.
Fazer isso é bem simples; basta incluir no controlador FuncionariosController o atributo [Authorize] conforme mostrado a seguir:
Agora vamos executar o projeto e tentar enviar uma requisição para acessar a Web API.
Tentaremos obter a lista de funcionários enviando um GET: http://localhost:2840/api/funcionarios.
Veja que a reposta obtida, foi: 401 Unauthorized, ou seja, usuários anônimos não têm mais acesso à Web API. Qualquer outra requisição irá obter o mesmo resultado.
Obtendo um token de acesso
Como podemos acessar a nossa Web API?
Simples; vamos usar a implementação feita no artigo anterior e obter um token de acesso usando a classe FuncionariosSeguranca que autentica as credenciais do usuário.
Para isso, temos que enviar uma requisição posta para URI: http://localhost:2480/token e informar as credenciais do usuário e o tipo de acesso no corpo do request.
Precisamos passar três informações no Body:
- username: nome do usuário
- password: senha do usuário
- grant_type: tipo de acesso
Veja no Postman como fica o request:
Repare que no response temos o token de acesso gerado, o tipo do token e a data de expiração do token. Agora podemos usar o token gerado para poder acessar a nossa Web API enviando esse token em uma requisição.
Vamos tentar acessar novamente nossa Web API, agora usando o token:
A requisição deve informar o verbo HTTP GET e a url: http://localhost:2480/api/funcionarios e no Header, informar:
Authorization bearer
l9RoaczivJ4tYhxU2WGBDLVQvXoO3JNXxBgokEeU9ZxqXM3sAo77zleKhNTrfQXjhRowulSsxotvznQke0BaBt0MrwFbLuKowiPMTN8wfxT2xSeYkucqXqCBGMvUXfnjeudxOSym00EsqoFQ9DegxwcKoYqPLpxBjUaIbaVW5zAEPYjlsivlM_PvvYEdKN4kd1ij5BY-ZV5Im3JI6nMFR2HMBa_raM7jDC4ks9SZFs
Veja o resultado abaixo:
Vemos que agora, após enviar o token gerado com a requisição, o usuário para quem o token foi gerado já pode acessar a nossa web api.
Concluindo
Criamos uma WEB API, implementamos a segurança via Token e acessamos a Web API usando o token.
Pegue o projeto completo no link abaixo:
- FuncionariosAPIService_Token.zip (sem as referências).