Como configurar autenticação JWT com Symfony 4

Walderlan Sena
2 min readApr 1, 2019

--

Aprenda a implementar autenticação JWT na sua aplicação php

Configurando o LexikJWTAuthenticationBundle ?

O LexikJWTAuthenticationBundle requer que sua aplicação tenha um provedor de usuários configurado corretamente. Você pode usar o Doctrine user provider fornecido pelo Symfony (recomendado), criar um provedor de usuários customizado.

Ao definir a utilização do Doctrine user provider com o componente security, só preciso criar uma entidade chamada User, que implementa UserInterface ou AdvancedUserInterface:

src/Entities/User.php

Agora vamos gerar nosso banco e a entidade com o comando:

$ php bin/console doctrine:database:create
$ php bin/console doctrine:schema:update --force

Instalando o JWTAuthentcationBundle

Adicione o pacote lexik/jwt-authentication-bundle no arquivo composer.json, ou execute o comando:

composer req "lexik/jwt-authentication-bundle"

Gerando as chaves necessárias

$ mkdir config/jwt
$ openssl genrsa -out config/jwt/private.pem -aes256 4096
$ openssl rsa -pubout -in config/jwt/private.pem -out config/jwt/public.pem

Caso o primeiro comando openssl force você a inserir o uso da senha a seguir para obter a chave privada descriptografada.

$ openssl rsa -in config/jwt/private.pem -out config/jwt/private2.pem
$ mv config/jwt/private.pem config/jwt/private.pem-back
$ mv config/jwt/private2.pem config/jwt/private.pem

Configurando as rotas

config/routes.yml
src/Controller/AuthController.php

Configurando o security

Por fim, precisamos informar ao sistema de segurança do Symfony sobre nosso provedor e autenticador:

config/packages/security.yaml

Vamos testar !

Criando um novo usuário

$ curl -X POST http://localhost:8000/register -d _username=walderlan -d _password=12345
-> User walderlan successfully created

Obtendo um novo token JWT

$ curl -X POST -H "Content-Type: application/json" http://localhost:8000/login_check -d '{"username":"walderlan","password":"12345"}'
-> { "token": "[TOKEN]" }

Exemplo de acesso a rotas seguras:

$ curl -H "Authorization: Bearer [TOKEN]" http://localhost:8000/api
-> Logged in as walderlan

Até mais ! :)

Artigo de referência:

https://emirkarsiyakali.com/implementing-jwt-authentication-to-your-api-platform-application-885f014d3358

--

--

Walderlan Sena

Systems Analyst and Developer, Security Analyst, Writer, Speaker, Enthusiast IoT, SI. PHP Evangelist, CEO of the company @mentesvirtuaissena