Em # 5, # 46 e na maioria das discussões online, as pessoas parecem usar o padrão de armazenamento local / armazenamento de sessão para JWTs, em vez de um cookie. Isso requer o uso de AJAX em todo o aplicativo para que o cabeçalho possa ser definido a partir do armazenamento da web todas as vezes. Meu entendimento é que isso evita falsificações de solicitação entre sites (e está essencialmente aproveitando a política de mesma origem para fazer isso).
Como isso se encaixa com o aprimoramento progressivo, onde alguns dispositivos não oferecem suporte a javascript?
_Outro_ _GREAT _ Pergunta do _Wizard_! : +1:
Para os fins deste micro-exemplo, acho que é "_Ok_" usar localStorage
.
Vamos ser honestos, _todo mundo_ está usando o React atualmente sem se preocupar com acessibilidade.
Todas as crianças legais estão _muito_ mais interessadas em _Shiny New Frameworks_ do que em _Progressive Enhancement _...
Contudo...
Em nosso aplicativo _atual_, estamos usando cookies
_precisely_ para compatibilidade com versões anteriores e aprimoramento progressivo.
É por isso que adicionamos a opção JWT2 ... consulte: https://github.com/dwyl/hapi-auth-jwt2#want -to-sendstore-your-jwt-in-a-cookie
Concluindo: eu adicionaria localStorage
ao exemplo neste repo e adicionaria comment
informando às pessoas que usar cookies para armazenar JWTs é "_Ohkay_" porque você ainda obtém toda a _escalabilidade horizontal_ e segurança benefícios de usar JWTs enquanto economiza o _esforço_ de ter que definir / obter o JWT e adicioná-lo aos cabeçalhos em cada solicitação ...
@rjmk e @nelsonic
há um motivo específico para o JWTS armazenado no armazenamento local ser enviado nos cabeçalhos ou há algo vulnerável / "errado" sobre o uso de https://www.npmjs.com/package/node-localstorage?
@Jbarget você está construindo um "_Universal_" que requer que você tenha acesso a localStorage
no servidor? Se esse for o seu caso de uso, o módulo node-localstorage
servirá ao seu propósito.
_No entanto_ você ainda terá que _manualmente_ enviar o JWT no header
para enviá-lo de volta ao servidor em solicitações "AJAX" ... então não há muita vantagem em usar um _module_ se tudo o que você deseja fazer é obter / definir o token para / de localStorage
...
@nelsonic provavelmente acabaremos definindo-o nos cabeçalhos de cada solicitação, obrigado pela clareza!
@Jbarget , você tem uma _objeção_ para armazenar o JWT em um cookie? (_ simplifica a sua vida ..._)
@nelsonic sem objeção, estou certo em pensar que simplifica minha vida ao ser capaz de acessar os cookies de qualquer lugar no aplicativo, em vez do armazenamento local / por sessão?
Isso simplifica seu aplicativo porque, uma vez que o cookie é _set_ pelo servidor, _todas as solicitações enviadas / recebidas sempre conterão o cookie. o que significa que você _nunca_ precisa _pensar_ sobre isso depois desse ponto.
Por outro lado, armazenar o JWT em localStorage
significa que você não pode ter interação não-ajax e deve se lembrar de SET
o cabeçalho auth
para cada solicitação feita ao servidor. .
Não necessariamente, embora isso dependa do seu conjunto de ferramentas. Angular, por exemplo, permite que você defina isso uma vez .. eu acho que você pode até mesmo fazer com jquery facilmente.
$.ajaxSetup({
headers: { 'x-my-custom-header': 'some value' }
});
Outro problema com os cookies como camada de transporte para tokens é que você está usando 2 tempos limite e não obtém o benefício de evitar problemas de CORS. Os cookies complicam o acesso aos serviços da Web RESTful. É muito mais fácil construir um curl one liner para acessar um recurso com um token do que empacotá-lo em um cookie.
Este problema está sendo encerrado automaticamente porque tem mais de um ano. Sinta-se à vontade para reabri-lo se ainda for relevante para o seu projeto.
Comentários muito úteis
Não necessariamente, embora isso dependa do seu conjunto de ferramentas. Angular, por exemplo, permite que você defina isso uma vez .. eu acho que você pode até mesmo fazer com jquery facilmente.
Outro problema com os cookies como camada de transporte para tokens é que você está usando 2 tempos limite e não obtém o benefício de evitar problemas de CORS. Os cookies complicam o acesso aos serviços da Web RESTful. É muito mais fácil construir um curl one liner para acessar um recurso com um token do que empacotá-lo em um cookie.