Como configurar autenticação JWT com Symfony 4
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:
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
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 ! :)