Eu li alguns posts sobre "JWT vs Cookie", mas eles só me deixaram mais confuso ...
Eu quero alguns esclarecimentos , quando as pessoas falam sobre "autenticação baseada em token vs cookies", os cookies aqui se referem apenas a cookies de sessão . Meu entendimento é que o cookie é como um meio , ele pode ser usado para implementar uma autenticação baseada em token (armazenar algo que possa identificar o usuário conectado no lado do cliente ) ou uma autenticação baseada em sessão (armazenar uma constante no lado do cliente que corresponda às informações da sessão no lado do servidor )
Por que precisamos do token da web JSON ? Eu estava usando o cookie padrão para implementar a autenticação baseada em token ( sem usar a id de sessão, não usar a memória do servidor ou armazenamento de arquivo ) :,
Set-Cookie: user=innocent; preferred-color=azure
e a única diferença que observei é que o JWT contém carga útil e assinatura ... enquanto você pode escolher entre o cookie assinado ou de texto simples para o cabeçalho http. Na minha opinião, o cookie assinado (cookie:'time=s%3A1464743488946.WvSJxbCspOG3aiGi4zCMMR9yBdvS%2B6Ob2f3OG6%2FYCJM'
) é mais eficiente em termos de espaço, a única desvantagem é que o cliente não pode ler o token, apenas o servidor pode ... mas acho que está tudo bem porque, assim como a declaração no JWT é opcional, não é necessário que o token seja significativo
fonte
Visão geral
O que você está pedindo é a diferença entre cookies e tokens de portador para enviar JSON Web Tokens (JWTs) do cliente para o servidor.
Cookies e tokens de portador enviam dados.
Uma diferença é que os cookies são para enviar e armazenar dados arbitrários, enquanto os tokens de portador são especificamente para enviar dados de autorização.
Esses dados geralmente são codificados como um JWT.
Biscoito
Um cookie é um par nome-valor, que é armazenado em um navegador da web e que tem uma data de validade e domínio associado.
Armazenamos cookies em um navegador da web com JavaScript ou com um cabeçalho de resposta HTTP.
O navegador da web envia cookies automaticamente com cada solicitação ao domínio do cookie.
Token do portador
Um token do portador é um valor que entra no
Authorization
cabeçalho de qualquer solicitação HTTP. Não é armazenado automaticamente em nenhum lugar, não tem data de validade e não tem domínio associado. É apenas um valor. Armazenamos manualmente esse valor em nossos clientes e adicionamos manualmente esse valor ao cabeçalho de autorização HTTP.JWT e autenticação baseada em token
Quando fazemos autenticação baseada em token, como OpenID, OAuth ou OpenID Connect, recebemos um access_token (e às vezes id_token) de uma autoridade confiável. Normalmente, queremos armazená-lo e enviá-lo junto com as Solicitações HTTP para recursos protegidos. Como fazemos isso?
A opção 1 é armazenar o (s) token (s) em um cookie. Isso lida com o armazenamento e também envia automaticamente o (s) token (s) ao servidor no
Cookie
cabeçalho de cada solicitação. O servidor então analisa o cookie, verifica o (s) token (s) e responde de acordo.Outra opção é armazenar o token no armazenamento local / de sessão e, em seguida, definir manualmente o
Authorization
cabeçalho de cada solicitação. Nesse caso, o servidor lê o cabeçalho e procede como um cookie.Vale a pena ler os RFCs vinculados para saber mais.
fonte
Além do que o MvdD disse sobre o envio automático de cookies:
Em resumo: as postagens que você está lendo provavelmente estão comparando o JWT como um token de portador para um cookie de autenticação para fins de autenticação de navegador para servidor. Mas o JWT pode fazer muito mais, ele traz padronização e recursos para uso fora do caso de uso em que você provavelmente está pensando.
fonte
Embora os cookies possam aumentar o risco de ataques de CSRF por serem enviados automaticamente junto com as solicitações, eles podem diminuir o risco de ataques XSS quando o
HttpOnly
sinalizador é definido, porque qualquer script injetado na página não será capaz de ler o biscoito.CSRF: um usuário clica em um link (ou visualiza imagens) no site de um invasor, o que faz com que o navegador envie uma solicitação ao site da vítima. Se a vítima usar cookies, o navegador incluirá automaticamente o cookie na solicitação e, se a solicitação GET puder causar qualquer ação não somente leitura, o site da vítima estará vulnerável ao ataque.
XSS: um invasor incorpora um script no site da vítima (o site da vítima só é vulnerável se as entradas não são higienizadas corretamente), e o script do invasor pode fazer qualquer coisa que o javascript tem permissão para fazer na página. Se você armazenar tokens JWT no armazenamento local, o script do invasor poderá ler esses tokens e também enviar esses tokens para um servidor que ele controla. Se você usar cookies com o
HttpOnly
sinalizador, o script do invasor não será capaz de ler seu cookie para começar. Dito isso, o script que eles injetaram com sucesso ainda será capaz de fazer qualquer coisa que o javascript pode fazer, então você ainda está hospedado no IMO (ou seja, enquanto eles podem não ser capazes de ler o cookie para enviá-lo para seu próprio servidor para uso posterior , eles podem enviar solicitações ao site vicitim usando XHR, que incluirá o cookie de qualquer maneira).fonte
Ref - Necessário para JSON Web Token
Biscoitos
No caso de cookies, uma vez que o usuário tenha sido autenticado, o servidor do Gmail criará um ID de sessão único. Correspondendo a este id de sessão, ele armazenará na memória todas as informações do usuário necessárias ao servidor do Gmail para reconhecer o usuário e permitir a execução de operações.Além disso, para todas as solicitações e respostas subsequentes, este id de sessão também será passado. Portanto, agora, quando o servidor receber uma solicitação, ele verificará a id da sessão. Usar este id de sessão irá verificar se há alguma informação correspondente. Isso permitirá que o usuário acesse o recurso e retorne a resposta junto com o id da sessão.
Desvantagens dos cookies
JWT
fonte