Como implementar Refresh Token em uma aplicação com Node? - Code/drops #88

Поделиться
HTML-код
  • Опубликовано: 7 ноя 2024

Комментарии • 191

  • @nathanguedes7726
    @nathanguedes7726 3 года назад +143

    quem precisa apenas do refresh token pode pular para 52:37 mas caso esteja aprendendo node e interessante ver o video inteiro pois mostra todo processo de criar uma autenticação

    • @rocketseat
      @rocketseat  3 года назад +2

      💜

    • @ocabrapreto5346
      @ocabrapreto5346 2 года назад +2

      nem todo herói usa capa

    • @weslleymatheus3643
      @weslleymatheus3643 2 года назад +1

      cara no video ela usou uma variavel com um certo nome e depois se arrependeu. 23:45 dai ela selecionou tdas simultaneamente e alterou. Como faz isso??? Eu sempre altero uma a uma na mao kkkkkkkkkkkkkk

    • @mathe1996
      @mathe1996 2 года назад +2

      @@weslleymatheus3643 seleciona a variavel, e vai apertando CTRL + D pra selecionar as outras

    • @weslleymatheus3643
      @weslleymatheus3643 2 года назад +1

      @@mathe1996 vlw muito, ajudou bastante vissi. Pior que eu faço essas coisas manualmente kkkk tiver mais dica, passa ai.

  • @danielsantiago4958
    @danielsantiago4958 3 года назад +51

    A ideia da aula é implementar Refresh Token, mas deu muita volta e explicou muita coisa desde criar uma api do zero, pra quem está começando é ótimo, mas pra quem só quer ver sobre a ideia principal demora muito, era bom ao menos colocar a linha do tempo pra quem quiser pular só pro conteúdo principal poder pular.

    • @nan-code
      @nan-code 3 года назад +1

      É os tópicos do vídeo na descrição séria muito melhor e acessível.

    • @arthursantos974
      @arthursantos974 3 года назад

      @@nan-code coloquei no 2x e fiquei pulando pra acha a parte do refresh

    • @rocketseat
      @rocketseat  3 года назад +4

      Faaaaala, Daniel!
      Valeu demais pelo feedback e pelas sugestões! Vou passar pro time! 💜 😉

    • @gustavoseixas777
      @gustavoseixas777 3 года назад

      @@rocketseat Eu achei o video mais do que excelente, do jeito mesmo em que está. Parabéns!

  • @danilosampaio1756
    @danilosampaio1756 3 месяца назад

    Quebrou meu galho mais uma vez. Danielle Leão se garante demais. Meu Ignite fiz com ela.

  • @AnthonyDev
    @AnthonyDev 2 года назад +5

    Que aula maravilhosa, assisti todinha. Já que a Dani saiu, alguém da Rocketseat poderia refazer esse mesmo vídeo de refresh token mas usando NestJs, Postgresql e prisma. 😊

    • @matheusaraujo8617
      @matheusaraujo8617 2 года назад +1

      ela saiu da rocketseat?

    • @AnthonyDev
      @AnthonyDev Год назад +1

      @@matheusaraujo8617 Saiu, mas ela tem um canal próprio muito bom também!

  • @MuriloHenriqueA
    @MuriloHenriqueA 3 года назад +36

    Lembrando que autorizar um refresh_token já expirado pode trazer uma brecha na segurança, o ideal é gerar um novo refresh_token sempre que o atual for utilizado e se o atual estiver expirado retornar um erro de refresh_token expirado.

    • @fernandoalcantar4
      @fernandoalcantar4 3 года назад +2

      e se o refresh token expirar faz oq? manda fazer login de novo?

    • @MuriloHenriqueA
      @MuriloHenriqueA 3 года назад +1

      @@fernandoalcantar4 exatamente, se o refresh token é válido, gera um novo token e um novo refresh token, se não for mais válido retorna erro 403 unauthenticated e sucesso.

    • @fernandoalcantar4
      @fernandoalcantar4 3 года назад +2

      @@MuriloHenriqueA por exemplo o refresh token venceu apos 3 minutos ai automaticamente ja muda pra um atualiza um novo token de acesso e um novo refresh token? e fica nessa rotaçao de token infinitamente? isso nao sobrecarrega o sistema nao com novas solicitaçoes todo minutos?

    • @mirandamon2533
      @mirandamon2533 3 года назад

      @@fernandoalcantar4 eu faria isso....

    • @matheusmarques841
      @matheusmarques841 Год назад

      @carlos.chea interessante seu jeito de pensa no último comentário aqui, mas se o cara que tiver acesso ao banco souber qual o modelo de criptografia, ele vai poder descriptografar

  • @patricknascimento1690
    @patricknascimento1690 3 года назад +3

    Dani é maravilhosa, me ajudou muito diversas vezes ... Sucesso linda...

    • @rocketseat
      @rocketseat  3 года назад

      A Dani é fera demais, né, Patrick? 💜

  • @santinha495
    @santinha495 3 года назад +1

    Parabéns! rocketseat é super necessária para a comunidade dev BR

    • @rocketseat
      @rocketseat  3 года назад

      Faaaaala, Jhonatan!
      Que feedback maravilhoso de se ler! Valeu demais pelo carinho! 💜
      Boooora pra cima com a gente! 🚀

  • @gabrielcastro1285
    @gabrielcastro1285 2 года назад +1

    Galera a rocket, o conteúdo de vocês são muitos bons, só uma ideia, seria da hora vocês (no caso de vídeos como esse, que usa conceitos) colocar uma espécie de diagrama, não sei se é essa a pegada do code/drops mas certamente ficaria mt bom pra ensinar sobre refresh token, já que ele é um conceito, i.e. vai além do código.

  • @AnselmoLimamil
    @AnselmoLimamil 3 года назад +2

    Ótimo vídeo! Mais uma vez a Rocket junto à seus instrutores, inovando com tópicos diferenciados. Parabéns Dani...

    • @rocketseat
      @rocketseat  3 года назад

      Valeu demais pelo feedback, Anselmo! Que massa que curtiu! 💜 🚀

  • @bernabernaber
    @bernabernaber 2 года назад

    not know , but just know you've affected my life, and apparently tens of thousands of others, in an imnsely positive way. Thank you

  • @pedrocamaforte
    @pedrocamaforte 2 года назад +9

    Fiquei apenas com uma dúvida: qual o sentido do access token ter um tempo de expiração, se ele sempre será automaticamente atualizado pelo refresh token? Se um usuário malicioso conseguir roubar nosso token, imagino que o tempo de expiração serviria justamente para impedir a utilização discriminada do mesmo. Porém, se o usuário possuir o token e se passar pelo alvo de quem o roubou, o refresh token não enviaria um novo access token assim que o anterior expirasse? O atacante não teria, então, acesso constante às informações de seu alvo?

    • @GabrielHildebrandt1
      @GabrielHildebrandt1 2 года назад +1

      Recomendo esse vídeo pra explicar o assunto - ruclips.net/video/t5iumvSNbgM/видео.html

    • @edvirislaudo1602
      @edvirislaudo1602 4 месяца назад

      Isso não aconteceria pois para criar um novo access token e necessário antes validar o refresh token, ou seja uma pessoa que tem apenas acesso ao nosso access token não conseguiria criar um novo acesso token já que pra isso também é necessário ter o refresh token

  • @vitorgouveia5378
    @vitorgouveia5378 3 года назад +1

    Bem legal o vídeo, pena que não veio antes de eu implementar em um projeto que estou trabalhando kkkk
    eu não concordo muito com a parte de guardar os refresh token no banco de dados, eu acho que isso meio que tira o sentido do JWT mas é muito melhor na hora de invalidar as sessões do usuário
    parabéns pelo ótimo contéudo

  • @michelpf1
    @michelpf1 3 года назад +2

    Desculpe se a pergunta é básica, mas a forma que a API foi organizada, como por exemplo usando os Casos de Uso (pasta "useCases") se refere algum padrão específico de arquitetura? Achei bem interessante.

    • @LucasSilva-pe8sw
      @LucasSilva-pe8sw 3 года назад +1

      Acho que é algo de arquitetura limpa

    • @lucascoelho7558
      @lucascoelho7558 2 года назад

      O Use Cases poderia ser organizado como services?

  • @renandmc
    @renandmc 3 года назад +3

    Aí sim, tava precisando disso hj msm, vlw demais!!

    • @rocketseat
      @rocketseat  3 года назад +1

      Que massa, Renan! 💜 🚀

  • @EduardoChiletto
    @EduardoChiletto 3 года назад +1

    Sensacional! Queria ter me ligado nisso antes de ter feito uma dúzia de apis aqui...

    • @rocketseat
      @rocketseat  3 года назад

      Que massa que curtiu, Edu! Ahh! Importante é que agora você sabe! 💜 🚀

  • @peroconino
    @peroconino 3 года назад

    Toppp demais Dani eu tava precisando dms aprender a fazer isso no back e vc veio bem na hora com uma solução, obrigadissimo

    • @rocketseat
      @rocketseat  3 года назад

      Que show, Leandro! Bem no time então! Conseguiu resolver seu problema? 💜 🚀

  • @wmsaudeserradourada7462
    @wmsaudeserradourada7462 2 года назад

    Mr. Dr. Prof. Patrick appreciate it man

  • @itxToledo
    @itxToledo 3 года назад +5

    Nao precisa renomear cada arquivo, no vscode é só você apertar f2 com o que você quer alterar selecionado que ele já altera em todos os lugares que utilizada aquilo

    • @rocketseat
      @rocketseat  3 года назад

      Woow!
      Valeu demais por compartilhar essa dica com a gente! 😉 💜

  • @davecodarcomigo2331
    @davecodarcomigo2331 3 года назад

    amo sua forma de ensinar

    • @rocketseat
      @rocketseat  3 года назад

      Ela manda bem demais, né? 💜 🚀

  • @weslleygomes1799
    @weslleygomes1799 2 года назад +1

    Salvar os refresh tokens no banco de dados dessa forma não seria uma falha de segurança, visto que um funcionário com acesso ou uma database leak faria com quem fosse possível acessar essas contas com o refresh token válidos no banco? Qual seria a solução? O Redis resolveria esse problema? E os refresh tokens expirados, só seriam apagados quando algum endpoint de autenticação fosse chamado?

  • @gabrielbenites6679
    @gabrielbenites6679 3 года назад +11

    impressionante como a rocketseat tem a capacidade de ler mentes

    • @rocketseat
      @rocketseat  3 года назад

      Wooow! Boa! HAHAHAHA
      Te ajudamos, Gabriel!? 👀 💜

    • @GHkatu
      @GHkatu 3 года назад

      Não é...

    • @arthurmendespereira6829
      @arthurmendespereira6829 3 года назад

      Eu penso a mesma coisa, sempre que eu preciso de alguma coisa, aparece aqui

  • @ffpthai
    @ffpthai 3 года назад +2

    Existe algum motivo para não usar JWT também para o refresh token?

  • @vitorwindberg4212
    @vitorwindberg4212 3 года назад +6

    Façam um vídeo mostrando como implementar o jwt com o refreshtoken no frontend com React de forma segura, seria muiiiiiiiito top!!!

    • @rocketseat
      @rocketseat  3 года назад

      Faaaaaala, dev! Opa, sugestão anotada aqui! 💜 🚀

    • @Rolcs
      @Rolcs 2 года назад +2

      @@rocketseat Quando terá?

  • @joaolima7194
    @joaolima7194 Год назад

    Esse Refresh Token, eu posso armazenar ele no meu localStorage?? Sei que tem riscos de XSS attack, dai estou na duvida de aonde posso armazenar ele. Parabéns pela aula!!! Ótima didática.

  • @neliobila
    @neliobila Год назад

    Salve Dani, qual é a vesão desse dayjs? o meu não apanha a função isAfter

  • @letsgoota
    @letsgoota 3 года назад +1

    Ai Dani top video, to direto mexendo com JWT e refresh mas ainda me bato em como interceptar no front quando o JWT expira, já fiz com o interceptor nas requisições mas achei muito ruim dessa maneira, seria daora um video sobre como interceptar no front a sessão invalida

    • @danielsantiago4958
      @danielsantiago4958 3 года назад +1

      Para saber se um token está expirado é só comparar : "jwt.exp < Date.now().valueOf() / 1000", se for menor você vai saber que expirou.

    • @danielsantiago4958
      @danielsantiago4958 3 года назад +1

      Ah, tem que usar a biblioteca "jwt_decode" para decodificar um jwt para ai sim poder fazer essa comparação.

    • @rocketseat
      @rocketseat  3 года назад

      Faaaaala, José!
      Opa, excelente ponto! Anotei sua sugestão aqui! 💜 😉

  • @digogts
    @digogts 2 года назад +1

    Seria ótimo um video com mais detalhes do Prisma. Configurar ambientes de homologação e produção, estrutura de pastas e etc...

  • @andreghisleniraimann
    @andreghisleniraimann 3 года назад

    Ótimo vídeo, só uma duvida, qual é essa versão do Insomnia??

  • @wilsonreis1381
    @wilsonreis1381 3 года назад

    Bom demais.
    Gratidão pelo conteudo.

  • @InternetenegociosBrasil
    @InternetenegociosBrasil 2 года назад

    Excelente aula, parabéns!

  • @robsoncampos7884
    @robsoncampos7884 3 года назад +2

    Só não vi onde está o código ? link ?

  • @lucasrodrigues3041
    @lucasrodrigues3041 3 года назад

    Muito bom!Mas aí ao efetuar login, o refreshToken é tbm retornado e fica armazenado no localStorage? 🤔

  • @BrunoMouraNascimento
    @BrunoMouraNascimento 3 года назад +1

    Dani, você pode colocar a configuração (JSON), do seu VS Code? Vejo que sempre que você inicia um projeto, o seu lint já funciona normalmente, mesmo sem nenhuma configuração adicional no projeto.

  • @gabrielmariano5116
    @gabrielmariano5116 2 года назад

    Fiquei na dúvida no fluxo. Digamos que tem essa rota /courses. Eu devo passar refresh_token como middleware dessa rota ou ele tem que chamar a rota refresh_token junto com a courses?

    • @superv1773
      @superv1773 2 года назад

      Colocando a função ensuredAuthenticated como middleware, a unica coisa que você precisa fazer na requisição é colocar no header authentication da sua chamda HTTP o bearer token

  • @jeffersonsilva9365
    @jeffersonsilva9365 2 года назад

    Sensacional 🚀

  • @pedrogabriellima7484
    @pedrogabriellima7484 2 года назад +1

    Existe algum repositório onde posso encontrar este código?

  • @fernandotozetto7263
    @fernandotozetto7263 3 года назад +1

    Gostaria de fazer uma pedido para a teacher Dani Leão, poderia fazer um vídeo mostrando paginação com express e typeORM?
    Muito Obrigado. 🙏

    • @rocketseat
      @rocketseat  3 года назад +2

      Faaaala, Fernando! Anotei sua sugestão aqui, viu? Valeu demais! 💜 🚀

  • @agled
    @agled 3 года назад

    Valeu Dani!!!! muito bom!

    • @rocketseat
      @rocketseat  3 года назад

      Que massa que curtiu, Felipe! 💜 🚀

  • @Henzo17
    @Henzo17 3 года назад

    Acabei de terminar a trilha de node da Nlw6 e encontro esse vídeo!

    • @rocketseat
      @rocketseat  3 года назад +1

      E o que achou? 👀 💜

    • @Henzo17
      @Henzo17 3 года назад

      @@rocketseat muito bom né, como sempre!

  • @ElderPinto
    @ElderPinto 3 года назад

    Irado o vídeo! Cadê o link do repo?

  • @AndrelinoSilvas
    @AndrelinoSilvas 3 года назад

    Parabéns! Excelente conteúdo!

    • @rocketseat
      @rocketseat  3 года назад +1

      Que massa que curtiu, Andrelino! 💜 😍

  • @tercioalmeida1643
    @tercioalmeida1643 Год назад

    Pra resolver esse problema do node é bom usar um nodemon, bom de mais regarrega sempre que algo no codigo muda

  • @15Minuttos
    @15Minuttos 2 года назад

    Para dar um update no usuario, você criar um novo arquivo UserUpdateUseCase ? com controller e tudo ou utiliza esse mesmo ?

  • @rsjhon90
    @rsjhon90 3 года назад

    Ficou um pouco confuso no final haha. Mas foi.
    Tenho uma dúvida:
    Em que exemplo de cenário o usuário teria vários refresh-tokens salvos? Utilizando dessa forma de guardar eles num banco, não teria muitos dados sem uso?

    • @glaysonolivieri6938
      @glaysonolivieri6938 2 года назад

      Em minha experiência sim, para auditoria e uso interno, como tracking é interessante, mas pra aplicação não faz muito sentido. Aí pra resolver isso eu recomendo usar dynamodb com time to live ou um redis. Qualquer banco de dados com expiração do registro já acho uma boa. Muito boa a pergunta por sinal.

  • @tiagodev0034
    @tiagodev0034 2 года назад

    Does it support for windows 10?

  • @romuloluis8992
    @romuloluis8992 3 года назад

    Mesmo não entendo nada (iniciante ainda) e de front end por cima kkkkk mas tô aqui só pra dar o like mermo ksjsjdjd

    • @rocketseat
      @rocketseat  3 года назад

      Valeu demais pelo carinho, Romulo! 😍 💜

  • @matheusmarques841
    @matheusmarques841 Год назад

    Queria saber qual o plug-in que ela usa pra cálcular o tamanho dos imports.

  • @EdZava
    @EdZava 3 года назад

    Ja saiu o video sobre Prisma ?

  • @leocarey6107
    @leocarey6107 2 года назад

    👏👏👏👏
    Muito bom!

  • @monizeoliveira6859
    @monizeoliveira6859 2 года назад

    very good tutorial . very clean . i am happy you didn't start digging deep into any specific feature - sotNice tutorialng that happens to too many

  • @ryanfmatos
    @ryanfmatos 3 года назад

    O problema que eu vejo utilizando o token na minha aplicação é que, se por um acaso alguém tiver acesso ao token e ao refresh token de outro usuário, essa pessoa mal intencionada tem da mesma forma acesso irrestrito à conta da vítima.
    Dependendo da forma que o refresh token for gerado, e sua data de expiração, pode acarretar em problemas gravíssimos.
    Comecei recentemente a me preocupar bastante com a questão de segurança num projeto que estou desenvolvendo, e como foi falado num PR que envolveu serviços de segurança, creio que a melhor forma de deixar a aplicação realmente segura é com 2FA ou com verificação por IP, pensando na ideia de trabalhar com jwt

  • @EulerAlvarenga1
    @EulerAlvarenga1 2 года назад

    teve o github?

  • @edmengo2
    @edmengo2 2 года назад +1

    Show d+!!!

    • @rocketseat
      @rocketseat  2 года назад +1

      Faaaaaala, dev! Valeu demais! 😍 💜

  • @danifreitas1662
    @danifreitas1662 2 года назад

    and build tracks from there and leave the rest for a later session. I did both but did the first way initially and it took a day to get through

  • @MAAXI279
    @MAAXI279 2 года назад

    usando um refresh token como este, você só poderia ter uma sessão ativa, certo? Caso um usuário tenha mais de um dispositivo, como ele pode permanecer conectado em ambos sem sair?
    Muito obrigado, sou fã dos seus code drops!!! saudações da Argentina

    • @weslleygomes1799
      @weslleygomes1799 2 года назад

      O refresh token deve ser único por dispositivo. Da forma que ela implementou, você está correto, só há como manter logado um dispositivo, mas isso pode ser facilmente alterado permitindo salvar mais de 1 refresh token no banco. A forma que você iria fazer dependeria da rua regra de negócio, você pode só permitir vários refresh tokens, você pode limitar por um número fixo, pode limitar por dispositivos e, por exemplo, dar nome aos cliente, tipo "web" e "mobile" e apenas permitir esses 2 refresh tokens, você também pode associar com o ip, pode salvar outras informações do dispositivo e por aí vai.

    • @weslleygomes1799
      @weslleygomes1799 2 года назад +1

      Caso queira manter o mesmo refresh token para múltiplos dispositivos, você pode buscar no banco e retornar ao usuário nos outros dispositivos, caso já exista um. Acredito que não seria uma boa prática, talvez alguém possa acrescentar.

    • @superv1773
      @superv1773 2 года назад

      @@weslleygomes1799 O que eu acho que dá também é criar uma tabela no banco de dados para armazenar todos os refreshTokens associado aos userIds

    • @denernun
      @denernun 2 года назад

      No refresh token, além do id do usuário, ou nem isso, vc salva o id do registro do banco...então cada login é único e tem seu id refresh token próprio, além que dessa forma, vc tem salvar o dispositivo que acessou,

  • @gustanobreza
    @gustanobreza 3 года назад

    O Prisma é sensacional!!!
    😍

  • @simplesmesmo7069
    @simplesmesmo7069 3 года назад

    Uma aula sobre o prisma seria DEVeras interessante!

    • @rocketseat
      @rocketseat  3 года назад +1

      Gostei desse seu 'commitário'... 👀 🤣
      Anotada sua sugestão! Pessoal pede demais por aqui mesmo! 💜 😛
      Por hora, deixo esse vídeo que o Diego comenta um pouco sobre:
      *Prisma 2: Automatize o acesso ao banco de dados | Code/Drops #29*
      ruclips.net/video/2iS3SHwft0k/видео.html
      💜 🚀

    • @simplesmesmo7069
      @simplesmesmo7069 3 года назад

      @@rocketseat 💜💜

  • @Rafa-yb7or
    @Rafa-yb7or 3 года назад

    Dani gostei muito da explicação mas não pude deixar de notar que esse refresh token é muito inseguro, qualquer pessoa que solicite uma requisição com apenas com o refresh token consegue se autenticar, a solução para isso seria capturar o ip do user. Vlw!

    • @superv1773
      @superv1773 2 года назад

      È que você só tem acesso ao refresh token se fizer o primeiro login com usuário e senha. É claro que entre o tempo do login e da expiração, que deve ser curta, se alguem invadir seu browser e pegar o refresh token, ele pode ficar dando refresh e utilizando o seu login

    • @denernun
      @denernun 2 года назад

      @@superv1773 exato, por isso o sistema precisa ter a opção de revogar todos os acessos, que seria apenas apagar esses refresh tokens do banco

  • @coda.fofo123
    @coda.fofo123 2 года назад

    Esse código fonte está disponível no github?

  • @lucasdeveloper7703
    @lucasdeveloper7703 2 года назад

    Com o prisma não há mais a necessidade de se criar uma camada de repositórios iguais as que criamos com o typeorm?

    • @denernun
      @denernun 2 года назад

      Isso é uma questão de projeto, ela fez assim para facilitar as coisas, mas uma camada de reposítório é sempre uma boa escolha, já que as demais camadas não devem saber como está sendo feito o acesso ao banco, apenas chama os métodos e pronto. Repositório é apenas um padrão de projeto, que vc pode ou não seguir.

  • @thiagoluiz3011
    @thiagoluiz3011 3 года назад

    Vim pelo Patrick, da caravana de Criciúma.

  • @silasbispo01
    @silasbispo01 2 года назад

    É realmente necessário salvar o refresh token no banco de dados?

    • @denernun
      @denernun 2 года назад

      Sim, vc pode deixar no redis também, o importante é ter um mecanismo para saber se o refresh token é válido, ou seja, se alguém roubar seu token e seu refresh token, você precisa ter como revogar o refresh token, aí não consegue mais renovar o token, a não ser que o cara pegou seu usuário e senha, aí não tem jeito.

  • @editaai
    @editaai 2 года назад

    It's been a wild ride.

  • @Minthoren
    @Minthoren 3 года назад

    Muito bom!!

    • @rocketseat
      @rocketseat  3 года назад

      Que bom que curtiu, Murilo! 💜

  • @MatheusFLopes-ic1vo
    @MatheusFLopes-ic1vo Год назад

    Qual o nome desse tipo de arquitetura?

  • @BillRocha
    @BillRocha 3 года назад

    Tem o código pronto - tipo github?!

  • @raulrothschild
    @raulrothschild 2 года назад

    Cara eu vi o tutorial inteiro menos os ultimos 3 minutos. E tava dando a merda do erro de chave unica na tabela, fui descobrir dps de umas 3hrs

  • @ads05dev20
    @ads05dev20 2 года назад

    Tudo bom Dani? mudei um pouco, criei um middlewares onde verifico se esta vencido e atualizo setando no header, porem localmente funcionou normal setando, meu problema foi quando coloquei em um container em nuvem, parou de setar, eu acredito que seja tempo de resposta. já tentou fazer setando no header o token novo?

    • @alissonalves3304
      @alissonalves3304 2 года назад

      Opa amigo, tudo bem? era essa implementação que to buscando e até agora não consegui, poderia me explicar como você fez?

  • @lucas_badico
    @lucas_badico 3 года назад +1

    Comunidade de devs linda. Me tirem uma dúvida antiga. Se a idéia de fazer o token ter vida curta é pra aumentar a segurança no caso de um roubo de sessāo por exemplo. O refresh token nāo sofre do mesmo risco? Alguém nāo pode roubar o meu refresh token e recuperar um token meu. Alguém tem material explicando pq mesmo assim o refresh é o mais recomendado?

    • @naoseioquecriar
      @naoseioquecriar 3 года назад

      acho que tu deverias era estudar sobre JWT antes de vir perguntar besteira.

    • @kalabresa4329
      @kalabresa4329 3 года назад +1

      Também fico imaginando a msm coisa, se o refresh vazar vai dar ruim do mesmo jeito

    • @ferco0
      @ferco0 3 года назад

      Isso é quase a mesma coisa que manter uma sessão no banco de dados, ainda prefiro manter os dados da sessão do que me preocupar em administrar isso(expiração/refresh, etc...), se salvasse de ler algo no banco de dados aí sim valeria a pena. O lance da sessão é q você pode por um id no token e de tempos em tempos, ou por qualquer critério que você achar melhor(troca de ip?), fazer a checagem no banco de dados, pode até comparar o userAgent pra dar um reforço, e quando o usuário deslogar vc apaga o id no banco e inválida o token, por conta do id dele não existir no banco de sessões.

    • @lucas_badico
      @lucas_badico 3 года назад +2

      @@naoseioquecriar olha, eu já estudei. E pode sim ser besteira, mas as respostas mais generosas são muito mais úteis q essa tua cuspida de palavras vazia.

    • @naoseioquecriar
      @naoseioquecriar 3 года назад

      @@lucas_badico já estudou? eu acredito que não; para vir com pergunta idiota é porque deve copiado/colado alguma coisa de um site e na hora de PROGRAMAR SÉRIO deve ter ficado perdido. Sobre a "cuspida de palavras vazias" ohhhh vou chorar aqui, com licença ahahahahahahah

  • @gustavoseixas777
    @gustavoseixas777 3 года назад +1

    Como armazeno de forma segura o 'refresh-token' no 'front-end', tanto para mobile ou web?
    Alguém pode indicar uma boa solução ou apontar algum vídeo que trate do assunto?

    • @ilovemacross
      @ilovemacross 2 года назад

      localstorage ou cookies, sobre mobile não sei, mas existe várias abordagens

  • @matheusalencar6708
    @matheusalencar6708 3 года назад

    Armazenar o refresh token no BD não viola a restrição stateless do REST? Acho que deixa a API stateful, oq vcs acham?

    • @itxToledo
      @itxToledo 3 года назад

      Depende do que se trata, se for uma aqui onde uma máquina vai utilizar não se deve usar o refresh token e sim uma chave de api. Como aqui é sobre autenticação você deve salvar o refresh token no db pra poder ter a função de deslogar o usuário

    • @matheusalencar6708
      @matheusalencar6708 3 года назад

      @@itxToledo mas refresh token n eh usado para autenticação, e sim pra atualizar o token de acesso. A galera implementa o token de acesso usando JWT já para não criar estado na API, mas da forma q ela implementou o refresh token, salvado ele no BD, a api n se torna stateful?

    • @itxToledo
      @itxToledo 3 года назад

      @@matheusalencar6708 existem dois tipos de api: a que vai ser usado em um site pro usuário fazer login e usar o site, e a api que você usa em serviços como a api do telegram por exemplo. No segundo caso você não precisa de salvar refresh token porque o token que você vai usar é uma chave de api, esse sim é restful. No primeiro caso não tem necessidade de ser restful porque você precisa necessariamente controlar se aquele usuário invalidou o token que ele gerou quando fez login, isso é necessário por motivos de segurança pra evitar que alguém pegue o jwt que você tem salvo no navegador e use em outro

    • @matheusalencar6708
      @matheusalencar6708 3 года назад

      @@itxToledo entendi, mas eu to fld num contexto de uma API REST. O primeiro exemplo que você deu eh a forma tradicional que a maioria dos sites de antigamente faziam, geralmente utilizando session. Mas numa API restful session n combina pq cria estado, e do jeito que ela implementou o refresh token, ao meu ver, está sendo criado estado no servidor. Tendeu brother??

    • @itxToledo
      @itxToledo 3 года назад

      @@matheusalencar6708 mas tem que ser desse jeito, se não você diminui a segurança permitindo que alguém salve o jwt do seu navegador e use em outro

  • @joao_caicara
    @joao_caicara 2 года назад

    E se fosse com SOLID?

  • @arthursantos974
    @arthursantos974 3 года назад +2

    Ótimo conteúdo, não vi o código no github

    • @rocketseat
      @rocketseat  3 года назад

      Faaaaala, Arthur!
      Vou pedir pra ela subir o código pra vocês! 😉 💜

    • @sombrakey
      @sombrakey 3 года назад

      @@rocketseat Já está disponível ?

  • @RodrigoAlmeida22
    @RodrigoAlmeida22 3 года назад +9

    Nunca concordo com esse argunto mencionado em 34:10, onde sempre dizem pra vc não retornar a mensagem de erro "usuário já cadastrado" pra evitar, por exemplo, que um "hacker" tenha conhecimento se o email já existe no sistema ou não. Isso porque para verificar essa informação bastaria cadastrar um novo usuário com esse email e vc saberia se ele já está ou não cadastrado no sistema.
    Existem muitas outras técnicas pra tornar aplicação mais segura, mas essa idéia de não mencionar se a senha ou o email estão incorretos não torna a aplicação mais segura.

    • @itxToledo
      @itxToledo 3 года назад +1

      A ideia do login é você não informar precisamente o erro, nenhuma empresa faz isso

    • @RodrigoAlmeida22
      @RodrigoAlmeida22 3 года назад +10

      @@itxToledo Essa idéia é repassada em vários tutoriais e artigos na internet, mas não ajuda na questão de segurança uma vez que é possível obter essa informação de outra maneira, como no exemplo que citei.
      Google, Microsoft, Instagram, Facebook, Yahoo entre outras retornam o erro correto, informando o usuário se é o email ou a senha que está incorreto.

    • @ryanfmatos
      @ryanfmatos 3 года назад +1

      @@RodrigoAlmeida22 Recentemente eu vi um vídeo interessante de um cara cumprindo um desafio do Try Hack Me, onde, por conta desse padrão do WordPress que é informar se apenas a senha está errada pra determinado usuário, o cara conseguiu acesso como root no servidor.
      Concordo com o seu ponto de que ao cadastrar um novo usuário a aplicação informa se aquele usuário existe, e também, muito provavelmente, o usuário é um campo público na aplicação, no entanto, qualquer medida de segurança é válida. A segurança da aplicação não é dada através de um único método, mas sim de um conjunto de medidas protetivas.
      No passado eu era pensava da mesma forma que você, queria trazer mais comodidade ao usuário descrevendo melhor o erro, porém existem pessoas mal intencionadas, então um método de segurança a mais sempre é bem vindo

    • @RodrigoAlmeida22
      @RodrigoAlmeida22 3 года назад +6

      @@ryanfmatos Realmente toda medida de segurança adicional é válida. Porém da forma como foi implementada no tutorial não agrega nenhuma.
      Para alguém mal intencionado um simples script poderia verificar facilmente a existência do usuário na rota de cadastro e depois tentar encontrar apenas a senha.
      Existem vários outros métodos que podem ser aplicados para proteger essa rota e as demais, inclusive a rota de cadastro como por exemplo, reCaptcha, um limitador de requisições baseado em IPs e/ou em outros parâmetros, duplo fator de autenticação e entre vários outros métodos.
      Acredito que é sempre importante também levarmos em consideração a experiência do usuário, pra não acabar ficando como muitas aplicações existentes no mercado onde o usuário quase não consegue acessar sua própria conta devido as verificações, e depois eventualmente vemos os dados dessas mesmas aplicações vazados na internet.

  • @caiodetz4743
    @caiodetz4743 2 года назад

    Nome do aplicativo pra fazer os requests é: insomnia

    • @denernun
      @denernun 2 года назад

      Postman eu acho melhor

  • @naldoluis5028
    @naldoluis5028 2 года назад

    Por gentiliza alguém sabe o nome da música de fundo tocada a partir dos 13:01?

  • @PabloGeokar
    @PabloGeokar 3 года назад +1

    Olha, espero que Diego não leia meu comentário, não quero plantar a sementinha da discórdia mas já plantando 😂 os vídeos da Dani estão superando os do Diego 😇

  • @luisguilhermeselenko3579
    @luisguilhermeselenko3579 3 года назад

    Faltou colocar o código em um repositório para consulta posterior. Conteúdo ótimo, mas ter que ficar vendo o vídeo a cada vez que se precisa de um conteúdo específico é um pouco ruim.

  • @devyuribrasil
    @devyuribrasil 3 года назад

    criação = criation / criar = create | segundo o Google Translate

  • @GHkatu
    @GHkatu 3 года назад

    Gente, como que ela criou o bd?

    • @joeldaros
      @joeldaros 3 года назад +1

      Quem cria o bd é o prisma, quando ela roda a migration

  • @iurirodrigues9078
    @iurirodrigues9078 3 года назад

    Poderia fazer um exemplo com o oauth/ auth0

    • @rocketseat
      @rocketseat  3 года назад

      Sugestão anotadíssima, Iuri! 💜

  • @dkrp6892
    @dkrp6892 2 года назад

    Thought I was the only one "General S hettings...for the S het"

  • @brlcsistemas
    @brlcsistemas 2 года назад +1

    E se o usuário trocar a senha e deixar salvo em algum browser ou app seu token, digamos que ele tenha sido roubado, essa estratégia de refresh token o antigo token continuaria sendo válido para acesso correto? Teria alguma solução pra prevenir essa possibilidade? Vídeo perfeito apenas essa dúvida de segurança fiquei

    • @SmartMedia101
      @SmartMedia101 2 года назад

      As dúvidas mais complexas sobre essas "falhas"não são respondidas =(

    • @blackrock2222
      @blackrock2222 2 года назад

      Eu acho que não seria válido, já que o access token verifica se a informação do usuário está correta ...

    • @denernun
      @denernun 2 года назад

      pensa assim, o access token tem uma expiração de uns 60 segundos, antes de enviar a requisição, vc verifica a expiração dele e se for o caso, chama a requisição do refresh token, aí vc tem um novo access token e segue a rotina. A questão é ter um mecanismo para revogar o refresh token que está salvo no banco, sem esse mecanismo, você sempre teria como renovar o access token, mesmo que vc mude seu usuário e senha, isso não interfere nos tokens. A não ser que na troca da senha, a rotina revogue, ou seja, apaga do banco, todos os refresh token desse usuário. Por isso gosto de adicionar uma camada de MFA no login, isso dificulta um pouco. Mas nada é perfeito ou 100% garantido.

  •  3 года назад

    muito legal, mas acho que ficou muito longo e a parte de refresh token depende de aplicação para aplicação. E pra que criou tantos arquivos? poderia fazer isso com funcões?

  • @robertofilho9890
    @robertofilho9890 3 года назад

    Primeiro!!

  • @alvesz5225
    @alvesz5225 2 года назад

    I tNice tutorialnk tNice tutorials is my tNice tutorialng now

  • @calvoaos1643
    @calvoaos1643 2 года назад

    lets make soft

  • @viniciussantana8223
    @viniciussantana8223 2 года назад

    Absolute Zero

  • @natoicm
    @natoicm 3 года назад +1

    Está muito confuso os vídeos da Dani, pq ela coloca muitos conceitos da programação, por exemplo, padrões de projeto… pra quem não entende fica boiando, e essa parte menos importa para o conteúdo do vídeo. Meu conselho é, vá direto ao ponto, e faça toda a preparação de ambiente de forma simples, assim tanto um dev iniciante quanto um expert vai entender. Por exemplo, só pra vc preparar o ambiente pra mostrar o refresh demorou 52 minutos, fazendo de forma simples levaria bem menos, ou ate poderia deixar o ambiente já pronto.

  • @iithalokenniogomes2276
    @iithalokenniogomes2276 2 года назад

    top