Advertisement
  1. Code
  2. Laravel

Como Proteger uma API REST com Lumen

by
Read Time:6 minsLanguages:

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Lumen é o irmão mais novo do Larvel: uma micro-framework rápida e leve para criar APIs RESTful. Com um pouco de código, podemos usar o Lumen para criar uma API RESTful segura e extremamente rápida.

Nesse tutorial em vídeo do curso Crie uma API REST com Lumen aprenderemos como usar o mediador integrado do Lumen para proteger uma API REST.

O vídeo refere-se a códigos da API da loja de música exemplo que criamos nas lições iniciais do curso. Pode-se ver o código completo do curso no GitHub.

Como Proteger um API REST com Lumen

Autenticação no Lumen

Segurança é uma parte muito importante, não só de APIs web, mas aplicações. E, infelizmente, implementar autenticação pode ser difícil. Mas, felizmente, autenticação já vem integrada no Lumen. Só precisamos habilitá-la, depois escrever algumas linhas de código para autenticar um usuário e algumas outras linhas para proteger aquilo que precisamos proteger.

No nosso exemplo, queremos proteger três métodos no nosso controlador guitar. São o create, update e delete. Coisas que apenas usuários autenticados deveriam acessar.

guitar controllerguitar controllerguitar controller

Então, comecemos indo à pasta boostrap e abramos app.php.

appphpappphpappphp

Há duas declarações que precisamos descomentar. A primeira é a chamada a routeMiddleware, que configurará o mediador de autenticação. Também queremos registrar nosso provedor de serviço de atenticação. Assim, a segunda declaração é $app->register(App\Providers\AuthServiceProvider::class); Ao descomentar as duas linhas, já podemos usar autenticação na nossa aplicação.

Agora, queremos tomar nota do mediador de autenticação. Então abramos App\Http\Middleware\Authenticate.php e dentro da classe haverá um método, handle, que será executado antes dos métodos protegidos.

handle methodhandle methodhandle method

Assim, toda vez que fizermos uma requisição para create, update ou delete, o mediador de autenticação será usado e o método handle entrará em ação.

Se o usuário não for autenticado, será retornado erro 401. Caso contrário, passará a requisição para a próxima coisa que a processará.

Essa é uma das coisas que precisávamos olhar. A outra é dentro do diretório Providers e o AuthServiceProvider.php.

AuthServiceProviderAuthServiceProviderAuthServiceProvider

Ao final do arquivo há um método, boot, e dentro dele é invocado o método viaRequest. E esse é o método, realmente, o responsável pela autenticação do usuário. Logo, ele dependerá de nossa implementação. E nessa lição, a implementação será bem simples.

O que faremos é verificar um cabeçalho chamado Api-Token. E se for valor X, podemos dizer que o usuário está autenticado. Para dizer que ele está autenticado, devemos retornar uma instância de usuário. Se retornarmos null, quer dizer que não está autenticado.

Então, escrevamos o código. Comentemos o código existente... A primeira coisa a fazer é obter o cabeçalho Api-Tooken. Então usaremos nossa requisição e invocaremos o método header para buscar o cabeçalho Api-Token.

Isso não é seguro. Deveríamos salvar os usuários em uma base de dados. Cada um deveria ter seu próprio token único e deveríamos trabalhar com chaves públicas e privadas. Mas deixaremos esses detalhes para você implementar. O que queremos ver é como o mediador de autenticação encaixa em nossa aplicação para podermos fazê-lo funcionar e, então, implementarmos o que quisermos.

Então, obteremos esse cabeçalho Api-Token. Mas, primeiro, devemos checar se temos algumas coisa lá.

code to check to see if we have something therecode to check to see if we have something therecode to check to see if we have something there

Agora, a outra coisa que precisamos fazer é dizer onde queremos usar o mediador de autenticação. Podemos fazê-lo em vários lugares.

O primeiro é sempre que definirmos uma rota. Por exemplo, queremos proteger a requisição post. Ao invés de escrevermos uma rota como antes, agora ficaria assim. Essencialmente a mesma coisa, mas o segundo argumento passado para o método post terá duas chaves e valores.

Sem fazer mais nada, podemos ir ao Fiddler, realizar algumas requisições post e ver se estariam protegidas.

Agora, uma das coisas boas do Fiddler é manter registro de todas requisições feitas. Assim, apenas é preciso encontrar uma requisição POST já feita. E se tentarmos executá-la, receberíamos um erro 401. Mas se incluirmos o cabeçalho Api-Token com valor "birds fly south", toda vez que fizermos essa requisição receberemos um 200, e sabemos que os dados estão na base de dados.

Essa foi nossa primeira opção. A segunda é especificar o mediador dentro do construtor do controlador. Então, comentemos o código que acabamos de escrever e usemos a rota antiga.

Old routeOld routeOld route

Agora, no controlador guiar, adicione o código a seguir:

guitar controllerguitar controllerguitar controller

Se voltarmos ao Fiddler e tentarmos a mesma requisição—apenas mudemos alguns valores—e veremos que tudo ainda funciona. Logo ao executar a requisição, receberemos um 200. Se removermos o Api-Token, receberemos um 401.

Agora, realizemos algumas outras requisições. Façamos requisições GET para receber as guitarras e seus IDs. Removamos o Api-Token por hora para vermos que funciona sem qualquer tipo de autenticação. E recebemos ID de 1 e ID de 2.

Então, se voltarmos ao compositor, realizemos uma requisição PUT para a guitarra de ID 2.

Para os dados que enviaremos, a marca será Fender, mas mudaremos o modelo de strat para telecaster. Agora, sem Api-Token, não deveria funcionar. Sempre que executarmos, deveriamos receber um 401. Mas, adicionando Api-Token e o valor, "birds fly south", a requisição retornará 200.

E, para completar, façamos uma requisição DELETE. Deletemos a guitarra com ID 1. Deveríamos receber 200, então refaçamos a requisição para buscar todas as guitarras. E agora deveríamos ter apenas uma, a de ID 2. A fabricante é Fender e o modelo é telecaster.

Como vimos, adicionar autenticação no Lumen é bem simples. Além de adicionar o mediador, grande parte do código a escrever reside na classe AuthServiceProvider. Temos de escrever código responsável pela autenticação do usuário, mas feito isso, a API estará protegida.

Assista o Curso Completo

No curso Crie uma API REST com Lumen, mostremos como construir APIs REST com a framework Lumen. Começaremos configurando um ambiente de desenvolvimento do Lumen e construiremos uma API completa de loja de instrimentos, incluindo roteamento, conexão com base de dados e segurança.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.