{"id":2853,"date":"2021-11-08T10:00:00","date_gmt":"2021-11-08T13:00:00","guid":{"rendered":"https:\/\/uds.com.br\/blog\/?p=2853"},"modified":"2025-07-23T20:58:49","modified_gmt":"2025-07-23T23:58:49","slug":"entenda-o-que-e-e-como-usar-jwt","status":"publish","type":"post","link":"https:\/\/uds.com.br\/blog\/entenda-o-que-e-e-como-usar-jwt\/","title":{"rendered":"Entenda o que \u00e9 e como usar JWT"},"content":{"rendered":"\n<p>A seguran\u00e7a \u00e9 uma das maiores preocupa\u00e7\u00f5es nos tempos atuais. Na tecnologia, com o alto volume de dados que circulam, a cada dia mais, os padr\u00f5es de seguran\u00e7a ganham espa\u00e7o e deixam de se tornar op\u00e7\u00e3o para virar obriga\u00e7\u00e3o. Dentro disso, um dos mais adotados atualmente \u00e9 o JWT ou JSON Web Token.<\/p>\n\n\n\n<p>Este tipo de token \u00e9 definido pelo documento <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7519\" data-type=\"URL\" data-id=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7519\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>RFC 7519<\/strong><\/a>. Os protocolos RFC trazem notas t\u00e9cnicas e organizacionais da internet, definindo conceitos, detalhes, programas e outros recursos ligados ao mundo online. Neste caso, a partir do consenso estabelecido pelos membros da Internet Engineering Taskforce (For\u00e7a tarefa de Engenheiros da Internet &#8211; IETF), o RFC 7519 definiu o que \u00e9 e todas as especifica\u00e7\u00f5es de um JSON WEB Token.<\/p>\n\n\n\n<p>Indo al\u00e9m da parte t\u00e9cnica, o JWT pode ser usado para troca de informa\u00e7\u00f5es entre aplica\u00e7\u00f5es e autoriza\u00e7\u00e3o de usu\u00e1rios. Sua ado\u00e7\u00e3o em larga escala tem como principal raz\u00e3o a seguran\u00e7a.<\/p>\n\n\n\n<p>Ele utiliza um algoritmo de hashing, que valida a integridade do token. Al\u00e9m disso, o valor que est\u00e1 dentro dele n\u00e3o pode ser alterado sem que o emissor tenha conhecimento. Caso isso seja feito, o token ser\u00e1 invalidado.<\/p>\n\n\n\n<p>Mas \u00e9 importante ressaltar que, <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">por n\u00e3o ser criptografado<\/mark><\/strong>, o JSON Web Token n\u00e3o deve <mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\"><strong>conter informa\u00e7\u00f5es sens\u00edveis<\/strong>.<\/mark><\/p>\n\n\n\n<p>Outro ponto importante \u00e9 que o JWT utiliza o padr\u00e3o JSON, que \u00e9 bastante conhecido, tem entendimento simples e pode ser manipulado tranquilamente em qualquer linguagem.<\/p>\n\n\n\n<p>Al\u00e9m disso, por ser compacto, \u00e9 leve e f\u00e1cil de circular entre as redes. Para ficar mais claro, quer dizer que, se utiliz\u00e1ssemos a estrutura XML ou outra, a quantidade de dados necess\u00e1ria para a transmiss\u00e3o ou armazenamento de objetos entre as aplica\u00e7\u00f5es seria maior.<\/p>\n\n\n\n<p>Isso acontece porque o JWT consegue trazer todas as informa\u00e7\u00f5es necess\u00e1rias para o seu processamento e para que as aplica\u00e7\u00f5es troquem dados, de forma compacta. Ou seja, a sua ado\u00e7\u00e3o simplifica todo o processo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Mas afinal, como gerar um token JWT?<\/strong><\/h2>\n\n\n\n<p>Antes de entender isso, \u00e9 importante dizer que o JWT tem f\u00e1cil implementa\u00e7\u00e3o e o primeiro passo \u00e9 compreender a sua composi\u00e7\u00e3o. O JSON Web Token \u00e9 dividido em tr\u00eas partes: Header, Payload e Signature. Na escrita do c\u00f3digo, cada uma delas \u00e9 separada por um ponto.<\/p>\n\n\n\n<p>Os trechos t\u00eam estruturas e fun\u00e7\u00f5es diferentes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Header<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"alg\": \"HS256\",\n  \"typ\": \"JWT\"\n}<\/code><\/pre>\n\n\n\n<p>Como o nome j\u00e1 diz, \u00e9 o cabe\u00e7alho do token.<\/p>\n\n\n\n<p>O header \u00e9 um objeto JSON encodado em Base64. Ele define qual \u00e9 o tipo (typ) do token (neste caso, um JWT) e qual \u00e9 o algoritmo (alg) de criptografia que est\u00e1 sendo utilizado em sua assinatura (HMAC, SHA256 ou RSA).<\/p>\n\n\n\n<p>Em alguns casos, o header do JWT ainda pode conter o tipo de conte\u00fado presente nele e, em outros, n\u00e3o vai informar o tipo de token.<\/p>\n\n\n\n<p>O que n\u00e3o pode faltar no cabe\u00e7alho \u00e9 a <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">informa\u00e7\u00e3o do algoritmo de cria\u00e7\u00e3o da hash de assinaturas<\/mark><\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Payload<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"sub\": \"1234567890\",\n  \"name\": \"Joao Silva\",\n  \"admin\": true\n}<\/code><\/pre>\n\n\n\n<p>\u00c9 o corpo da JWT e \u00e9 onde est\u00e3o contidas as claims (informa\u00e7\u00f5es), que podem ser de tr\u00eas tipos: reserved, public e private.<\/p>\n\n\n\n<p>As <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">reserved claims<\/mark><\/strong> n\u00e3o t\u00eam utiliza\u00e7\u00e3o obrigat\u00f3ria, mas, em algumas situa\u00e7\u00f5es, s\u00e3o recomendadas. Elas trazem informa\u00e7\u00f5es de f\u00e1cil identifica\u00e7\u00e3o e \u00fateis, como o hor\u00e1rio de utiliza\u00e7\u00e3o e a expira\u00e7\u00e3o dos tokens.<\/p>\n\n\n\n<p>As <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">public claims<\/mark><\/strong> s\u00e3o criadas pelo usu\u00e1rio e devem definir o uso da JWT e trazer informa\u00e7\u00f5es \u00fateis para a aplica\u00e7\u00e3o.<\/p>\n\n\n\n<p>As <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">private claims<\/mark> <\/strong>tamb\u00e9m s\u00e3o criadas pelo usu\u00e1rio, mas compartilhar\u00e3o informa\u00e7\u00f5es apenas entre as aplica\u00e7\u00f5es que ir\u00e3o utiliz\u00e1-las.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Signature<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>HMACSHA256(\n  base64UrlEncode(header) + \".\" +\n  base64UrlEncode(payload),\n  secret)<\/code><\/pre>\n\n\n\n<p>Ela \u00e9 a consolida\u00e7\u00e3o das outras partes. \u00c9 formada pelo encode do header junto ao encode do payload e mais uma palavra-chave, isso tudo codificado de acordo com o que foi especificado no cabe\u00e7alho.<\/p>\n\n\n\n<p>A signature \u00e9 respons\u00e1vel por garantir a integridade do token e prevenir ataques, por isso, \u00e9 o item mais sens\u00edvel na constru\u00e7\u00e3o de um JWT. Um poss\u00edvel invasor pode at\u00e9 conseguir alterar o payload, colocando informa\u00e7\u00f5es falsas, mas, se existir essa altera\u00e7\u00e3o, ela n\u00e3o ser\u00e1 validada por conta da necessidade de preencher a chave secreta corretamente.<\/p>\n\n\n\n<p>O conte\u00fado do JWT s\u00f3 pode ser alterado e validado por quem possui a chave correta. Este \u00e9 um dos motivos para a solu\u00e7\u00e3o ter a seguran\u00e7a como destaque.<\/p>\n\n\n\n<p>Agora que voc\u00ea j\u00e1 entendeu os caminhos para criar o token JWT, \u00e9 importante visualizar quais s\u00e3o os seus principais usos. Afinal, este padr\u00e3o \u00e9, cada vez mais, utilizado por desenvolvedores em m\u00faltiplos projetos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Quando o JWT \u00e9 utilizado?<\/strong><\/h2>\n\n\n\n<p>O JSON Web Token tem dois usos principais, na transmiss\u00e3o de informa\u00e7\u00f5es e na parte de autoriza\u00e7\u00e3o de mecanismos de autentica\u00e7\u00e3o.<\/p>\n\n\n\n<p>Come\u00e7ando pelo uso mais comum, o JWT \u00e9 bastante \u00fatil na parte de <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">autoriza\u00e7\u00f5es<\/mark><\/strong>. Isso funciona da seguinte forma: ap\u00f3s a autentica\u00e7\u00e3o do login do usu\u00e1rio, cada requisi\u00e7\u00e3o ao servidor ter\u00e1 um JSON Web Token, que permitir\u00e1 a esse usu\u00e1rio acessar rotas, servi\u00e7os e recursos liberados por meio daquele token espec\u00edfico.<\/p>\n\n\n\n<p>Um dos servi\u00e7os mais famosos da Apple \u00e9 o \u201cSing In With Apple\u201d que utiliza o JWT. Ele permite ao usu\u00e1rio se conectar com diversos apps (Spotify, Dropbox e Airbnb, por exemplo), por meio da AppleID. O usu\u00e1rio sabe o quanto esta solu\u00e7\u00e3o da ma\u00e7\u00e3 facilita o dia a dia e possibilita acesso r\u00e1pido a tantos aplicativos. Sem o JSON Web Token, ela n\u00e3o seria t\u00e3o eficiente.<\/p>\n\n\n\n<p>Al\u00e9m de trazer agilidade, o JWT \u00e9 bastante adotado justamente por conta da seguran\u00e7a que proporciona. Ele \u00e9 uma maneira eficiente e segura de <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">trocar informa\u00e7\u00f5es entre aplica\u00e7\u00f5es<\/mark><\/strong>. Com as chaves p\u00fablica e privada, \u00e9 poss\u00edvel garantir que os remetentes s\u00e3o exatamente quem afirmam ser, o que ajuda a evitar fraudes.<\/p>\n\n\n\n<p>Uma dessas fraudes foi justamente no servi\u00e7o &#8220;Sign In With Apple\u201d, mas a culpa n\u00e3o foi da falta de seguran\u00e7a do JWT.&nbsp; No caso, a falha veio da pr\u00f3pria Apple, pois as assinaturas obtidas pelo JSON Web Token vinham de uma chave p\u00fablica da empresa. A partir dessa brecha, por meio do servi\u00e7o da ma\u00e7\u00e3, um hacker poderia acessar qualquer conta dos usu\u00e1rios.<\/p>\n\n\n\n<p>Ap\u00f3s o incidente, que foi descoberto por um pesquisador de seguran\u00e7a da \u00cdndia, a Apple resolveu a falha e seguiu com o uso do JWT. Afinal, utilizado da maneira correta, o padr\u00e3o \u00e9 uma importante op\u00e7\u00e3o de seguran\u00e7a para evitar a\u00e7\u00f5es de <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/uds.com.br\/blog\/irp-ciberataques\/\" data-type=\"URL\" data-id=\"https:\/\/uds.com.br\/blog\/irp-ciberataques\/\" target=\"_blank\">pessoas mal intencionadas<\/a><\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>JWT substitui o OAuth2?<\/strong><\/h2>\n\n\n\n<p>N\u00c3O!<\/p>\n\n\n\n<p>Afinal, o <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#464646\" class=\"has-inline-color\">JWT n\u00e3o \u00e9 um framework de autentica\u00e7\u00e3o ou autoriza\u00e7\u00e3o<\/mark><\/strong>. Ele n\u00e3o define os fluxos, apenas auxilia e colabora com o processo, por meio da troca de informa\u00e7\u00f5es que permite. Por isso, ao contr\u00e1rio do que muita gente pensa, n\u00e3o \u00e9 necess\u00e1rio escolher entre JWT e OAuth2, pois s\u00e3o coisas diferentes.<\/p>\n\n\n\n<p>O OAuth2 \u00e9 um protocolo que define diversos fluxos de autoriza\u00e7\u00f5es para aplica\u00e7\u00f5es. Portanto, \u00e9 poss\u00edvel utilizar o JSON Web Token com o OAuth2, que tamb\u00e9m pode ser utilizado com outros tipos de tokens.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/uds.com.br\/blog\/wp-content\/uploads\/2022\/07\/traco-ok.png\" alt=\"O atributo alt desta imagem est\u00e1 vazio. O nome do arquivo \u00e9 traco-ok.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Como o JWT funciona na pr\u00e1tica?<\/strong><\/h2>\n\n\n\n<p>Com o token JWT gerado, a API n\u00e3o precisar\u00e1 acessar os dados de login e de senha do banco de dados para valida\u00e7\u00e3o, a cada requisi\u00e7\u00e3o enviada. O controle de acesso passa a ser realizado pelo token.<\/p>\n\n\n\n<p>Dessa forma, a aplica\u00e7\u00e3o consome <strong><a href=\"https:\/\/uds.com.br\/blog\/o-que-e-escalabilidade-de-software\/\" data-type=\"URL\" data-id=\"https:\/\/uds.com.br\/blog\/o-que-e-escalabilidade-de-software\/\" target=\"_blank\" rel=\"noreferrer noopener\">menos recursos<\/a><\/strong> e fica mais segura. \u00c9 efici\u00eancia e seguran\u00e7a no trabalho de desenvolvimento e transforma\u00e7\u00e3o digital.<\/p>\n\n\n\n<p>A UDS \u00e9 especialista em desenvolvimento de software e implementa os principais padr\u00f5es de seguran\u00e7a nos projetos dos clientes. Aceleramos a transforma\u00e7\u00e3o digital de marcas como Calvin Klein, DHL, YAMAHA e outras grandes empresas. <a href=\"https:\/\/uds.com.br\/contato\/\" data-type=\"URL\" data-id=\"https:\/\/uds.com.br\/contato\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Entre em contato<\/strong><\/a> e fale com um de nossos especialistas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JWT (JSON Web Token) explicado: formato, estrutura (header, payload, signature) e uso em autentica\u00e7\u00e3o sem estado. Indica como gerar, validar e renovar tokens de forma segura, cuidados com segredo e expira\u00e7\u00e3o, al\u00e9m de cen\u00e1rios pr\u00e1ticos em APIs e microsservi\u00e7os.<\/p>\n","protected":false},"author":19,"featured_media":2854,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"yst_prominent_words":[],"_links":{"self":[{"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/posts\/2853"}],"collection":[{"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/comments?post=2853"}],"version-history":[{"count":1,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/posts\/2853\/revisions"}],"predecessor-version":[{"id":21221,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/posts\/2853\/revisions\/21221"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/media\/2854"}],"wp:attachment":[{"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/media?parent=2853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/categories?post=2853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/tags?post=2853"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/uds.com.br\/blog\/wp-json\/wp\/v2\/yst_prominent_words?post=2853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}