NEW: get the JWT Handbook for free and learn JWTs in depth!
o que é JSON Web Token?
JSON Web Token (JWT) é um padrão aberto (RFC 7519) que define uma forma compacta e self-contained para transmitir informação de forma segura entre as partes como um objeto JSON. Esta informação pode ser verificada e confiável porque é assinada digitalmente. JWTs pode ser assinado usando um segredo (com o algoritmo HMAC) ou um par de chaves público/privado usando RSA ou ECDSA.,
embora JWTs possam ser criptografados para também fornecer sigilo entre as partes, vamos nos concentrar em fichas assinadas. Tokens assinados podem verificar a integridade das reivindicações contidas nele, enquanto tokens criptografados escondem essas reivindicações de outras partes. Quando os tokens são assinados usando pares de chaves público/privado, a Assinatura também certifica que apenas a parte que tem a chave privada é a que assinou.
quando deve utilizar fichas Web JSON?
Aqui estão alguns cenários onde os Tokens da Web JSON são úteis:
-
Autorização: Este é o cenário mais comum para usar JWT., Uma vez que o Usuário esteja logado, cada pedido subsequente incluirá o JWT, permitindo que o usuário acesse rotas, serviços e recursos que são permitidos com esse token. O Single Sign On é um recurso que utiliza amplamente o JWT hoje em dia, devido à sua pequena sobrecarga e sua capacidade de ser facilmente usado em diferentes domínios.
-
troca de Informações: os Tokens JSON Web são uma boa maneira de transmitir informação de forma segura entre as partes. Porque o JWTs pode ser assinado—por exemplo, usando pares de chaves público/privado-você pode ter certeza de que os remetentes são quem eles dizem que são., Além disso, como a Assinatura é calculada usando o cabeçalho e a carga útil, Você também pode verificar que o conteúdo não foi adulterado.
Qual é a estrutura do símbolo Web JSON?
Em sua forma compacta, JSON Web Tokens consistem em três partes, separadas por pontos (.
), que são:
- Cabeçalho
- Carga
- Assinatura
Portanto, uma JWT normalmente se parece com o seguinte.
xxxxx.yyyyy.zzzzz
Let’s break down the different parts.,
cabeçalho
o cabeçalho normalmente consiste em duas partes: o tipo do token, que é JWT, e o algoritmo de assinatura sendo usado, como HMAC SHA256 ou RSA.
Por exemplo:
{ "alg": "HS256", "typ": "JWT"}
então, este JSON é Base64Url codificado para formar a primeira parte do JWT.
carga útil
a segunda parte do token é a carga útil, que contém as reivindicações. Reivindicações são declarações sobre uma entidade (tipicamente, o Usuário) e dados adicionais.Existem três tipos de créditos: créditos registados, públicos e privados.,
-
reivindicações registadas: trata-se de um conjunto de alegações pré-definidas que não são obrigatórias mas recomendadas, para fornecer um conjunto de alegações úteis e interoperáveis. Alguns deles são: iss (emitente), exp (tempo de expiração), sub (assunto), aud (audiência), e outros.
Notice that the claim names are only three characters long as JWT is meanted to be compact.
-
reivindicações públicas: estas podem ser definidas à vontade por aqueles que usam JWTs., Mas para evitar colisões eles devem ser definidos no registro Web Token IANA JSON ou ser definidos como um URI que contém um espaço de nomes resistente a colisões.
-
reivindicações privadas: estas são as reivindicações customizadas criadas para compartilhar informações entre as partes que concordam em usá-las e não são registradas ou públicas reivindicações.
um exemplo de carga útil pode ser:
{ "sub": "1234567890", "name": "John Doe", "admin": true}
a carga útil é então codificada como Base64Url para formar a segunda parte do símbolo Web JSON.,
note que para fichas assinadas esta informação, embora protegida contra adulteração, é legível por qualquer pessoa. Não coloque informações secretas na carga útil ou elementos de cabeçalho de um JWT, a menos que esteja encriptado.
Assinatura
para criar a parte da assinatura, terá de levar o cabeçalho Codificado, A carga codificada, um segredo, O algoritmo especificado no cabeçalho, e assiná-lo.,
Por exemplo, se você deseja usar o HASH SHA256 o algoritmo, a assinatura vai ser criadas da seguinte forma:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
A assinatura é utilizada para verificar se a mensagem não foi alterada ao longo do caminho, e, no caso de tokens assinados com uma chave privada, que também pode verificar se o remetente da JWT é quem ele diz ser.
colocando todos juntos
a saída é de três cadeias de URL Base64 separadas por pontos que podem ser facilmente passados em ambientes HTML e HTTP, sendo mais compacto quando comparado com padrões baseados em XML, como o SAML.,
o seguinte mostra um JWT que tem o cabeçalho e carga anterior codificados, e é assinado com um segredo.
Se quiser brincar com o JWT e pôr estes conceitos em prática, pode usar jwt.io depurador para descodificar, verificar e gerar JWTs.
como funcionam as fichas Web JSON?
na autenticação, quando o usuário logar com sucesso em usar suas credenciais, um Token Web JSON será devolvido. Uma vez que as fichas são credenciais, há que ter muito cuidado para evitar as questões de segurança., Em geral, você não deve manter fichas por mais tempo do que o necessário.
também não deve armazenar dados de sessão sensíveis no armazenamento do navegador devido à falta de segurança.
sempre que o utilizador quiser aceder a uma rota ou recurso protegidos, o agente de utilizador deve enviar o JWT, normalmente no cabeçalho da autorização usando o esquema do portador. O conteúdo do cabeçalho deve ser o seguinte:
Authorization: Bearer <token>
isto pode ser, em certos casos, um mecanismo de autorização apátrida., As rotas protegidas do servidor irão verificar se existe um JWT válido no cabeçalho Authorization
, e se estiver presente, o utilizador poderá aceder aos recursos protegidos. Se o JWT contiver os dados necessários, a necessidade de consultar o banco de dados para certas operações pode ser reduzida, embora isso nem sempre seja o caso.
If the token is sent in the Authorization
header, Cross-Origin Resource Sharing (CORS) won’t be an issue as it doesn’t use cookies.,
O diagrama seguinte mostra como um JWT é obtido e usado para acessar APIs ou recursos:
- A aplicação ou cliente solicita autorização para o servidor de autorização. Isto é realizado através de um dos diferentes fluxos de autorização. Por exemplo, uma aplicação web compatível com OpenID irá passar pelo ID
endpoint usando o fluxo de código de autorização.
- Quando a autorização é concedida, o servidor de autorização devolve um item de acesso à aplicação.,
- A aplicação usa o token de Acesso para acessar um recurso protegido (como uma API).
note que, com tokens assinados, toda a informação contida no token é exposta aos utilizadores ou a outras partes, mesmo que não possam alterá-lo. Isso significa que você não deve colocar informações secretas dentro do token.
por que devemos usar fichas Web JSON?
vamos falar sobre os benefícios dos Tokens Web JSON (JWT) quando comparados com Tokens Web Simples (SWT) e Tokens linguagem de verificação de segurança (SAML).,
como JSON é menos descritivo do que XML, quando é codificado seu tamanho também é menor, fazendo JWT mais compacto do que SAML. Isso faz do JWT uma boa escolha para ser passado em ambientes HTML e HTTP.em termos de segurança, SWT só pode ser assinado simetricamente por um segredo compartilhado usando o algoritmo HMAC. No entanto, os tokens JWT e SAML podem usar um par de chaves público/privado na forma de um certificado X. 509 para assinar. Assinar XML com assinatura digital XML sem introduzir buracos de segurança obscuros é muito difícil quando comparado com a simplicidade de assinar JSON.,os parsers JSON são comuns na maioria das linguagens de programação porque mapeiam diretamente para objetos. Inversamente, XML não tem um mapeamento de documento-a-objeto natural. Isso torna mais fácil de trabalhar com JWT do que SAML assertions.
no que diz respeito à utilização, o JWT é utilizado à escala da Internet. Isso destaca a facilidade de processamento do lado do cliente do token da Web JSON em várias plataformas, especialmente móveis.,
comparação do comprimento de um JWT codificado e de um SAML
codificado se quiser ler mais sobre os Tokens da Web JSON e até começar a usá-los para efectuar a autenticação nas suas próprias aplicações, navegue na página de destino do símbolo Web JSON na Auth0.
Leave a Reply