Manipulando JWT em apis Laravel

EduardoCesar10 3,540 views 54 slides Jul 21, 2018
Slide 1
Slide 1 of 54
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54

About This Presentation

Palestra apresentada na trilha de Arquitetura PHP do TDC São Paulo 2018.


Slide Content

Manipulando JWT em
apis Laravel
EDUARDO CESAR
DESENVOLVEDOR DE SOFTWARE
ZARPSYSTEM

Authentication

Authentication is the process of
verification that an individual, entity or
website is who it claims to be.
OWASP

Authorization

...generally enforced on the basis of a
user-specific policy, and authentication
is the way to establish the user in
question.
OWASP

Processos para
autenticação
Básicamente duas formas!
●Autenticação baseada em sessões
e cookies
●Autenticação baseada em tokens

Respostas
HTTP
Sempre condizentes com as
ações
●200 Para casos de sucesso,
●400 Para casos de erros, como
email inválido por exemplo
●404 Para usuários não encontrado
●401 Para usuários não autorizados
●403 Para acesso proíbido

JWT
Json Web Token

É uma especificação descrita na RFC
7915, e propõe uma implementação
segura para troca de informações entre
client e server através de objetos json.

Como JWT trabalha ?

O que constitui um
token JWT ?

JWT
Anatomia
●HEADER
●PAYLOAD
●SIGNATURE

Header ?

HEADERS

PAYLOAD ?

PAYLOAD

{
// registered claims
"iss": "a partir de onde o token foi gerado",
"iat": “identifica a hora que foi gerado representada por um timestamp”,
"exp": “define um timestamp de expiração para o token ”,
"nbf": “define um timestamp para que o token não seja processado antes
dele”,
"jti": "é o identificador único deste token JWT ID",
"sub": 1,
// public claims
"prv": "o hash da class User Provider do Laravel",
"role": "uma permissão definida pela aplicação"
}

SIGNATURE ?

SIGNATURE

Somente o dono da chave secreta poderá alterar
informações contidas no token.

Sua representação
final ….

TOKEN JWT
HEADER
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
PAYLOAD
eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAvbG9naW4iLCJpYXQiOjE1MzE0MjA2MzYsImV4cCI6
MTUzMTYzNjYzNiwibmJmIjoxNTMxNDIwNjM2LCJqdGkiOiJRajNsSmRuc3h3UUZpVmUzIiwic3ViIjoxLCJ
wcnYiOiJmNWI5NzNkMjRlNDgxYWE1YzZiYmFjMTEzODIzZWQ5OWE0ZjU3ZjU4Iiwicm9sZSI6ImFkbWlu
In0
SIGNATURE
7efG13q_9uGBUjbmDTIFqv0-ok-Y-EO_syGFK

JWT
Considerações em torno de
segurança
●Sempre defina um algoritmo de criptografia no
header, nunca algo do tipo {‘alg’ :’ none’}.
●Situações que exigem mais cuidados considere o
uso de chaves públicas/privadas para assinatura.
●Maior segurança contra ataques do tipo ‘Man in
the middle’.
●Defina um tempo de expiração para o token que
seja aceitável para sua aplicação.
●Utilize técnicas de refresh e invalidate para os
tokens.

Implementando no
Laravel

Laravel JWT-AUTH
Pré requerimentos
Laravel 5.5.*
Jwt-auth 1.0.0-rc.1
Base de dados mysql/postgress ou outro
Instalação
composer create-project --prefer-dist laravel/laravel=5.5.* jwt-auth
composer require tymon/jwt-auth:1.0.0-rc.1

Laravel JWT-AUTH
Adicionar provider e aliases
Inserir os providers e aliases no arquivo app.php, localizado no diretório
/config
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Laravel JWT-AUTH
Publish
php artisan vendor:publish
--provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Este comando irá gerar o arquivo jwt.php, localizado no diretório
/config
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Laravel JWT-AUTH
Generate JWT Secret
php artisan jwt:secret
Este comando irá gerar uma chave secreta que será utilizada no processo
de encriptação do tokenovider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Laravel JWT-AUTH
Configurando o arquivo config/auth.php
Os ajustes nesse arquivo se referem ao mecanismo de autenticação, e a
entidade de banco de dados utilizada para verificação de dados.

Laravel JWT-AUTH

Laravel JWT-AUTH
Criar model user e sua migration
php artisan make:model Domain/Admin/User --migration
Altere a estrutura da migration, para uma estrutura contendo nome,
email,
e senha. Em seguida devemos alterar a model que foi criada.

Laravel JWT-AUTH
Ajuste o model para poder usar JWT

Laravel JWT-AUTH
Criar o controller
php artisan make:controller /Admin/Auth
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Laravel JWT-AUTH
Adicionando middlewares default da biblioteca

Laravel JWT-AUTH
App/Http/Kernel.php

Laravel JWT-AUTH
Adicionando rotas em routes/api.php

Laravel JWT-AUTH
routes/api.php

Testando a geração de
token

Testando acesso com
o token

Manipulando JWT

Laravel JWT-AUTH
Configurando claims, e tempo de expiração
$token = auth()->guard(‘api’)
->claims(['role' => 'user'])
->setTTL(1800)
->attempt($credentials);
Cria um token adicionando a claim de role, e o tempo de expiração
baseado em segundos.
san vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Laravel JWT-AUTH
Mais métodos...
auth()->logout(true);
$newToken = auth()->refresh(true, true);
auth()->invalidate(true);
auth()->payload();
san vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Referências
https://bit.ly/2pqH3M6
https://bit.ly/2NTS0ih
https://bit.ly/1Drghjd
https://bit.ly/1B0zHPH
https://bit.ly/2Ju40DQ
https://bit.ly/2L34kPe
https://bit.ly/2uurHqN
https://bit.ly/2LbBbkt
https://bit.ly/2utcztT
https://red.ht/2NvlnX6

OBRIGADO A
TODOS!
[email protected]
www.zarpsystem.com.br
github.com/bolinha1
/in/eduardo-cesar-oliveira
EDUARDO CESAR