SlideShare uma empresa Scribd logo
1 de 19
JWT
(Json Web Token)
O que é JWT?
Do site oficial:
JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for
securely transmitting information between parties as a JSON object. – http://jwt.io
Traduzindo, é um padrão aberto que define uma forma compacta e auto-contida
para transmitir de forma segura, informações entre duas partes como objeto JSON.
Estrutura
O token é formado por 3 partes separados por pontos (.):
Header
Payload
Signature
São 3 partes, separadas por um . (ponto), encodadas por base64 individualmente:
<base64-encoded header>.<base64-encoded claims>.<base64-encoded assinatura>
Header
A primeira parte da estrutura é seu header que contém informações sobre qual
criptografia está sendo usada. Consiste em 2 partes encodados em Base64:
O tipo (JWT)
E o algoritmo de hash usado (HMAC SHA256 ou RSA).
{
"alg": "HS256",
"typ": "JWT"
}
Algoritmo de hash
Parâmetro Algoritmo
HS256 HMAC usando algoritmo hash SHA-256
HS384 HMAC usando algoritmo hash SHA-384
HS512 HMAC usando algoritmo hash SHA-512
RS256 RSA usando algoritmo hash SHA-256
RS384 RSA usando algoritmo hash SHA-384
RS512 RSA usando algoritmo hash SHA-512
ES256 ECDSA usando algoritmo hash P-256 e SHA-256
ES384 ECDSA usando algoritmo hash P-384 e SHA-384
ES512 ECDSA usando algoritmo hash P-521 e SHA-512
Payload ou Claims
A segunda é seu conteúdo. O Conteúdo de um JWT são Claims. Claims são
informações que seu JWT passa como pares de chave valor para seu servidor
validar.
Existem 2 tipos de Claims que são Reserved Claims , que são Claims já pré-
definidos (compare com keywords de uma linguagem) e Application Defined
Claims , que são Claims “customizados”, que você vai criar para sua aplicação usar.
Exemplos de Claims
Alguns exemplos de Reserved Claims são:
“iss” (Issuer): Informar da onde o token está vindo.
“iat” (IssuedAt): Quando o token foi gerado.
“exp” (Expiration): Quando o token expira.
“sub” (Subject): A entidade a quem este token pertence (geralmente o Id do
usuário)
http://www.iana.org/assignments/jwt/jwt.xhtml
Exemplo de Payload
{
"iss": "localhost:4039132",
"iat": 1300819370,
"exp": 1300819380,
"sub": "21EC2020-3AEA-4069-A2DD-08002B30309D",
"context": {
"user": {
"userKey": "21EC2020-3AEA-4069-A2DD-08002B30309D",
"username": "bwayne",
"displayName": "Bruce Wayne"
}
}
}
Signature
A terceira é a assinatura do token, ou seja, se queremos garantir que o token não
foi corrompido podemos usar a Signature(Assinatura) com o Header para isso.
Para assinar o token, usamos a Header, Payload, o algoritmo definido na header,
um secret.
Assim, no exemplo, foi usado o HMAC SHA256 (HS256), então teríamos:
HMACSHA256(header + "." + payload, secret)
Onde header e payload já estão encodados em Base64.
Resultado
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJub21lIjoiRnVsYW5vIiwiYWRtaW4iOnRydWV9
.
IShPdPgMqjygLcv6FpePbFuRLJHBTdeKSNDQIpR-X2E
Fluxo de requisição
Fluxo de uso de JWT para um CLIENT
1. Quero acessar uma rota protegida, tipo /users
2. Faço o login, enviando (de forma segura, por https) usuário e senha.
3. Login com sucesso, recebe o ‘TOKEN’. Guardo pra usar depois
4. Faço a requisição que eu queria na /users porém, com o http Header
Authorization: meutokenaqui
5. Com o token enviado, o servidor me identifica e autoriza (ou não) meu acesso,
retornando a resposta à minha requisição.
Fluxo de uso de JWT para o SERVER
1. Se tentarem acessar uma rota protegida sem token, não autoriza.
2. Se tentar acessar com um token, verifica se é válido. Se for, consegue
identificar o usuário pelo TOKEN e libera o acesso.
3. Quando um usuário faz login, geramos um token, para ele poder fazer
requisições autenticadas.
Implementação
- No site oficial do JWT (jwt.io) existem links para diversas bibliotecas para
várias linguagens de programação.
- Também no site oficial é possível verificar se a lib implementa completamente
todos os recursos do JWT.
- No Packagist (https://packagist.org/) também encontramos várias opções
- Possibilidade de implementar manualmente o protocolo, sem utilização de libs
de terceiros.
JWT.io - Implementação do padrão
JWT.io - Playground
Vídeo com passo-a-passo
Tarefa para casa: Assistir o vídeo
https://www.youtube.com/watch?v=k3KfK0ZS_FY
Mario Mendonça
Software Developer
mario.mendonca@gmail.com
https://br.linkedin.com/in/mario-mendonca
Alessandro Rodrigues
Software Developer
alessandro.lages@gmail.com
https://br.linkedin.com/in/alessandror
Referências
https://jwt.io/
http://rcdevlabs.github.io/2015/02/12/como-criar-uma-api-restfull-em-nodejs-e-
autenticar-usando-json-web-token-jwt/
https://rafaell-lycan.com/2016/autenticacao-jwt-angular-app/
https://blog.lucaskatayama.com/posts/2016/03/30/JSON-Web-Token-
JWT/#sthash.hY39j4ZE.dpbs
http://rafael-miceli.com.br/oauth/2016/04/18/JWT.html

Mais conteúdo relacionado

Semelhante a JWT - Json Web Token

Jwt com implementação apache Oltu
Jwt com implementação apache OltuJwt com implementação apache Oltu
Jwt com implementação apache OltuRodrigo Araujo
 
Manipulando JWT em apis Laravel
Manipulando JWT em apis LaravelManipulando JWT em apis Laravel
Manipulando JWT em apis LaravelEduardo Cesar
 
Bypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilBypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilWilliam Costa
 
Architecture In A Box - Declarações e Identidades Na Computação Na Nuvem
Architecture In A Box - Declarações e Identidades Na Computação Na NuvemArchitecture In A Box - Declarações e Identidades Na Computação Na Nuvem
Architecture In A Box - Declarações e Identidades Na Computação Na NuvemMarkus Christen
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2Rodrigo Cândido da Silva
 
Path to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTPath to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTAmazon Web Services LATAM
 
Desenvolvimento de apps e games para android parte 8
Desenvolvimento de apps e games para android   parte 8Desenvolvimento de apps e games para android   parte 8
Desenvolvimento de apps e games para android parte 8Erisvaldo Junior
 
Livro: pro php xml and web services xml signature
Livro: pro php xml and web services   xml signatureLivro: pro php xml and web services   xml signature
Livro: pro php xml and web services xml signaturediogofranciscorocha
 
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...tdc-globalcode
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EELuan Felipe Knebel
 
Introduçao à Internet das Coisas com AWS IoT
Introduçao à Internet das Coisas com AWS IoT Introduçao à Internet das Coisas com AWS IoT
Introduçao à Internet das Coisas com AWS IoT Amazon Web Services LATAM
 
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...tdc-globalcode
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no androidAlexandre Antunes
 
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...tdc-globalcode
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Thiago Barradas
 
2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedoresJardel Weyrich
 
Explorando mecanismos autenticacao na web
Explorando mecanismos autenticacao na webExplorando mecanismos autenticacao na web
Explorando mecanismos autenticacao na webEduardo Cesar
 

Semelhante a JWT - Json Web Token (20)

Jwt com implementação apache Oltu
Jwt com implementação apache OltuJwt com implementação apache Oltu
Jwt com implementação apache Oltu
 
Manipulando JWT em apis Laravel
Manipulando JWT em apis LaravelManipulando JWT em apis Laravel
Manipulando JWT em apis Laravel
 
O auth2 e open id connect
O auth2 e open id connectO auth2 e open id connect
O auth2 e open id connect
 
Bypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilBypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasil
 
Architecture In A Box - Declarações e Identidades Na Computação Na Nuvem
Architecture In A Box - Declarações e Identidades Na Computação Na NuvemArchitecture In A Box - Declarações e Identidades Na Computação Na Nuvem
Architecture In A Box - Declarações e Identidades Na Computação Na Nuvem
 
Web service
Web serviceWeb service
Web service
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2
 
Path to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTPath to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoT
 
Desenvolvimento de apps e games para android parte 8
Desenvolvimento de apps e games para android   parte 8Desenvolvimento de apps e games para android   parte 8
Desenvolvimento de apps e games para android parte 8
 
Livro: pro php xml and web services xml signature
Livro: pro php xml and web services   xml signatureLivro: pro php xml and web services   xml signature
Livro: pro php xml and web services xml signature
 
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EE
 
JADE+JENA
JADE+JENAJADE+JENA
JADE+JENA
 
Introduçao à Internet das Coisas com AWS IoT
Introduçao à Internet das Coisas com AWS IoT Introduçao à Internet das Coisas com AWS IoT
Introduçao à Internet das Coisas com AWS IoT
 
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
 
2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores
 
Explorando mecanismos autenticacao na web
Explorando mecanismos autenticacao na webExplorando mecanismos autenticacao na web
Explorando mecanismos autenticacao na web
 

Mais de Mario Mendonça

Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoMario Mendonça
 
Gulp - Automatizador de tarefas de front-end
Gulp - Automatizador de tarefas de front-endGulp - Automatizador de tarefas de front-end
Gulp - Automatizador de tarefas de front-endMario Mendonça
 
Web socket - Trazendo soquetes para a web
Web socket - Trazendo soquetes para a webWeb socket - Trazendo soquetes para a web
Web socket - Trazendo soquetes para a webMario Mendonça
 
Web Storage - Armazenamento de dados
Web Storage - Armazenamento de dadosWeb Storage - Armazenamento de dados
Web Storage - Armazenamento de dadosMario Mendonça
 

Mais de Mario Mendonça (8)

Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimento
 
Gulp - Automatizador de tarefas de front-end
Gulp - Automatizador de tarefas de front-endGulp - Automatizador de tarefas de front-end
Gulp - Automatizador de tarefas de front-end
 
Web socket - Trazendo soquetes para a web
Web socket - Trazendo soquetes para a webWeb socket - Trazendo soquetes para a web
Web socket - Trazendo soquetes para a web
 
Web Storage - Armazenamento de dados
Web Storage - Armazenamento de dadosWeb Storage - Armazenamento de dados
Web Storage - Armazenamento de dados
 
Vanilla JS
Vanilla JSVanilla JS
Vanilla JS
 
Web components
Web componentsWeb components
Web components
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
If bom é if morto
If bom é if mortoIf bom é if morto
If bom é if morto
 

JWT - Json Web Token

  • 2. O que é JWT? Do site oficial: JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. – http://jwt.io Traduzindo, é um padrão aberto que define uma forma compacta e auto-contida para transmitir de forma segura, informações entre duas partes como objeto JSON.
  • 3. Estrutura O token é formado por 3 partes separados por pontos (.): Header Payload Signature São 3 partes, separadas por um . (ponto), encodadas por base64 individualmente: <base64-encoded header>.<base64-encoded claims>.<base64-encoded assinatura>
  • 4. Header A primeira parte da estrutura é seu header que contém informações sobre qual criptografia está sendo usada. Consiste em 2 partes encodados em Base64: O tipo (JWT) E o algoritmo de hash usado (HMAC SHA256 ou RSA). { "alg": "HS256", "typ": "JWT" }
  • 5. Algoritmo de hash Parâmetro Algoritmo HS256 HMAC usando algoritmo hash SHA-256 HS384 HMAC usando algoritmo hash SHA-384 HS512 HMAC usando algoritmo hash SHA-512 RS256 RSA usando algoritmo hash SHA-256 RS384 RSA usando algoritmo hash SHA-384 RS512 RSA usando algoritmo hash SHA-512 ES256 ECDSA usando algoritmo hash P-256 e SHA-256 ES384 ECDSA usando algoritmo hash P-384 e SHA-384 ES512 ECDSA usando algoritmo hash P-521 e SHA-512
  • 6. Payload ou Claims A segunda é seu conteúdo. O Conteúdo de um JWT são Claims. Claims são informações que seu JWT passa como pares de chave valor para seu servidor validar. Existem 2 tipos de Claims que são Reserved Claims , que são Claims já pré- definidos (compare com keywords de uma linguagem) e Application Defined Claims , que são Claims “customizados”, que você vai criar para sua aplicação usar.
  • 7. Exemplos de Claims Alguns exemplos de Reserved Claims são: “iss” (Issuer): Informar da onde o token está vindo. “iat” (IssuedAt): Quando o token foi gerado. “exp” (Expiration): Quando o token expira. “sub” (Subject): A entidade a quem este token pertence (geralmente o Id do usuário) http://www.iana.org/assignments/jwt/jwt.xhtml
  • 8. Exemplo de Payload { "iss": "localhost:4039132", "iat": 1300819370, "exp": 1300819380, "sub": "21EC2020-3AEA-4069-A2DD-08002B30309D", "context": { "user": { "userKey": "21EC2020-3AEA-4069-A2DD-08002B30309D", "username": "bwayne", "displayName": "Bruce Wayne" } } }
  • 9. Signature A terceira é a assinatura do token, ou seja, se queremos garantir que o token não foi corrompido podemos usar a Signature(Assinatura) com o Header para isso. Para assinar o token, usamos a Header, Payload, o algoritmo definido na header, um secret. Assim, no exemplo, foi usado o HMAC SHA256 (HS256), então teríamos: HMACSHA256(header + "." + payload, secret) Onde header e payload já estão encodados em Base64.
  • 12. Fluxo de uso de JWT para um CLIENT 1. Quero acessar uma rota protegida, tipo /users 2. Faço o login, enviando (de forma segura, por https) usuário e senha. 3. Login com sucesso, recebe o ‘TOKEN’. Guardo pra usar depois 4. Faço a requisição que eu queria na /users porém, com o http Header Authorization: meutokenaqui 5. Com o token enviado, o servidor me identifica e autoriza (ou não) meu acesso, retornando a resposta à minha requisição.
  • 13. Fluxo de uso de JWT para o SERVER 1. Se tentarem acessar uma rota protegida sem token, não autoriza. 2. Se tentar acessar com um token, verifica se é válido. Se for, consegue identificar o usuário pelo TOKEN e libera o acesso. 3. Quando um usuário faz login, geramos um token, para ele poder fazer requisições autenticadas.
  • 14. Implementação - No site oficial do JWT (jwt.io) existem links para diversas bibliotecas para várias linguagens de programação. - Também no site oficial é possível verificar se a lib implementa completamente todos os recursos do JWT. - No Packagist (https://packagist.org/) também encontramos várias opções - Possibilidade de implementar manualmente o protocolo, sem utilização de libs de terceiros.
  • 17. Vídeo com passo-a-passo Tarefa para casa: Assistir o vídeo https://www.youtube.com/watch?v=k3KfK0ZS_FY
  • 18. Mario Mendonça Software Developer mario.mendonca@gmail.com https://br.linkedin.com/in/mario-mendonca Alessandro Rodrigues Software Developer alessandro.lages@gmail.com https://br.linkedin.com/in/alessandror