SlideShare uma empresa Scribd logo
1 de 74
JWT:
Mais (emoção) segurança na sua
aplicação
GUSTAVO PEREIRA - PHP SP SANTOS TALKS #2
Como podemos garantir uma segurança
maior na troca de informações entre o
client/server e entre múltiplas instâncias da
mesma aplicação?
Quem sou eu?
12 anos na área de TI
Bacharel em Ciências da Computação
Tecnólogo em Processamento de Dados
Zend Certified PHP Engineer 5.5
Desenvolvedor PL na MT4 Networks
http://www.mt4networks.com.br
Slideshare!
Quando pensamos em autenticação,
qual é o modelo "convencional"?
Cliente Servidor
BD
Cliente Servidor
BD
PHP SESSID=toorf9xB(...)
/index.php
Cliente Servidor
BD
/login
(username: x, password: y)
PHP SESSID=toorf9xB(...)
Cliente Servidor
BD
/login.php
(username: x, password: y)
(Select
username
from
users…)
PHP SESSID=toorf9xB(...)
Cliente Servidor
BD
/login.php
(username: x, password: y)
(Select
username
from
users…)
PHP SESSID=toorf9xB(...)
Usuario
Permissões
Guarda Sessão
Cliente Servidor
BD
/login.php
(username: x, password: y)
(Select
username
from
users…)
Usuario
Permissões
Guarda Sessão
PHP SESSID=toorf9xB(...)
Sucesso!
Nota:
Resista a tentação de guardar
permissões, dados sensíveis de
usuário nos COOKIES.
Quais os problemas dessa
arquitetura?
Problemas com CORS
(Cross-Origin Resource Sharing)
CSRF?
(Falamos bastante sobre no Talks #1
)
Escalabilidade?
Interoperabilidade?
REST?
Stateless?
(Cada mensagem HTTP deve
conter tudo o que precisa pra
entender o pedido)
REST?
Stateless?
E quem deve manter o estado é o
cliente!
Podemos simplificar!
https://tools.ietf.org/html/rfc7519
JOSE
JOSE
Json Object Signing and
Encryption
(Um framework!)
JWToken
JWAlgorithm
JWSignature
JWEncryption
JWKey
JWToken
JWAlgorithm
JWSignature
JWEncryption
JWKey Ok, esquece… vamos falar só do JWT que engloba tudo
Vantagens do JWT?
Tudo o que você precisa vai no
request, dentro do Token
O Token está criptografado!
Microservices
Friendly
SSO-friendly
(Acesso a diferentes serviços de uma mesma
aplicação através de apenas uma tentativa de login)
Independe de linguagem!
OK, mas como
ficaria então?
Anatomia de um JWT
Header + Payload + Signature
aaaa.bbbbbb.ccccccc
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzY290Y2guaW8iLCJleHAiOjEzMDA4MTkzODAsIm5hbWUiOiJDaH
JpcyBTZXZpbGxlamEiLCJhZG1pbiI6dHJ1ZX0.03f329983b86f7d9a9f5fef85305880101d5e302afafa20154d094b229f75773
Header + Payload + Signature
CLAIMS
Header
{
"alg": "HS256",
"typ": "JWT"
}
Header
{
"alg": "HS256", ← Chave
Simétrica
"typ": "JWT"
}
Payload
(Reservados e opcionais!)
"iss" - emissor
"sub" - objetivo/assunto
"aud" - consumidor
"exp" - expiração
"nbf" - not before
"iat" - criado em
"jti" - JWT ID
Payload
(Públicos)
"adm" - É admin?
"uid" - ID do usuário
"lpd" - Ultimo produto
comprado
Ou seja… o que você
quiser!
CUIDADO
Signature
Header + payload
E como usamos?
1 - No header...
E como usamos?
2 - query String
https://site.com.br?bearer=a
aaaa.bbbbb.ccccc
E como usamos?
3 - No corpo da requisição
(POST)
E finalmente, COMO CRIAMOS?
lcobucci/jwt
E no final
teremos...
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI
1NiIsImp0aSI6IjRmMWcyM2ExMm
FhIn0.eyJpc3MiOiJodHRwOlwvXC9
waHBzcHNhbnRvcy5jb20iLCJhdWQ
iOiJodHRwOlwvXC9leGFtcGxlLm9y
ZyIsImp0aSI6IjRmMWcyM2ExMmF
hIiwiaWF0IjoxNTA2Nzc2MDczLCJu
YmYiOjE1MDY3NzYxMzMsImV4cC
I6MTUwNjc3OTY3MywidWlkIjoxL
CJscGQiOjEyMzM0OTF9.5ui0_hs6
WKFFMPHwVBbgANlTufQMWN-
uB-G2glCxE_Q
Chave assimétrica
$entSign = new Sha256();
$entKeyChain = new Keychain();
$token = (new Builder())->setIssuer('http://phpspsantos.com');
$token->sign(
$entSign,
$entKeyChain->getPrivateKey($dirPrivKey)
);
Chave assimétrica
$entSign = new Sha256();
$entKeyChain = new Keychain();
$token = (new Builder())->setIssuer('http://phpspsantos.com');
$token->verify(
$entSign,
$entKeyChain->getPublicKey($dirPublicKey)
);
"Tem pro Laravéu?"
https://github.com/tymondesigns/jwt-
auth
lexik/LexikJWTAuthenticationBundle
(github)
https://github.com/tuupola/slim-jwt-
auth
Mas cuidado!
1.A chave
privada
precisa estar
segura!
2. Não dá pra
gerenciar o lado
do cliente Se o cliente perde o celular, como
fazer com que o aplicativo ''seja
deslogado"?
2. Não dá pra
gerenciar o lado
do cliente
Guardar os tokens emitidos
(NoSQL)?
Trocamos a chave privada?
Quando o usuário logar em um
dispositivo, mostramos a lista dos
dispositivos conectados?
3. Use Sempre
um Algoritmo!
{
"typ": "JWT",
"alg": "none"
}
OWASP REST_Security_Cheat_Sheet
4. Cuidado com
o tamanho do
Token!
E como sempre,
Não existe bala de prata!
Saiba mais!
https://www.slideshare.net/brunonm/aplicacoes-stateless-com-php-e-jwt
https://www.slideshare.net/imasters/php-experience-2016-palestra-json-web-
token-jwt
https://www.slideshare.net/nachomartin/asegurando-apis-en-symfony-con-jwt
https://www.youtube.com/watch?v=p2tItlr_3QI
http://jwt.io
Dúvidas?
Obrigado!
Créditos das imagens
Google!
https://stormpath.com/blog/microservices-jwt-spring-boot
http://www.cushwakeatlanta.com/ken-ashley-6-cre-predictions-for-2016/
https://scotch.io/tutorials/the-anatomy-of-a-json-web-token
http://thehipp.org/wp-content/uploads/2015/05/Casper-1995-ScreenShot-49.jpg
https://github.com/rmcdaniel/angular-codeigniter-seed/blob/master/api/application/helpers/jwt_helper.php
http://yellowhammernews.com/wp-
content/uploads/2016/03/bank-vault-

Mais conteúdo relacionado

Semelhante a JWT para segurança e autenticação em APIs

Jwt com implementação apache Oltu
Jwt com implementação apache OltuJwt com implementação apache Oltu
Jwt com implementação apache OltuRodrigo Araujo
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Hacking em consoles webs de security appliances, h2hc-rev-2
Hacking em consoles webs de security appliances, h2hc-rev-2Hacking em consoles webs de security appliances, h2hc-rev-2
Hacking em consoles webs de security appliances, h2hc-rev-2William Costa
 
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...iMasters
 
Segredos não ditos de PWA - muito além do Web App Manifest
Segredos não ditos de PWA - muito além do Web App ManifestSegredos não ditos de PWA - muito além do Web App Manifest
Segredos não ditos de PWA - muito além do Web App ManifestEduardo Matos
 
COMO FAZER E-MAIL MARKETING EM HTML
COMO FAZER E-MAIL MARKETING EM HTMLCOMO FAZER E-MAIL MARKETING EM HTML
COMO FAZER E-MAIL MARKETING EM HTMLRenato Melo
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendadoricardophp
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMinicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMarcelo Linhares
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Alexandre Saboia Fuziyama
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 
Edição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaEdição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaJorge Walendowsky
 
Tony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics ArtifactsTony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics Artifactstonyrodrigues
 
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSCDesafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSCJoão Zaratine
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de ServletsMarcio Marinho
 
Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Getup Cloud
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresqlGerdan Santos
 

Semelhante a JWT para segurança e autenticação em APIs (20)

Jwt com implementação apache Oltu
Jwt com implementação apache OltuJwt com implementação apache Oltu
Jwt com implementação apache Oltu
 
Html5
Html5Html5
Html5
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Hacking em consoles webs de security appliances, h2hc-rev-2
Hacking em consoles webs de security appliances, h2hc-rev-2Hacking em consoles webs de security appliances, h2hc-rev-2
Hacking em consoles webs de security appliances, h2hc-rev-2
 
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
InterCon 2017 - Segredos não ditos de PWA - muito além do Web App Manifest - ...
 
Segredos não ditos de PWA - muito além do Web App Manifest
Segredos não ditos de PWA - muito além do Web App ManifestSegredos não ditos de PWA - muito além do Web App Manifest
Segredos não ditos de PWA - muito além do Web App Manifest
 
COMO FAZER E-MAIL MARKETING EM HTML
COMO FAZER E-MAIL MARKETING EM HTMLCOMO FAZER E-MAIL MARKETING EM HTML
COMO FAZER E-MAIL MARKETING EM HTML
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMinicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
Edição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaEdição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a ponta
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Tony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics ArtifactsTony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics Artifacts
 
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSCDesafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
 
Caché
CachéCaché
Caché
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de Servlets
 
Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresql
 

Mais de Gustavo Pereira

Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Gustavo Pereira
 
Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Gustavo Pereira
 
Do Windows para o Linux é mais fácil do que você imagina!
Do Windows para o Linux é mais fácil do que você imagina!Do Windows para o Linux é mais fácil do que você imagina!
Do Windows para o Linux é mais fácil do que você imagina!Gustavo Pereira
 
As Escrituras e suas Características - Clareza
As Escrituras e suas Características - ClarezaAs Escrituras e suas Características - Clareza
As Escrituras e suas Características - ClarezaGustavo Pereira
 
As parábolas (revisitadas)
As parábolas (revisitadas)As parábolas (revisitadas)
As parábolas (revisitadas)Gustavo Pereira
 
Existe Vida além do FTP!
Existe Vida além do FTP! Existe Vida além do FTP!
Existe Vida além do FTP! Gustavo Pereira
 
As parábolas de Mateus 13 (Parte 2)
As parábolas de Mateus 13 (Parte 2)As parábolas de Mateus 13 (Parte 2)
As parábolas de Mateus 13 (Parte 2)Gustavo Pereira
 
Php Conference 2013 (Resumão)
Php Conference 2013 (Resumão)Php Conference 2013 (Resumão)
Php Conference 2013 (Resumão)Gustavo Pereira
 

Mais de Gustavo Pereira (8)

Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Sim, existe vida além do FTP!
Sim, existe vida além do FTP!
 
Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Eu não sou um "bom programador"!
Eu não sou um "bom programador"!
 
Do Windows para o Linux é mais fácil do que você imagina!
Do Windows para o Linux é mais fácil do que você imagina!Do Windows para o Linux é mais fácil do que você imagina!
Do Windows para o Linux é mais fácil do que você imagina!
 
As Escrituras e suas Características - Clareza
As Escrituras e suas Características - ClarezaAs Escrituras e suas Características - Clareza
As Escrituras e suas Características - Clareza
 
As parábolas (revisitadas)
As parábolas (revisitadas)As parábolas (revisitadas)
As parábolas (revisitadas)
 
Existe Vida além do FTP!
Existe Vida além do FTP! Existe Vida além do FTP!
Existe Vida além do FTP!
 
As parábolas de Mateus 13 (Parte 2)
As parábolas de Mateus 13 (Parte 2)As parábolas de Mateus 13 (Parte 2)
As parábolas de Mateus 13 (Parte 2)
 
Php Conference 2013 (Resumão)
Php Conference 2013 (Resumão)Php Conference 2013 (Resumão)
Php Conference 2013 (Resumão)
 

JWT para segurança e autenticação em APIs

Notas do Editor

  1. O request contem todas as informações para ser compreendido e processado de forma ráápida, sem precisar de validação. Isso éé um perigo? Não, porque