JWT - Json Web Token

19
JWT (Json Web Token)

Transcript of JWT - Json Web Token

Page 1: JWT - Json Web Token

JWT

(Json Web Token)

Page 2: 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.

Page 3: JWT - Json Web Token

EstruturaO 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>

Page 4: JWT - Json Web Token

HeaderA 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"

}

Page 5: JWT - Json Web Token

Algoritmo de hashParâ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

Page 6: JWT - Json Web Token

Payload ou ClaimsA 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.

Page 7: JWT - Json Web Token

Exemplos de ClaimsAlguns 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

Page 8: JWT - Json Web Token

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" } }}

Page 9: JWT - Json Web Token

SignatureA 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.

Page 10: JWT - Json Web Token

ResultadoeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

.

eyJub21lIjoiRnVsYW5vIiwiYWRtaW4iOnRydWV9

.

IShPdPgMqjygLcv6FpePbFuRLJHBTdeKSNDQIpR-X2E

Page 11: JWT - Json Web Token

Fluxo de requisição

Page 12: JWT - Json Web Token

Fluxo de uso de JWT para um CLIENT1.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.

Page 13: JWT - Json Web Token

Fluxo de uso de JWT para o SERVER1.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.

Page 14: JWT - Json Web Token

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.

Page 15: JWT - Json Web Token

JWT.io - Implementação do padrão

Page 16: JWT - Json Web Token

JWT.io - Playground

Page 17: JWT - Json Web Token

Vídeo com passo-a-passoTarefa para casa: Assistir o vídeohttps://www.youtube.com/watch?v=k3KfK0ZS_FY

Page 18: JWT - Json Web Token

Mario MendonçaSoftware Developer

[email protected]://br.linkedin.com/in/mario-mendonca

Alessandro RodriguesSoftware Developer

[email protected]://br.linkedin.com/in/alessandror

Page 19: JWT - Json Web Token

Referênciashttps://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