ASP.NET WebApi JWT Refresh Token

Поділитися
Вставка
  • Опубліковано 4 січ 2025

КОМЕНТАРІ • 78

  • @baltaio
    @baltaio  3 роки тому +4

    Participe do balta.io Experience, um evento online, ao vivo e gratuito que vai reunir grandes nomes da internet em uma experiência única!
    👉 balta.io/experience

  • @Trindade1987
    @Trindade1987 3 роки тому +5

    Como diz o Balta, "Direto ao ponto"! Simples, prático e rápido, muito boa didática, parabéns pelo conteúdo.

    • @baltaio
      @baltaio  3 роки тому

      Muito obrigado 💜

  • @paulomfgoncalves
    @paulomfgoncalves 3 роки тому +1

    Obrigado André Baltieri por este e todos os outros videos que tens publicado. Um optimo trabalho que tem clarificado muitas das minhas duvidas, sobretudo sobre arquitectura de API REST. Thanks

    • @baltaio
      @baltaio  3 роки тому

      Muito obrigado 💜

  • @rodrigodallarosa6935
    @rodrigodallarosa6935 2 роки тому +1

    Parabéns balta, ótimo conteúdo, me ajudou bastante.

    • @baltaio
      @baltaio  2 роки тому

      💜💜💜💜

  • @faya3959
    @faya3959 3 роки тому +1

    Obrigado, estou desenvolvendo uma API pro meu TCC da minha escola e seus vídeos estão me ajudando muito❤️

  • @igorandrade7979
    @igorandrade7979 3 роки тому +10

    Você poderia fazer vídeo explicação esta partes das validações. Ex: ValidIssuer, ValidAuthority, ValidAudiences.

    • @baltaio
      @baltaio  3 роки тому +4

      Posso, claro!! Em breve

    •  2 роки тому

      Um tutorial completo, incluindo, armazenamento em cookie, identity, armazenamento na tabela de tokens do identity... seria fantástico! Eu comprei um curso no udemi de identity, mas não explica jwt em profundidade

  • @thiagobastani6663
    @thiagobastani6663 Рік тому +2

    Não entendi uma coisa: Se você salvar os tokens em memoria num servico AddScoped, a lista do serviço vai ser gerada novamente a cada requisição. Como você fez pra memoria funcionar? AddSingleton?

    • @baltaio
      @baltaio  Рік тому +1

      AddScoped só dura enquanto a requisição existir, AddSingleton enquanto a aplicação não for reiniciada.
      No caso foi apenas uma demo!

  • @JoaoRoberto-mm4qj
    @JoaoRoberto-mm4qj 3 роки тому +1

    Esse tópico é mto bom e mais complexo do que parece

  • @FuinhaAlbinaR6
    @FuinhaAlbinaR6 Рік тому +1

    Uma pergunta, eu poderia em vez de salvar esse refresh token, criar um token criptografado que estaria retornando dentro do token , e esse mesmo refresh token retornando normal ali no json? Ou ficaria algo meio estranho de se pensar

    • @baltaio
      @baltaio  Рік тому

      O que vem no token é apenas uma chave... não outro token...

  • @rpreviato
    @rpreviato 2 роки тому +1

    Deixa eu perguntar, é possível fazer algo parecido quando se usa autenticação por cookie?
    Eu estou precisando fazer uma implementação que é invalidar a sessão anterior do usuário quando ele faz login em um novo local.
    Eu acredito que para fazer isso eu preciso criar um token com uma expiração bem pequena, diria até de minutos, e daí a aplicação sempre vai estar gerando um token novo através do refresh-token, mas tem um custo de fazer um token expirar rápido né, tem outra técnica para fazer isso?

    • @baltaio
      @baltaio  2 роки тому

      Com certeza! É o modelo padrão que o ASP.NET usa (Não APIs)...

  • @carlossouza5478
    @carlossouza5478 2 роки тому +1

    Parabéns !!

  • @edymbhify
    @edymbhify 2 роки тому +1

    Show de bola!

  • @WalisonSoares
    @WalisonSoares 2 роки тому +2

    Eu estou com uma dúvida relacionada a esse refresh token. Se a chave do JWT já me garante que aquele token foi criado pela minha aplicação, porque eu preciso de um refresh token?
    No meu modo de ver, isso leva a uma falha de segurança!
    O que é que eu ainda não consegui enxergar em relação ao refresh token? Qual a real necessidade dele?
    Eu não poderia simplesmente verificar a expiração do JWT na próxima requisição do usuário e caso estivesse próximo de expirar renovar aquele JWT?
    Não é mais ou menos essa a lógica das sessions?

    • @baltaio
      @baltaio  2 роки тому +1

      O refresh token é uma chave extra, que assim como o Token, se cair nas mãos erradas, permite impersonar o usuário... Os dois tem issues de segurança, depende de como você armazena eles...

    • @WalisonSoares
      @WalisonSoares 2 роки тому

      @@baltaio obrigado pelo retorno!
      O que eu imagino é que, vc definindo uma data de expiração do JWT não vejo porque ter o refresh token, pois se o usuário não fizer nenhuma requisição em por exemplo 15 minutos (aqui estou pesando semelhante ao funcionamento das sessions) na requisição no minuto 16 por exemplo o token dele estará vencido e consequentemente a "sessão" dele cairá, necessitando de um novo login.
      Como o JWT tem que ser decodificado e validado a cada requisição, nesse momento pode ser identificado que o JWT está próximo do vencimento e já renova-lo.
      E porque eu disse que o refresh token pra mim traz uma falha na segurança?
      Porque se o JWT na minha abordagem expirar e cair em mãos erradas, ele já terá perdido a validade e boas! Já na abordagem do refresh token se o JWT e o refresh token cair em mãos erradas, mesmo com o JWT vencido, o atacante conseguirá gerar um novo JWT com o refresh token.
      Obs.: Não é uma crítica a forma que está sendo feito tah? Só estou tentando entender o porquê do refresh token.

    • @rafaelberto729
      @rafaelberto729 Рік тому

      @@WalisonSoares entendo que para um frontend onde o usuário usar por horas, a cada token vencido você teria que descer no banco para recuperar usuário e senha para gerar um novo token. Isso se sua atenticação estiver sendo feita por usuários e não por aplicação, claro.

    • @WalisonSoares
      @WalisonSoares Рік тому

      @@rafaelberto729 Eu já tenho o JWT, não precisaria autenticar o usuário novamente. Bastaria renovar o tempo de expiração do JWT gerando um novo JWT. Não entendi o sentido de trabalhar com 2 tokens. O JWT e o refresh token.

    • @bobmarley8334
      @bobmarley8334 Рік тому

      @@WalisonSoares mano, vc ia precisar fazer o login de novo. entrando com seu usuario e senha. com o refresh token, o front end se re-autentica e voce nao precisa digitar login e senha de novo. entendeu?

  •  2 роки тому +1

    o que fazer se vc precisa revogar o acesso de um usuário que já tem o token antes do vencimento do token? Tipo revogar um role ou um claim?

    • @baltaio
      @baltaio  2 роки тому +1

      Armazenar o Token e comparar o enviado com o armazenado a cada requisição para ver se ainda é válido!

  • @gregercolin
    @gregercolin 3 роки тому +1

    Otimo video, muito simples e rápido!! Parabéns!!

    • @baltaio
      @baltaio  3 роки тому +1

      Espero ter ajudado

  • @andremesquita5587
    @andremesquita5587 Рік тому +1

    Balta, vc poderia mostrar um exemplo de como gerar e validar um token com múltiplos Roles? Se alguém ver essa minha mensagem, poderia me informar onde acho isso?

    • @baltaio
      @baltaio  Рік тому +1

      Opa, mostro sim!

  • @augustoalbuquerque
    @augustoalbuquerque 2 роки тому +1

    Olá Balta, primeiramente parabéns pelos vídeos!! Curtos e direto ao ponto.
    Uma dúvida que vc comentou sobre armazenar o token.
    Pra vc, onde seria o melhor lugar para armazenar o token?
    Pois hoje eu armazeno no localstorange.
    A cada requisição eu válido se o token está válido.

    • @baltaio
      @baltaio  2 роки тому

      LocalStorage 💜💜

  • @fredimachadonet
    @fredimachadonet 3 роки тому +1

    Top demais! Valeu pelo teu conteúdo!

  • @igorandrade7979
    @igorandrade7979 3 роки тому +2

    Balta,
    Como conseguirmos fazer endpoint d validação do token nas aplicações consumidoras deste Server de Auth?

    • @baltaio
      @baltaio  3 роки тому

      Só criar um método com o atributo Authorize que retorna o valor que vc precisar...

  • @SergeCABA
    @SergeCABA 3 роки тому +2

    o RefreshToken ao contrário do Token normal ele persiste no banco de dados e precisa sempre atualizado a cada requisição? ou é necessario colocar uma lógica para ele atualizar o refreshtoken faltando X tempo para o token original expirar para evitar sobrecarga nas requisições?

    • @baltaio
      @baltaio  3 роки тому +1

      O RefreshToken é apenas uma chave extra, usada para gerar um token válido, já expirado!

  • @leothomzz
    @leothomzz 3 роки тому +1

    Muito legal o vídeo...Balta, alguma possibilidade de você fazer um módulo nos seus cursos pagos ensinando a implementar essa parte de validação de forma robusta?! Talvez até integrando back com front...sempre que planejo alguns projetos pessoais, ou de estudo mesmo, fico muito inseguro com relação à segurança...um módulo destes, ajudaria demais a entendermos o passo a passo de como tornar uma autenticação/autorização realmente segura.

    • @baltaio
      @baltaio  3 роки тому +2

      Já está no curso novo de ASP.NET 6 que sai em novembro!

    • @leothomzz
      @leothomzz 3 роки тому +1

      @@baltaio sempre a frente de seu tempo haha. Obrigado Dr. Não vejo a hora!

    • @baltaio
      @baltaio  3 роки тому

      💜

  • @diogoaguiar8087
    @diogoaguiar8087 3 роки тому +1

    Parabéns

  • @rdgfarias
    @rdgfarias 3 роки тому +1

    Top man, vlw demais

  • @luan_maik
    @luan_maik 3 роки тому +2

    Seria conveniente que no frontend tivesse um setInterval() para a cada X tempo fazer uma requisição de refreshToken e em seguida atualiza-se o token no LocalStorage ?

    • @baltaio
      @baltaio  3 роки тому

      Já fiz isto uma vez... é uma saída mas não vejo como a melhor...

    • @diegorocha2186
      @diegorocha2186 3 роки тому +3

      No meu app com vue3 e axios, eu crio interceptadores para o request, assim que eu tentar acessar uma rota e o retorno for algo como 401, eu simplesmente envio um request para renovar o access token com o refresh token e em seguida tento repetir a operação, se esta falhar novamente, eu excluo o refresh token e redireciono o user para a tela de login, sendo que eu não tenho mais nada a fazer. Assim você persiste o usuário logado entre sessões, criando uma experiência de usuário bacana, mais ou menos como você tem com suas contas google por exemplo.

    • @luan_maik
      @luan_maik 3 роки тому

      @@diegorocha2186 pensei que quando o token expirava não dava mais para fazer o refresh.

    • @diegorocha2186
      @diegorocha2186 3 роки тому +1

      @@luan_maik Eu tinha feito uma resposta muito mais completa aqui, mas por alguma razão o youtube apagou o comentário, basicamente você precisa entender que existe uma diferença entre refresh token e access token.

  • @evertontomazi
    @evertontomazi 2 роки тому +1

    Tive um erro com o token, posso postar aqui ? é com relação a data parece que o jwt esta pegando uma data que não é do meu computador.

    • @baltaio
      @baltaio  2 роки тому +1

      Provavlemente UTC!

    • @evertontomazi
      @evertontomazi 2 роки тому

      @@baltaio sim. Eu estava vendo outro vídeo sobre refrestoken. Mas não apliquei ainda. Obrigado pelo conteúdo.

  • @torrescle
    @torrescle 3 роки тому +1

    Balta, fiquei com uma dúvida. Pode me dizer um cenário em que o front-end requisita esse end-point de gerar um novo token a partir do refresh token? Tipo por um setTimeout pra fazer essa requisição a cada x horas seria uma abordagem interessante?

    • @baltaio
      @baltaio  3 роки тому

      Pode ser um timeout ou mesmo gerar um tken novo a cada requisição e ter um tempo de expiração menor

  • @diegolobo7952
    @diegolobo7952 3 роки тому +1

    Vlw Balta

  • @diegorocha2186
    @diegorocha2186 3 роки тому +1

    Opa Balta, sobre essa técnica que você usa pra gerar um novo token a partir do access token não expirado, não poderia ser uma falha de segurança? Porque se o token for roubado da maquina do usuário o cracker/hacker tecnicamente consegue manter o token vivo pra sempre requisitando o endpoint de renovação, uma vez que mesmo com o logout do user o token vai continuar válido. Eu geralmente uso um access token com tempo bem baixo de expiração (15 minutos) e mantenho o refresh token do user no meu banco de dados, quando o usuário faz logout eu simplesmente excluo o refresh token do db e em 15 minutos o access token não vai mais ter validade.

    • @baltaio
      @baltaio  3 роки тому

      Se o token é a hash forem roubados já era! Mas não tem outra forma de gerar um token a partir de outro token expirado... é o risco que se corre... por isto vários lugares não tem refresh token

    • @adrianoalves1836
      @adrianoalves1836 2 роки тому

      ​@@baltaio No caso não seria mais recomendado salvar a hash em um banco associando a id do usuário e ao passar o token ele faz a validação para fazer o refresh caso seja necessário?

  • @diadetediotedio6918
    @diadetediotedio6918 2 роки тому +1

    Não daria pra armazenar o refresh token diretamente como uma informação do JWT? Como ele é assinado com uma chave privada forjar os dados dentro do JWT seria criptograficamente impossível, então a integridade dos dados como foram criados seria assegurada pela própria assinatura

    • @baltaio
      @baltaio  2 роки тому +1

      Acho que daria sim... nunca pensei desta forma, obrigado... vale um teste hein :D

  • @andreymonteirohl
    @andreymonteirohl 3 роки тому +1

    Excelente esse vídeo! Eu tenho uma dúvida: Eu quero configurar meu token para expirar em 2h, porém enquanto o usuário estiver em atividade deve manter a autenticação. Se ele ficar 2h sem qualquer interação com a api ai sim ele expira... Eu faço isso apenas com Refresh Token? Ou tem alguma outra forma?
    Pergunto isso porque imagino que o front end terá que sempre fazer 2 requisições: 1 para o refresh token e outra para o método desejado (GET, POST, etc).
    Muito obrigado pelo conteúdo!

    • @baltaio
      @baltaio  3 роки тому +1

      Não, você pode a cada requisição renovar este token... gerar um token novo e armazenar! É uma estratégia!

  • @joaovictordepaularamos6360
    @joaovictordepaularamos6360 3 роки тому

    Balta é possível subir uma API de Autenticação e utilizar o Token gerado por essa API para ter acesso as outras APIs? Estou um pouco travado com relação a Key. Como as demais APIs vão conseguir ler este Token? Desde já agradeço.

    • @baltaio
      @baltaio  3 роки тому +1

      Sim é possível! Você pode ter um Endpoint que valida o token e que outras APIs podem consumir...
      Porém neste cenário, o que você procura pode ser algo parecido com Identity Server ou Keycloak

  • @josiasalmeida2981
    @josiasalmeida2981 2 роки тому +1

    Link do repositório?????????

    • @baltaio
      @baltaio  2 роки тому +1

      github.com/andrebaltieri

  • @vintage_lol
    @vintage_lol Рік тому +1

    Balta, já te disseram que tu podia facilmente imitar o Vinheteiro?