ASP.NET Core - Implementando Json Web Tokens(JWT) - II


 Neste artigo veremos como implementar a autenticação JWT em aplicações ASP .NET Core.

Continuando a primeira parte do artigo vamos usar o token JWT gerado para implementar a segurança em outros recursos da nossa aplicação.

Criando uma WEB API Segura

Agora vamos criar um outra Web API que vai retornar informações de clientes. Para poder acessar as informações desta API o usuário terá que ter sido autenticado e possuir um token JWT.

Precisamos primeiro criar uma classe Cliente na pasta Models que será o nosso modelo de domínio com o código abaixo:

    public class Cliente
    {
        public int ClienteId { get; set; }
        public string Nome { get; set; }
        public string Email { get; set; }
    }

Ao solicitar acesso a API dos clientes o usuário terá que enviar o token JWT que será validado para fornecer ou não o acesso á API.

Vamos criar um controlador chamado ClientesController na pasta Controllers usando o template API Controller - Empty.

A seguir inclua o código abaixo neste controlador:

using AspCore_JWT.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
namespace AspCore_JWT.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ClientesController : ControllerBase
    {
        [Authorize]
        [HttpGet]
        public IActionResult GetClientes()
        {
            List<Cliente> clientes = new List<Cliente>();
            clientes.Add(new Cliente()
            {
                ClienteId = 1,
                Nome = "Macoratti",
                Email = "macoratti@yahoo.com"
            });
            clientes.Add(new Cliente()
            {
                ClienteId = 2,
                Nome = "Andre Lima",
                Email = "andrelima@uol.com.br"
            });
            clientes.Add(new Cliente()
            {
                ClienteId = 3,
                Nome = "Janete Siqueira",
                Email = "jansiqueira@hotmail.com"
            });
            return new ObjectResult(clientes);
        }
    }
}

Neste código definimos o método Action GetClientes() que cria informações para 3 clientes e retorna um ObjectResult com a lista de objetos Cliente.

Note que usamos o atributo Authorize no método Action GetClientes. Dessa forma somente usuários autenticados poderão acessar esse método.

Testando o acesso com o Postman

Para poder fazer o teste, vamos agora enviar uma requisição GET usando o Postman e enviar junto com a requisição no Header o token JWT.

Execute o projeto no VS 2017, a seguir inice o Postman.

1- Primeiro vamos tentar a acessar a API e retornar os dados dos clientes sem enviar o Token. Para isso informe os seguintes dados e clique no botão Send:

O resultado obtido será: 401 Unauthorized

2- Agora vamos acessar a API enviando o token. Para isso informe os seguintes dados e clique no botão Send:

Agora o resultado obtido será : a lista de objetos Cliente

Agora enviamos junto com o cabeçalho (Header) o Content-Type o Authorization (Token JWT).

Nota: Para adicionar o header de autorização, acesse a guia Headers e insira KEY como Authorization e VALUE como Bearer <string_token>. Observe que informamos bearer seguido por um espaço em branco, seguido pelo token real.

Nosso objetivo neste artigo foi implementar a autenticação usando token JWT, e, para simplificar o artigo não criamos uma interface com o usuário, mas apenas constamos se nossa implementação esta funcionando.

Brevemente vou implementar um projeto completo usando os recursos da autenticação JWT.

Pegue o projeto implementado aqui: AspCore_JWT2.zip (sem as referências)

"Não sejais vagarosos no cuidado; sede fervorosos no espírito, servindo ao Senhor;
Alegrai-vos na esperança, sede pacientes na tribulação, perseverai na oração;"
Romanos 12:11,12

Referências:


José Carlos Macoratti