SlideShare a Scribd company logo
1 of 70
Download to read offline
Aplicações stateless
com PHP e JWT
Bruno Neves
@brunodasneves
brunonm@gmail.comXVI PHP FC
stateless?
stateless
todo request é como se fosse a
primeira vez
stateless
a aplicação não mantém informações
sobre a sessão ativa
stateless
o request contém todas as
informações necessárias para ser
compreendido e processado
stateless
quem mantém o estado é o cliente
vantagens
vantagens
escalabilidade horizontal
vantagens
menor utilização de recursos
computacionais
vantagens
arquitetura com design simplificado
vantagens
microservices friendly
como?
JSON Web Token
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJodHRwOlwvXC9waHAtand0IiwiYXVkIjoiaHR0cDp
cL1wvd3d3LnBocGRmLm9yZy5iclwvIiwianRpIjoiZWRjOWIwMW
YtNjE4YS00YTMyLTkyZGYtZGRlMWM0YmRlMDA0IiwiaWF0IjoxN
DkxOTY3MzU4LCJuYmYiOjE0OTE5Njc0MTgsImV4cCI6MTQ5MTk3
MDk1OCwibmFtZSI6IkJydW5vIE5ldmVzIiwiZW1haWwiOiJicnV
ub25tQGdtYWlsLmNvbSJ9
.
O_jGNRVc7STUknGBavZi-dFqYLDkrt9LAB3zOCYRR_8
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJodHRwOlwvXC9waHAtand0IiwiYXVkIjoiaHR0cDp
cL1wvd3d3LnBocGRmLm9yZy5iclwvIiwianRpIjoiZWRjOWIwMW
YtNjE4YS00YTMyLTkyZGYtZGRlMWM0YmRlMDA0IiwiaWF0IjoxN
DkxOTY3MzU4LCJuYmYiOjE0OTE5Njc0MTgsImV4cCI6MTQ5MTk3
MDk1OCwibmFtZSI6IkJydW5vIE5ldmVzIiwiZW1haWwiOiJicnV
ub25tQGdtYWlsLmNvbSJ9
.
O_jGNRVc7STUknGBavZi-dFqYLDkrt9LAB3zOCYRR_8
header
payload
signature
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJodHRwOlwvXC9waHAtand0IiwiYXVkIjoiaHR0cDp
cL1wvd3d3LnBocGRmLm9yZy5iclwvIiwianRpIjoiZWRjOWIwMW
YtNjE4YS00YTMyLTkyZGYtZGRlMWM0YmRlMDA0IiwiaWF0IjoxN
DkxOTY3MzU4LCJuYmYiOjE0OTE5Njc0MTgsImV4cCI6MTQ5MTk3
MDk1OCwibmFtZSI6IkJydW5vIE5ldmVzIiwiZW1haWwiOiJicnV
ub25tQGdtYWlsLmNvbSJ9
.
O_jGNRVc7STUknGBavZi-dFqYLDkrt9LAB3zOCYRR_8
header
payload
signature
base64 “url-safe”
{
"typ": "JWT",
"alg": "HS256"
}
header
payload {
"iss": "http://php-jwt",
"aud": "http://www.phpdf.org.br/",
"jti": "edc9b01f-618a-4a32-92df-dde1c4bde004",
"iat": 1491967358,
"nbf": 1491967418,
"exp": 1491970958,
"name": "Bruno Neves",
"email": "brunonm@gmail.com"
}
signature
base64UrlEncode(
hash_hmac(
'sha256',
base64UrlEncode($headerJson) . '.' . base64UrlEncode($payloadJson),
'xviphpfc',
true
)
);
signature
base64UrlEncode(
hash_hmac(
'sha256',
base64UrlEncode($headerJson) . '.' . base64UrlEncode($payloadJson),
'xviphpfc',
true
)
);
JSON Web Signature - RFC 7515
claims
claims
reservados, públicos e privados
reservados
iss emissor (issuer)
sub objetivo (subject)
aud consumidor (audience)
exp expira em (expiration time)
nbf válido a partir de (not before)
iat criado em (issued at)
jti jwt id
todos opcionais
públicos
são definidos de acordo com a
necessidade
públicos
devem possuir uma padronização que
evite a colisão de nomes
públicos
devem ser registrados na IANA
privados
assim como os públicos, são definidos
de acordo com a necessidade
estabelecida pelo emissor e
consumidor
claims, the big picture
inclua as informações necessárias e
respeite os claims reservados, para
garantir a interoperabilidade do token
utilização
utilização
cabeçalho
GET / HTTP/1.1
Host: localhost
Authentication: Bearer <token>
utilização
query string
http://siteseguro.com?bearer=<token>
utilização
ou dentro do POST, apesar de ser
incomum
por que JWT?
por que JWT?
compacto
por que JWT?
self-contained
por que JWT?
cross-domain
por que JWT?
seguro
por que JWT?
agnóstico de linguagem
cases
cases
autenticação
cases
esqueci minha senha
cases
single sign on
cases
proteção CSRF
<?php
> composer require lcobucci/jwt
$token = (new LcobucciJWTBuilder())
->setIssuer('http://php-jwt')
->setAudience('http://www.phpdf.org.br/')
->setId(RamseyUuidUuid::uuid4())
->setIssuedAt(time())
->setNotBefore(time() + 60)
->setExpiration(time() + 3600)
->set('name', 'Bruno Neves')
->set('email', 'brunonm@gmail.com')
->sign(new LcobucciJWTSignerHmacSha256(), 'xviphpfc')
->getToken();
echo $token;
$token = (new LcobucciJWTParser())->parse($rawToken);
echo $token->getClaim('name'); // Bruno Neves
$validation = new LcobucciJWTValidationData();
$validation->setIssuer('http://php-jwt');
$validation->setCurrentTime(time() + 3601);
var_dump($token->validate($validation)); // falso, token expirado
https://github.com/lexik/LexikJWTAuthenticationBundle
https://github.com/tymondesigns/jwt-auth
segurança
segurança
base64 não é criptografia
segurança
não coloque nenhuma informação
sensível no token
segurança
a assinatura permite garantir que o
token não foi alterado, porém não
impede a visualização dos claims
segurança
utilize um algoritmo de criptografia
recomendado (hmac sha256, rsa256…)
https://tools.ietf.org/html/rfc7519#section-8
segurança
sempre que o algoritmo for "none", se
certifique que o token não contém
assinatura antes de processar
segurança
verifique a situação da biblioteca no
http://jwt.io
FAQ
logout
apague o token no cliente
invalidação
blacklist de tokens válidos
(não-expirados) pelo "jti"
dúvidas?
obrigado!
referências
https://tools.ietf.org/html/rfc7519
https://jwt.io
https://slideshare.net/lcobucci/jwt-to-authentication-and-beyond
https://slideshare.net/ivanrosolen/autenticao-com-json-web-token-jwt
imagens
http://nyandabout.com/wp-content/uploads/2016/02/Como-se-fosse-a-primei
ra-vez.jpg
https://conteudo.imguol.com.br/c/entretenimento/9c/2017/04/06/reproducao
-de-uma-pagina-do-manual-do-escoteiro-mirim-com-o-codigo-secreto-marcia
no-1491480332132_v2_750x421.jpgx
https://cdn.auth0.com/content/jwt/jwt-diagram.png
http://docplayer.com.br/docs-images/24/2864128/images/11-0.png

More Related Content

What's hot

Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)Leandro Lugaresi
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...Rafael Jaques
 
PHP MySQL aulas 05 e 06
PHP MySQL aulas 05 e 06PHP MySQL aulas 05 e 06
PHP MySQL aulas 05 e 06Carlos Santos
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...tdc-globalcode
 
PHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesPHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesrjsmelo
 
Sessões (in portuguese)
Sessões (in portuguese)Sessões (in portuguese)
Sessões (in portuguese)Bruno Pedro
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]João Augusto
 
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...tdc-globalcode
 

What's hot (13)

Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
 
PHP MySQL aulas 05 e 06
PHP MySQL aulas 05 e 06PHP MySQL aulas 05 e 06
PHP MySQL aulas 05 e 06
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
 
PHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesPHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicações
 
Sessões (in portuguese)
Sessões (in portuguese)Sessões (in portuguese)
Sessões (in portuguese)
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]
 
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
 
Segurança PHP em 2016
Segurança PHP em 2016Segurança PHP em 2016
Segurança PHP em 2016
 

Similar to Aplicações stateless com PHP e JWT

Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...Mauro Risonho de Paula Assumpcao
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 
Manipulando JWT em apis Laravel
Manipulando JWT em apis LaravelManipulando JWT em apis Laravel
Manipulando JWT em apis LaravelEduardo Cesar
 
Android chat app com Node.js
Android chat app com Node.jsAndroid chat app com Node.js
Android chat app com Node.jsLuiz Duarte
 
IoTizando com JavaScript
IoTizando com JavaScriptIoTizando com JavaScript
IoTizando com JavaScriptHeider Lopes
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarFilipe Falcão
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10CJR, UnB
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaSensedia
 

Similar to Aplicações stateless com PHP e JWT (20)

Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Manipulando JWT em apis Laravel
Manipulando JWT em apis LaravelManipulando JWT em apis Laravel
Manipulando JWT em apis Laravel
 
Android chat app com Node.js
Android chat app com Node.jsAndroid chat app com Node.js
Android chat app com Node.js
 
Como funciona a internet
Como funciona a internetComo funciona a internet
Como funciona a internet
 
IoTizando com JavaScript
IoTizando com JavaScriptIoTizando com JavaScript
IoTizando com JavaScript
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
o que é ajax
o que é ajaxo que é ajax
o que é ajax
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
Cacti
CactiCacti
Cacti
 
CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10CJR Apresenta: OWASP TOP10
CJR Apresenta: OWASP TOP10
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha Básica
 
Rest workshop
Rest workshopRest workshop
Rest workshop
 
apache+ssl+Jserv
apache+ssl+Jservapache+ssl+Jserv
apache+ssl+Jserv
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
jQuery e ASP.Net mvc2
jQuery e ASP.Net mvc2jQuery e ASP.Net mvc2
jQuery e ASP.Net mvc2
 
RHQ 4 Gerenciamento efetivo de servidores JBoss
RHQ 4 Gerenciamento efetivo de servidores JBossRHQ 4 Gerenciamento efetivo de servidores JBoss
RHQ 4 Gerenciamento efetivo de servidores JBoss
 

Aplicações stateless com PHP e JWT