Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel
Code

Como Proteger uma API REST com Lumen

by
Difficulty:IntermediateLength:ShortLanguages:

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 controller

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

appphp

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 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.

AuthServiceProvider

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 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 route

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

guitar 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
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.