Vamos discernir desde o início:
O JWT é uma abordagem muito moderna, simples e segura, que se estende aos Json Web Tokens. Os Json Web Tokens são uma solução sem estado para autenticação. Portanto, não há necessidade de armazenar nenhum estado de sessão no servidor, o que obviamente é perfeito para APIs repousantes. APIs repousantes sempre devem ser sem estado, e a alternativa mais amplamente usada para autenticação com JWTs é apenas armazenar o estado de logon do usuário no servidor usando sessões. Mas, é claro, não segue o princípio que diz que APIs repousantes devem ser apátridas e é por isso que soluções como a JWT se tornaram populares e eficazes.
Então agora vamos saber como a autenticação realmente funciona com os Json Web Tokens. Supondo que já tenhamos um usuário registrado em nosso banco de dados. Assim, o cliente do usuário inicia fazendo uma solicitação de postagem com o nome de usuário e a senha, o aplicativo verifica se o usuário existe e se a senha está correta, o aplicativo irá gerar um Json Web Token exclusivo para esse usuário.
O token é criado usando uma cadeia secreta que é armazenada em um servidor . Em seguida, o servidor envia esse JWT de volta ao cliente, que o armazena em um cookie ou no armazenamento local.
Assim, o usuário é autenticado e basicamente está conectado ao nosso aplicativo sem deixar nenhum estado no servidor.
Portanto, o servidor de fato não sabe qual usuário está realmente logado, mas é claro que o usuário sabe que está logado porque possui um Json Web Token válido, que é um pouco como um passaporte para acessar partes protegidas do aplicativo.
Então, novamente, apenas para ter certeza de que você entendeu a idéia. Um usuário é logado assim que recebe de volta seu Json Web Token válido exclusivo, que não é salvo em nenhum lugar do servidor. E, portanto, esse processo é, portanto, completamente sem estado.
Então, sempre que um usuário deseja acessar uma rota protegida, como seus dados de perfil de usuário, por exemplo. Ele envia seu Json Web Token junto com uma solicitação, então é um pouco como mostrar seu passaporte para ter acesso a essa rota.
Depois que a solicitação chegar ao servidor, nosso aplicativo verificará se o Json Web Token é realmente válido e se o usuário realmente é quem ele diz ser. Bem, os dados solicitados serão enviados ao cliente e, caso contrário, haverá um erro ao dizer ao usuário que ele não tem permissão para acessar esse recurso.
Toda essa comunicação deve ocorrer por https, portanto, Http criptografado com segurança, a fim de impedir que qualquer pessoa possa ter acesso a senhas ou tokens da Web Json. Só então temos um sistema realmente seguro.
Portanto, um Json Web Token parece com a parte esquerda desta captura de tela que foi tirada do depurador JWT no jwt.io. Portanto, essencialmente, é uma sequência de codificação composta de três partes. O cabeçalho, a carga útil e a assinatura Agora, o cabeçalho são apenas alguns metadados sobre o próprio token e a carga útil são os dados que podemos codificar no token, quaisquer dados realmente desejados. Portanto, quanto mais dados queremos codificar aqui, maior o JWT. De qualquer forma, essas duas partes são apenas texto simples que serão codificadas, mas não criptografadas.
Para que alguém seja capaz de decodificá-los e lê-los , não podemos armazenar dados confidenciais aqui. Mas isso não é um problema, porque na terceira parte, na assinatura, é onde as coisas realmente ficam interessantes. A assinatura é criada usando o cabeçalho, a carga útil e o segredo que é salvo no servidor.
E todo esse processo é chamado de assinatura do Json Web Token . O algoritmo de assinatura pega o cabeçalho, a carga útil e o segredo para criar uma assinatura exclusiva. Portanto, apenas esses dados e o segredo podem criar essa assinatura, certo? Em seguida, juntamente com o cabeçalho e a carga útil, essas assinaturas formam o JWT, que é enviado ao cliente.
Depois que o servidor recebe um JWT para conceder acesso a uma rota protegida, ele precisa verificá-lo para determinar se o usuário realmente é quem ele afirma ser. Em outras palavras, ele verificará se ninguém alterou o cabeçalho e os dados da carga útil do token. Então, novamente, esta etapa de verificação verificará se nenhum terceiro realmente alterou o cabeçalho ou a carga útil do Json Web Token.
Então, como essa verificação realmente funciona? Bem, é realmente bem direto. Depois que o JWT é recebido, a verificação pega seu cabeçalho e carga e, juntamente com o segredo que ainda é salvo no servidor, basicamente cria uma assinatura de teste.
Mas a assinatura original que foi gerada quando o JWT foi criado pela primeira vez ainda está no token, certo? E essa é a chave para esta verificação. Porque agora tudo o que precisamos fazer é comparar a assinatura de teste com a assinatura original. E se a assinatura de teste for igual à assinatura original, significa que a carga útil e o cabeçalho não foram modificados.
Porque se eles tivessem sido modificados, a assinatura do teste teria que ser diferente. Portanto, neste caso em que não houve alteração dos dados, podemos autenticar o usuário. E, claro, se as duas assinaturas são realmente diferentes, bem, isso significa que alguém violou os dados. Geralmente, tentando alterar a carga útil. Mas o fato de terceiros manipularem a carga útil obviamente não têm acesso ao segredo, portanto não podem assinar o JWT. Portanto, a assinatura original nunca corresponderá aos dados manipulados. E, portanto, a verificação sempre falhará neste caso. E essa é a chave para fazer todo esse sistema funcionar. É a mágica que torna o JWT tão simples, mas também extremamente poderoso.
md5('original messaged' + secret) != md5('changed message' + secret)
portanto, se alguém alterar a mensagem, você poderá detectá-la #