O que são tokens web json (JWT)? Por que as APIs os usam?

Os JSON Web Tokens (JWT) descrevem um método compactado para transferências de dados verificáveis. Cada token contém uma firma que permite que a parte emissora verifique a integridade da mensagem.

Neste artigo, aprenda que inclui a estrutura JWT e cmo puede gerar sus propios tokens. O JWT é uma forma popular de proteger as APIs e autenticar as sessões dos usuários porque são simples e autônomos.

índice de conteúdo

  1. Cmo funciona com o JWT
  2. O formato JWT
  3. Criar um JWT
  4. Verificação de participantes do JWT
  5. Cundo usando JWT
  6. Resumo

Cmo funciona com o JWT

Una de las tareas ms comunes en cualquier API é validar que os usuários sean quienes dicen ser. A autenticação geralmente se maneja fazendo que o cliente inclua uma API clave com as solicitações que envai no servidor. La clave contém informacin incrustada que identifica al usuario. Está todava deja una gran pregunta: cmo puede el server validar que emiti la clave en primer lugar?

Los JW resuelven o uso de um problema secreto para firmar cada token. O servidor pode verificar a validade de um token intentando volver a calcular a firma apresentada usando seu secreto privado. Cualquier manipulacin har que la verificacin falle.

O formato JWT

Los JWT se forma a partir de três componentes distintos:

  • Encabezamiento – Esto incluye metadatos sobre el token s, como o animal de firma que se utiliza.
  • Carga até – A carga até o token pode ser qualificada como arbitrariamente relevante para seu sistema. Pode incluir a identificação do usuário e uma lista de características com as que podem interagir.
  • Firma – A firma permite validar a integridade do token no futuro. Se cria firmando o encabezado e a carga usando um valor secreto que só conhece o servidor.

Estes três componentes se unen con pontos para produzir o JWT:

 header.payload.signature

Cada peça está codificada usando Base-64. O token completo é uma sequência de texto que pode ser consumida facilmente nos ambientes de programação e enviar solicitações HTTP.

Criar um JWT

Os passos para criar um JWT podem ser implementados em todos os idiomas de programação. Este exemplo usa PHP para que o processo seja semelhante em seu próprio sistema.

Comience criando el encabezado. Esto generalmente incluye dos campos, alg y typ :

  • alg – El temh que se usar para criar la firma. Normalmente é HMAC SHA256 ( HS256 ).
  • typ – El tipo de token que está gerando. Esto debera ser JWT .

Aqui está o JSON que define o encabezado:

 { "alg": "HS256", "typ": "JWT" ​​}

O JSON deve ser codificado em Base64 na continuação:

 $headerData = [ "alg" => "HS256" , "typ" => "JWT" ​​] ; $header = base64_encode(json_encode($headerData));

A continuação, defina a carga até o token como outro objeto JSON. Esto es especfico de la aplicacin. O exemplo oferece detalhes da conta de usuário autenticada, como informacin sobre o token en s. exp , iat y nbf son campos que se utilizam por convencin para expressar a hora de caducidade do token, se emite a la hora y no son vlidos antes da hora (de inicio). A carga til tambin deve ser codificada em Base64.

 $payloadData = [ "userId" => 1001 , "userName" => "demo", "licensedFeatures" => [ "todos", "calendar" , "invoicing" ], "exp" => ( time() + 900 ), "iat" => hora() , "nbf" => hora() ] ; $payload = base64_encode(json_encode($payloadData));

Todo lo que queda é crear la firma. Para producir esto, primero combina el encabezado y la carga til en una sola cadena separada por un . personagem:

 $headerAndPayload = "$header. $payload";

A continuação, debe gerar um segredo nico para usar como clave de firma. O segredo deve ser enviado para os clientes. A exposição deste valor permitirá a criação de fichas vlidos.

 // Método PHP para gerar 32 caracteres aleatórios $secret = bin2hex(openssl_random_pseudo_bytes(16));

Complete o processo usando o secreto para firmar o encabezado combinado e a cadeia de carga usando o alimento que tem que ser indicado no encabezado. A firma de saída deve estar codificada em Base64 como los dems componentes.

 $signature = base64_encode(hash_hmac("sha256", $headerAndPayload, $secret, true));

Ahora tiene el encabezado, la carga til y la firma como componentes de texto individuales. nete a todos junto com . separadores para criar o JWT para enviar um cliente:

 $jwt = "$header. $payload. $signature";

Verificação de participantes do JWT

A aplicação do cliente pode determinar as funções disponíveis para o usuário ao decodificar a carga do token. Aqui tem um exemplo em JavaScript:

 const tokenComponents = jwt. dividir ( "." ) ; carga útil const = token [1]; const carga útilDecodificado = JSON. parse(atob(payload)); // ["todos", "calendário", "faturamento"] console. log ( payloadDecoded. LicensedFeatures ) ;

Um atacante pode darse cuenta de que estos data son text sin formato y parecem fciles de modificar. Podran tratar de acordo com o servidor de que tem uma função adicional, alterando a carga até o token em su prxima solicitação:

 // Cria um novo componente de carga útil constmodifiedPayload = btoa ( JSON. stringify ( { ... payloadDecoded , LicensedFeatures : [ "todos" , "calendar" , "invoicing" , "extraPremiumFeature" ] } ) ); // Costure o JWT de volta junto com o cabeçalho original e a assinatura const newJwt = `$ { token [ 0 ] } .$ {modifiedPayload } .$ { token [ 2 ] } `

A resposta a cmo se defiende o servidor de estos ataques radica no método utilizado para gerar a firma. El valor de la firma tiene en cuenta el encabezado e la carga til del token. Modificar la carga til, como en este ejemplo, significa que la firma ya no es vlida.

O cdigo do lado do servidor verifica os participantes do JWT al volver a calcular sus firmas. O token foi manipulado e a firma enviada pelo cliente não coincide com o valor gerado no servidor.

 $tamperedToken = $_POST["apiKey"]; list ( $header , $payload , $signature ) = $tamperedToken ; // Determina a assinatura que este token *deve* ter // quando o segredo do servidor é usado como a chave $expectedSignature = hash_hmac("sha256", "$header. $payload", $secret, true); // O token foi adulterado porque sua // assinatura está incorreta para os dados que ele inclui if ( $signature !== $expectedSignature ) { http_response_code ( 403 ) ; } // As assinaturas coincidem - nós geramos este // token e podemos confiar em seus dados com segurança else { $user = fetchUserById ( $payload [ "userId" ] ); }

É impossível que um ataque genere un token vlido sin accesso al secreto del servidor. Esto tambin significa que a prdida acidental, ou a rotacina deliberada, do secreto invalidar imediatamente todos os tokens divulgados anteriormente.

Em uma situação do mundo real, su cdigo de autenticação tambin deve inspecionar as marcas de tempo de vencimiento e "sem antes" na carga do token. Estos se utilizan para determinar si la sesin del usuario sigue siendo vlida.

Cundo usando JWT

O JWT é usado com frequência para a autenticação da API porque são os requisitos de implementação no servidor, os recursos de consumo no cliente e os simples de transmitir as passagens dos limites do vermelho. A pesar de seu sencillez tienen buena segurança porque cada token se firma com a clave secreta do servidor.

O JWT é um mecanismo sem estado, por isso não é necessário registrar informações sobre os tokens divulgados em seu servidor. Você pode obter informações sobre o cliente que apresenta um JWT a partir da carga até o token, no local de onde você realizará uma bsqueda em uma base de dados. Você pode confiar em esta informação de forma segura uma vez que tenha selecionado a firma do token.

O uso de JWT é uma boa opção que precisa trocar informações entre as partes sin riesgo de manipulacin. Sem embargo, hay puntos dbiles a tener en cuenta: todo o sistema se comprometido se filtra a clave secreta do servidor ou se seu cdigo de verificação de firma contém um erro. Por isso, muitos desarrolladores optam por usar uma biblioteca de cdigo aberta para implementar a geração e validação de JWT. As opções estão disponíveis para todos os idiomas de programas populares. Elimine o riesgo de supervisão cuando usted mismo verifica os tokens.

Resumo

O padrão JWT é um formato de troca de dados que inclui verificação de integridade integrada. O JWT é usado comnmente para proteger as interações entre os servidores API e as aplicações cliente. O servidor pode confiar nos tokens entrantes si pode reproduzir suas firmas. Isso permite que as ações sejam reali- zadas de maneira segura usando as informações obtidas da carga até o token.

Los JWT son convenientes pero tienen algunos inconvenientes. A representação textual codificada em Base64 de um JWT puede volverse grande rapidamente se tiver ms de um puado de campos de carga til. Esto podra converter em uma sobrecarga inaceitável quando seu cliente precisa enviar o JWT com cada solicitação.

La apatridia de los JWT tambin é otra desventaja potencial: una vez que se emiten, los tokens son inmutables y deben usese tal cual hasta que caduquen. Os clientes que usam blocos de JWT para determinar as permissões de um usuário ou as funções de licença necessárias para obter um novo token do backend cada vez que alterar suas atribuições.

  • 7 características que o Android deve roubar do iPhone
  • Cmo rotar um vídeo no Android

Descobre ms contenido

Que é um amplificador integrado?

Google Pixel Watch também tem detecção de cadas, pero no hasta el prximo ao

Las melhores tazas de caf calentadas de 2022

Cmo automatize seu iPhone segn el tiempo, la actividad ou la ubicacin

"Eso debe haber sido antes de mi tiempo"

Por qu la NASA enva a Snoopy a la Luna? – Revisando geek

O que é JWT na API?

Para autenticar um usuário, um aplicativo cliente deve enviar um JSON Web Token (JWT) no cabeçalho de autorização da solicitação HTTP para sua API de back-end. O API Gateway valida o token em nome de sua API, para que você não precise adicionar nenhum código em sua API para processar a autenticação.

O JWT é bom para autenticação de API?

A autenticação de API baseada em JWT é uma boa opção para proteger microsserviços em uma organização ou compartilhar APIs com determinados tipos de clientes externos . Os tokens JWT normalmente não são revogáveis. Para revogar um token JWT, você normalmente precisa rolar os segredos desse cliente – isso desativará TODOS os tokens JWT atualmente emitidos.

Como a API verifica o token JWT?

Consulte a lista de bibliotecas da fundação OpenID para trabalhar com tokens JWT.

  1. Etapa 1: confirme a estrutura do JWT. Um JSON Web Token (JWT) inclui três seções:
  2. Etapa 2: valide a assinatura JWT. A assinatura JWT é uma combinação em hash do cabeçalho e da carga útil.
  3. Etapa 3: verifique as reivindicações. Para verificar as reivindicações do JWT.

Como obtenho tokens JWT da API?

Obter um token JWT

  1. Fluxo Básico. Inicie uma solicitação HTTP usando credenciais de API e obtenha seu token JWT.
  2. Gerando um Token. Depois de configurar as credenciais, você pode fazer uma solicitação HTTP POST para gerar o JWT do seu aplicativo.
  3. O token recebido. Você receberá uma resposta no seguinte formato:
  4. Data de expiração do token.
Ir arriba