Autenticação e autorização em . NET 6 com tokens da Web JSON (JWT), atualizar tokens e papéis | Patrick God | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Autenticação e autorização em . NET 6 com tokens da Web JSON (JWT), atualizar tokens e papéis

teacher avatar Patrick God, Teaching code in a simple and fun way.

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Apresentação

      1:34

    • 2.

      Visão geral do curso

      1:31

    • 3.

      Como criar o projeto

      1:39

    • 4.

      Adicionar o modelo de usuário

      3:31

    • 5.

      Adicionar o controlador de autenticação

      3:36

    • 6.

      Primeiro teste com SwaggerUI

      1:32

    • 7.

      Adicione o serviço de autenticação

      2:24

    • 8.

      Injecte o serviço (injeção de dependência)

      1:46

    • 9.

      Repo do GitHub

      0:54

    • 10.

      Como criar o hash senha

      6:32

    • 11.

      Adicione o núcleo do quadro de texto e entidade

      3:36

    • 12.

      Instalar ferramentas de núcleo EF

      1:31

    • 13.

      Como usar primeiro código

      4:46

    • 14.

      Abra o banco de dados com o navegador DB para SQLite

      0:56

    • 15.

      Armazenar usuário no banco de dados

      1:51

    • 16.

      Adicionar um AuthResponseDto

      3:13

    • 17.

      Como verificar a senha

      2:07

    • 18.

      Implementar o método de login

      6:41

    • 19.

      Como criar e devolver um JSON Web Token

      11:59

    • 20.

      Adicione um ponto final seguro para usuários autorizados

      6:53

    • 21.

      Use o JWT com SwaggerUI e o Middleware de autenticação

      4:21

    • 22.

      Como atualizar tokens

      1:34

    • 23.

      Adicionar atualização de dados de token ao modelo de usuário

      2:13

    • 24.

      Como criar o token de atualização no login

      4:50

    • 25.

      Definir atualização de token em cookie e no banco de dados

      7:21

    • 26.

      Como atualizar o token de atualização (e o token da Web JSON)

      8:16

    • 27.

      Introdução de papéis

      0:56

    • 28.

      Como adicionar papel ao modelo de usuário

      1:32

    • 29.

      Como reclamar ao JSON Web Token

      1:55

    • 30.

      Usar o papel para autorização

      3:40

    • 31.

      Considerações finais

      0:48

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

396

Estudantes

2

Projetos

Sobre este curso

Bem-vindo à "Autenticação e autorização em . NET 6 "curso.

Neste curso, você vai aprender como

  • criar um projeto de API da Web ASP.NET
  • registrar usuários e registrá-los com seu nome de usuário e senha
  • Armazene esses usuários em um banco de dados SQLite
  • utilizar migração primeiro código do Entity Framework
  • criar tokens da Web JSON (JWT) para autenticar um usuário
  • criar tokens de atualização
  • Como autorizar um usuário com papéis

Você vai aprender tudo isso em um único projeto usando . NET 6 e Visual Studio 2022.

Um pouco de experiência com C#, . NET e criar APIs na Web é definitivamente uma vantagem.

Espero que estejas pronto! Vamos começar.

Conheça seu professor

Teacher Profile Image

Patrick God

Teaching code in a simple and fun way.

Professor

Hey friends, I'm Patrick.

Writing code is what drives me.

Creating software out of nothing is a skill I truly am passionate about and I want to share this astonishing feeling of making stuff with you.

I started to learn several programming languages as a teenager and always wanted to create software ever since I first played a game on a Commodore 64.

During my bachelor's and master's studies, I joined various companies, made desktop and web applications as well as video games professionally, and was always anxious to improve my craft, which I have been doing for more than 15 years now.​

For me, the most important part of writing and teaching code is to have fun.

If certain ways work for you and the results are maintainable and you have fun... Visualizar o perfil completo

Level: All Levels

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Apresentação: Ei, obrigado por passar e bem-vindo ao curso de autenticação e autorização dotnet seis. Meu nome é Patrick guardas. Você já pode me conhecer do meu canal no YouTube, onde falei principalmente sobre desenvolvimento web com dotnet e blazer e também Angular React e assim por diante. Então, talvez se você não conhece o canal já, talvez queira dar uma olhada. Muito obrigado por considerar, mas é claro que você também pode ficar comigo aqui porque neste curso de autorização de autenticação, você aprenderá como criar um usuário em um banco de dados. Então, registrar um usuário, registrar esse usuário implora em largura, nome de usuário e senha. Usaremos um hash de senha e o sal da senha para isso. E, em seguida, criamos um Web Token JSON. Portanto, isso é uma coisa importante do processo de autenticação. Além disso, além do token da Web JSON, usaremos tokens de atualização. Portanto, se o token da Web JSON tiver expirado, veremos o token de atualização e como você pode atualizar o token da Web JSON com esse token de atualização. E além disso, é claro, vamos dar uma olhada na estrada. Portanto, esta é n, a parte de autorização em que usaremos uma reivindicação para dar a um usuário funções específicas e somente com uma função específica, o usuário pode chamar determinados endpoints. Então é isso que vamos fazer. Agora você está empolgado e quer se juntar a este curso porque não é tão longo e, nesse curto período de tempo, você poderá fazer tudo isso com dotnet six. Então, espero vê-lo na primeira lição. 2. Visão geral do curso: Muito obrigado por ingressar neste curso agora, primeiro, uma visão geral muito rápida. O que você vai fazer? Trata-se de Tokens da Web JSON, tokens de atualização e funções. E, claro, a primeira coisa que precisamos para isso, nossos usuários. Então, começaremos criando um modelo de usuário e também um DTO de usuário, o que significa objetos de transferência de dados para que enviemos usuário e senha em texto simples para a API da Web. E a partir disso, criaremos o hash de senha e o sal da senha. E então vamos, isso é importante. Armazenaremos o usuário completo com o nome de usuário e senha de ID, hash, senha sal no banco de dados. Tudo bem, então isso é o que vamos fazer primeiro. E depois disso, tentaríamos bloquear esse usuário. Então, novamente, usaremos o mesmo usuário DTO, enviaremos o nome de usuário e a senha para o log n. É o mesmo que usamos para o registro. Esse DTO então será usado em nossa API da Web. Criaremos novamente o hash de senha com a ajuda do salt que é armazenado no banco de dados. Então é isso que você vai fazer e quando tudo estiver correto, então o nome de usuário e a senha correspondem à equipe que vimos ou armazenamos no banco de dados. Em seguida, criaremos o JSON Web Token. Então, este é o primeiro passo. Depois disso, também podemos criar tokens de atualização. E depois disso, também daremos uma olhada nos papéis. Então agora o usuário e os tokens da Web JSON, vamos começar. 3. Criar o Projeto: Estamos aqui com o Visual Studio 2022 e agora vamos criar um novo projeto. Presumi que você já instalou o dotnet six STK. Portanto, isso é, claro, requisitos. Então, por favor, se você ainda não procurou os SDKs dotnet com o Google, por exemplo, e então apenas instale essa coisa. E depois disso, abra o Visual Studio 2022, claro, isso também é um requisito, mas acho que você já conseguiu tudo isso. E, em seguida, criamos um projeto ASP NET Core Web API. Então, basta fazer back-end nesta classe aqui. E agora vamos chamar isso de API da Web de autenticação. Por exemplo, a API da Web de autenticação é a localização depende totalmente de você. Tudo bem. Novamente, dotnet six é a estrutura que queremos usar. Não precisamos de nenhum tipo de autenticação. Fazemos isso manualmente desta vez. Configuramos para HTTPS, está tudo bem. Usamos o controlador, então não estamos usando APIs mínimas aqui. E habilitamos o suporte a API aberta. Isso significa, veja aqui que podemos usar swagger para testar nossa API. Então, vamos criar nosso projeto. Tudo bem, e como você pode ver, já temos nosso exemplo de projeto aqui com as previsões meteorológicas. Suponho que você já saiba disso. Portanto, isso não é para o iniciante absoluto aqui. Então, não vou aprofundar aqui em relação ao projeto de exemplo. Começaremos imediatamente. Então, a primeira coisa que precisamos é depois de criar este projeto, adicionamos alguns modelos. 4. Adicionar o modelo de usuário: A primeira coisa que precisamos é o modelo de usuário. Para isso. Vamos criar uma nova pasta primeiro e chamar esses modelos. Agora, aqui, adicionamos uma nova classe e este será o usuário, e essa também será a entidade que será armazenada no banco de dados. Então, vamos dar essa coisa I D. O que estou fazendo aqui é digitar prop para propriedade, clicar em Tab duas vezes e, em seguida, já podemos inserir a próxima propriedade, que é o nome de usuário. E esta é uma string vazia por padrão. E outra coisa seguinte, isso já é interessante e importante. Estamos armazenando um hash de senha, o sal de senha no banco de dados. Portanto, não o que é sugerido aqui pelo código IntelliJ. Armazenaremos o array de bytes, que é o hash de senha. E podemos realmente dar a isso um valor padrão, como a matriz de bytes 32. Tudo bem. Mas muito importante para nós poderia ser, na verdade, também agora. Mas dessa forma, não vemos essas linhas esbeltas verdes então. Então fique comigo aqui. Acho que isso é totalmente bom. Agora este é o sal. E, novamente, vamos dar a essa coisa array de bytes por padrão. Tudo bem, então este é o nosso modelo de usuário, e em alguns minutos também armazenaremos isso no banco de dados. Mas primeiro faremos isso, ou seja, registrar um usuário sem um banco de dados e somente quando implementamos isso e você já teve a ideia de como registro e a criação de um hash de senha funciona. Em seguida, armazenaremos isso também no banco de dados. Então esse é o nosso modelo de usuário e já precisamos de mais uma coisa. E esse seria o objeto de transferência de dados para o usuário, significa que precisamos de outro objeto, outro modelo onde podemos transferir o nome de usuário e, em seguida, a senha real em texto simples para a API da Web. Então, vamos adicionar outro modelo aqui. Adicionamos uma classe e , em seguida, dizemos o usuário D TO. Claro, você também pode usar pastas diferentes aqui. Você pode chamar essas entidades de pasta, por exemplo, e apenas colocar o usuário aqui porque esta é uma entidade que também é representada no banco de dados. E, em seguida, outra pasta para o DTO são os objetos de transferência de dados e basta adicionar o usuário DTO aqui. Isso depende totalmente de você. A coisa com um usuário DTO agora é que usaremos essa coisa para registrar um usuário e também registrar o usuário n. Você pode se perguntar por que não usar um objeto de solicitação de registro de usuário e o usuário objeto de solicitação de login, por exemplo. Bem, podemos usar este DTO aqui para ambos os casos de uso. Então, vamos apenas digitar a primeira propriedade que é uma string, na verdade, o nome de usuário. E, por padrão, para ser enviado para a string vazia. E agora, de fato, a senha. Então, desta vez, isso está correto, ok, Agora esses são todos os modelos que precisamos por enquanto, o próximo passo já é adicionar o controlador de autenticação. Então, vamos fazer isso em seguida. 5. Adicionar o controlador de autenticação: O controlador de autenticação, clicamos com o botão direito do mouse na pasta controladores e depois controlamos simplesmente a primeira entrada de menu aqui. E então recebemos algumas sugestões. Não queremos usar um controlador MVC, queremos usar um controlador de API. Você vê aqui, temos um vazio, já temos uma largura, ler e escrever ações. Então, isso fornecerá algum código gerado para todas as operações crud, criará, lerá, atualizará e excluirá. E já temos essa coisa aqui usando o Entity Framework. Então, muitos códigos já gerados para nós. Na minha opinião, é sempre melhor ou quase sempre melhor usar um vazio, porque então você pode construir qualquer coisa do zero. Você tem todo o controle e sabe o que realmente é feito aqui. E você pode, Bem, você tem mais controle sobre seu código para fins de aprendizado. Claro, um vazio também é bem arrumado. Então, vamos criar um controlador de API vazio e simplesmente chamamos isso agora de controle para autenticação. Aqui. Agora, o que eu já quero fazer é escrever o método para registrar o usuário. Então, o que podemos fazer é simplesmente tarefa assíncrona pública, então resultado real, eu resultado real seria suficiente, é totalmente suficiente. Mas se você quiser ver os modelos reais representados na UI do Silva, então você precisa usar um resultado real e seguida, definir o modelo exato que é retornado aqui. E agora tenha cuidado comigo, retornaremos o usuário com um hash de senha. E agora em produção, é claro, você não faria algo assim. Você apenas enviaria o texto talvez saco ou apenas um código de status de sucesso 200, ok. Onde o aplicativo, a frente e depois sabe que tudo deu certo. Mas no nosso caso para ver apenas por enquanto o que realmente está acontecendo aqui, retornaremos o usuário. Isso é realmente apenas para fins de aprendizado. E precisamos de outro, precisamos de uma referência de uso aqui, usando diretiva, usando autenticação, modelos de API da Web. E já que sou um programador preguiçoso ou só quero usar as coisas novas de C-sharp dez. Vamos usar um uso global aqui no programa CS. Agora, nós já sabemos, também conhecemos o modelo aqui nesta classe no controlador da Terra, embora não tenhamos nenhuma edição de referência aqui, não é bom? Agora vamos chamar esse usuário de registro. Aqui está agora o usuário DDoS nossos objetos de solicitação aqui. Agora podemos simplesmente criar um novo usuário. Mais uma vez, isso é só por enquanto. Em alguns minutos, armazenaremos essa coisa no banco de dados. Mas, por enquanto, vamos ver como isso parece quando criamos um novo usuário com o nome de usuário fornecido. E então retornamos, ok, então o código de status 200 com o usuário aqui. Tudo bem, então esse é o nosso método. E agora a última coisa que é importante, precisamos de um método de solicitação HTTP. E para isso usaremos o método post identifica uma ação que suporta o método HTTP post. Agora vamos salvar isso e já executá-lo e testar isso um pouco. 6. Primeiro teste com SwaggerUI: Então aqui está nosso aplicativo ou a interface do usuário Swagger para que possamos testar nossa nova API. E agora vamos usar esse método off aqui que você já o vê. O usuário DTL. Portanto, a solicitação é um nome de usuário e senha e esperamos um objeto de usuário, esse é o único. E também vemos nossos modelos aqui. Portanto, este é o usuário e este é o usuário D TO. Tudo bem, então vamos escrever. Talvez possamos fazer algo como Homem de Ferro, senha, pimenta, clique em Executar. E o que vemos? Id não é como 0. Isso está correto. Quando usamos um banco de dados , isso será diferente. O banco de dados fará o trabalho para nós aqui e adicionará um ID 123 e assim por diante. O nome de usuário permaneci. Então, vemos que isso realmente funcionou. E esses valores de hash aqui são os, bem, os conjuntos de bytes inicializados. Portanto, ele não fez nada com essa senha aqui, é claro, mas vemos que nossa API já funciona. Agora, o próximo passo que eu gostaria de fazer é usar injeção de dependência porque quando temos toda a nossa lógica aqui no controlador, esse é um controlador PHET que não é a melhor prática. Então, vamos mudar isso um pouco e a próxima lição. E adicionamos o serviço de autenticação e colocamos a lógica lá. 7. Adicionar o serviço de autenticação: Agora, para o serviço de autenticação, recrie uma nova pasta e chame esses serviços. E também outra pasta chamou esse serviço desativado. No momento, criamos uma interface para essa interface chamada esse I de serviço e também uma classe de implementação chamada essa coisa de serviço. E, claro, implementamos a IA do serviço aqui. E quando você pressiona Salvar, sim, queremos reconstruir e aplicar todas as nossas alterações. E agora, para ter certeza de que injeção de dependência funcionaremos, temos que registrar este serviço aqui no programa CS. Escrevemos serviços de construção e vamos embora. É um serviço de escopo do tipo especificado no tipo de serviço para a coleção de serviços específica. Tudo bem, e agora colocamos nosso olho fora do serviço aqui. Eu tenho que escrevê-lo corretamente servir este serviço fora do serviço. E é claro que adicionamos a diretiva de uso e também adicionamos a palavra-chave global para que nosso controlador em um minuto, também saibamos onde encontrar esse serviço. Agora essa coisa está registrada. Isso significa que podemos injetá-lo no controlador da Terra em um minuto. Mas primeiro, vamos colocar nosso método de registro aqui na interface. Usuário da tarefa. Chame esse usuário de registro com o usuário DTO novamente e chame isso simplesmente solicitações. Agora salve isso. E, claro, eu salvei muito cedo porque ainda não foi implementado. Mas com o período de controle, podemos implementar a interface na palavra-chave assíncrona. Agora, em essência, podemos copiar essa linha aqui do controlador aqui e simplesmente retornar esse usuário. E terminamos de mover a lógica do controlador para o serviço de autor. E a próxima coisa é que temos que injetar esse serviço e juntar tudo. Então, vamos fazer isso em seguida. 8. Injetar o Serviço (Injeção de Dependência): Para injetar essa coisa, vamos para o controlador off e adicionamos um construtor aqui primeiro com CTE OR e, em seguida, pressionamos Tab duas vezes. E aqui agora dizemos que eu de serviço, chamo essa coisa fora do serviço e também com período de controle. Agora, podemos criar e atribuir a esse campo que este serviço está disponível em todos os lugares neste controlador agora, e eu gostaria de adicionar esse sublinhado aqui. E agora aqui, neste método, dizemos, por exemplo, resposta viral pesa solicitações de usuários registrados no serviço. Vê isso? Então, agora temos essa lógica, mudamos para o serviço de autor, e o controlador apenas encaminha a solicitação para o serviço e retorna os resultados. No nosso caso, essa seria a resposta. Agora podemos salvar tudo, testá-lo novamente e o resultado deve ser exatamente o mesmo. Aqui estamos nós. Mais uma vez. Este é o nosso endpoint. Tentamos isso de novo com o Homem de Ferro. E esta senha aqui clique em Executar. E isso é exatamente o mesmo que já vimos quando não estamos, não usamos injeção de dependência. Mas o melhor de novo é agora que você pode injetar o serviço e a lógica onde quiser em seu aplicativo. E é definitivamente uma prática melhor. Tudo bem, então este é o primeiro código boilerplate. E agora a próxima coisa é realmente criar o hash de senha. Então, vamos fazer isso em seguida. 9. GitHub Repo: Muito rápido antes de escrevermos o método para criar o hash de senha, até agora já fizemos algumas coisas, então acho que é bom enviar isso para um repositório Git. Eu fiz isso. E agora você pode obter o código aqui. Então, se você não quiser escrevê-lo sozinho, agora é um bom momento para apenas pegar o código aqui do meu repositório do GitHub. Veja a URL aqui, barra github.com Patrick recebeu uma API da Web de autenticação de barra. Então, é aqui que você encontrará o código-fonte completo dessa classe. Isso só por uma pequena dica. Então, novamente, se você não quiser escrever o código sozinho, embora eu realmente recomendo fazê-lo, porque essa é a melhor maneira de aprender. Você pode obter o código aqui ou se tiver algum problema. Novamente, você também pode obter o código, é claro agora no GitHub. 10. Criar o Hash de senha: Em seguida, criarei o hash de senha. Então, o que fazemos agora é voltar ao serviço de autenticação e escrever métodos simples. Portanto, este é um vazio privado e chamamos isso de hash de senha de criação. Essa coisa agora recebe uma senha. Portanto, esta é a senha e textos simples e, em seguida, dois parâmetros fora, e estes seriam a matriz de bytes de hash de senha e a senha salt out bites senha hash e também bytes, sais de senha. Agora, como fazer isso? Na verdade, não é muito. Primeiro criamos uma instância de um algoritmo de criptografia e, no nosso caso, usaremos o HMac 512. Novamente, precisamos de uma diretiva de uso aqui, usando criptografia de segurança de sistemas. E aqui agora, quando tivermos essa instância, já temos uma senha salt e voltarei para a senha salt em um segundo. Então esse seria o HMac e, em seguida, a chave, este é o nosso sal. Agora, para obter o hash de senha, dizemos computar hash e, em seguida, textos do sistema codificando UTF-8 obtêm bytes e depois a senha. Agora, o que realmente está acontecendo aqui com o método de hash de criação de senha, geramos um sal. Agora, isso é como afirma aqui, uma chave que é usada no cálculo do HMac. E quando você combina o salt com a senha, você obtém um hash de senha diferente, embora você use a mesma senha. Agora, para ver melhor todo o processo aqui, eu diria que acabamos de testar isso. Vamos usar o método hash de criação de senha já. E então você verá quando usarmos a senha pepper várias vezes, obteremos um valor de hash de senha diferente. Isso é por causa do sal. Mas se ele sempre usasse o mesmo salt, o hash de senha seria o mesmo. E o problema com isso é que algum dia, pessoas muito inteligentes decidirão os algoritmos de criptografia e, em seguida, poderão ver um hash de senha. E a partir do hash de senha, eles podem acessar a senha do texto plano. Mas isso não é feito com sal. Ou seja, se eles não souberem o sal, eles não conseguem obter a senha, a senha real. Tudo bem, então vamos tentar isso e então você verá o que quero dizer com isso. Então, primeiro quando registramos um usuário, dizemos que criamos o hash de senha. Então, então crie hash de senha. Essa coisa recebe a senha aqui. E agora o hash de senha, o sal de senha que é retornado. Sentido. Aqui. Nós recebemos essa coisa e também os sais de senha. Tudo bem, então agora temos nosso valor de hash e sal. E agora aqui para o usuário, o que fazemos é não apenas definir o nome de usuário, também definimos o hash de senha para o hash de senha. Aqui embaixo, definimos a senha salt para sais de senha, ok, e depois retornamos o usuário. Então, vamos tentar isso agora. Reinicie o aplicativo. Mais uma vez quando usamos Ironman. E o que vemos agora? Vemos essa corda louca aqui, ou por uma matriz para Bx e assim por diante. Agora, quando eu tento isso de novo, parecendo diferente e novamente também olhar para diferente. Agora vamos fazer isso de forma um pouco diferente. Então, digamos que nós damos esse algoritmo de criptografia já assalto como novo byte array 32. Então, essa será a chave que é usada aqui. Tudo bem, veja aqui. Há uma sobrecarga a uma, a instância sem a chave ou o sal, e a instância com este sal agora, significa isso, significa que agora neste método de hash computacional, o algoritmo usará este sal aqui toda vez que fazemos isso. Vamos salvar isso novamente e reiniciar o aplicativo apenas para ter certeza. Tentamos isso de novo. Experimente. Cara. Sem pimenta. Acertamos Execute for M MPH e executamos novamente para MPH e assim por diante. Toda vez. O mesmo que você vê nisso é por isso que precisamos de um sal. O sal é o mesmo e a senha de texto sem formatação é a mesma, então obtemos o mesmo valor de hash todas as vezes. Portanto, é o mesmo se você não usar um sal, o que significa que uma senha específica sempre resulta no mesmo valor de hash e vice-versa e essência. E agora, quando removemos isso novamente e realmente usamos uma nova chave gerada aleatoriamente como sal, obtemos uma senha diferente, um hash de senha diferente. Toda vez que usamos esse algoritmo. Tudo bem, veja aqui. É por isso que usamos sal. Espero que você tenha tido a ideia. É assim que criamos um hash de senha. E agora, antes de continuarmos registrando o usuário e, em seguida, criando o token da Web JSON. Eu diria que adicionamos nosso banco de dados e armazenamos o usuário com o hash de senha e o sal e assim por diante neste banco de dados. Vamos fazer isso em seguida. 11. Adicione o DataContext & Entity Framework Core: Tudo bem, então queremos usar o Entity Framework Core aqui e também um banco de dados lite sequel. Desta vez, uso bancos de dados diferentes em minhas aulas e tutoriais. Desta vez, vamos usar um banco de dados SQL light. Isso é multiplataforma e bem simples de criar. A primeira coisa agora antes de podermos realmente usar esse banco de dados é que precisamos de contextos de dados. Então, novamente, criamos uma nova pasta chamada esses dados. Aqui. Agora adicionamos uma nova classe e chamamos essa classe de contexto de dados. E essa coisa aqui usa a classe de contextos de banco de dados. Não é conhecido aqui. Então, com o período de controle, recebemos algumas sugestões. E queremos usar essa coisa aqui, instalar o pacote, Microsoft Entity Framework Core, encontrar e instalar a versão mais recente já feita. Agora está feito. E novamente, podemos usar uma diretiva global usando aqui porque precisamos disso em vários lugares. Então, vamos fazer isso assim. E agora temos o contexto de banco de dados aqui. Com esses contextos de banco de dados, agora, podemos acessar os usuários do nosso banco de dados. E você vê aqui. Ele diz que uma instância de contexto de banco de dados representa uma sessão com o banco de dados e pode ser usada para consultar e salvar instâncias, instâncias de suas entidades. O contexto do Db é uma combinação da unidade de trabalho e do padrão do repositório. Em relação ao padrão do repositório, é semelhante ao nosso serviço de autenticação porque agora podemos injetar esse contexto, por exemplo, em nosso serviço de autenticação e, em seguida, acessar novamente os usuários no banco de dados. Mas ainda temos que fazer alguma coisa para poder fazer isso. Finalmente, a primeira coisa é o construtor. Novamente com CD OU nós novamente nosso construtor. O argumento aqui agora são as opções de contexto do banco de dados. Essa coisa aqui com a nossa classe. E chamamos isso de Opções. E também temos que chamar o construtor base com opções de base. Então, este é agora o construtor que precisamos. E a última coisa a ser capaz de adicionar os usuários, ou para ser mais preciso adicionar a tabela de usuários no banco de dados, precisamos de uma propriedade aqui. E isso é do tipo db set com classe de usuário. Chamamos isso de usuários e esse será o nome da nossa tabela. Então, geralmente você simplesmente pluralizaria o nome dessa entidade. Portanto, os usuários seriam totalmente suficientes. E acho que esse é um bom nome para esta tabela. Isso é o que temos que fazer para adicionar essa tabela. E se você não gosta dessa linha verde aqui, você já pode dizer que este é um conjunto de usuários como esse, e então você não recebe mais aviso. Certo, vamos salvar isso. E agora o próximo passo é usar primeiras migrações de código para criar nosso banco de dados. Mas antes que possamos fazer isso, é claro que precisamos instalar as ferramentas do Entity Framework Core. Então, vamos fazer isso em seguida. 12. Instale ferramentas EF Core: Instale as ferramentas do Entity Framework Core. Abrimos o console do gerenciador de pacotes. Você pode abrir essa coisa também aqui em exibir outras janelas e, em seguida, você obtém o console do Gerenciador de Pacotes. E também deve haver um atalho para isso. E aqui agora a primeira coisa que temos que fazer é que precisamos estar no diretório correto. Portanto, temos que acessar nosso diretório de API da Web de autenticação. Aí estamos nós. Então temos que interromper o aplicativo. Então, feche o terminal aqui. E agora podemos instalar as ferramentas do EF Core e, em seguida, a migração. Portanto, certifique-se de interromper o aplicativo porque caso contrário, não podemos executar o código primeiro migrações, mas primeiro as ferramentas para isso. Dizemos dotnet new install e, em seguida, dash, dash global e, em seguida, dotnet dash EF. Agora, no meu caso, já o instalei, então deixe-me desinstalá-lo rapidamente. Então podemos fazer isso juntos aqui. Desinstale o dotnet ef. Você vê aqui, versão 6.3. E agora, se eu executar o comando install novamente, recebo a versão 604. E com dotnet E F, podemos verificar novamente. E há as ferramentas de linha de comando Entity Framework Core dotnet. Então essa coisa eu fui instalado e seguida, usamos o código primeiro, migrações. 13. Utilizar o código Primeiras Migrações: Estamos no diretório correto. Temos as ferramentas de linha de comando instaladas, temos o pacote NuGet de framework de energia instalado, mas há mais dois pacotes NuGet que temos que instalar. E este é o pacote de design e o pacote SQL lite de energia enquadram um núcleo. Agora, o design, você o verá em um minuto. Deixe-me abrir isso. Então clique com o botão direito do mouse no projeto, Gerenciar pacotes NuGet. E então apenas dizemos design e acho que já conseguimos isso. Em seguida, certifique-se de usar a guia Procurar aqui. Aí está, o Microsoft Entity Framework Core Design compartilhou componentes de tempo de design para entrada a partir de ferramentas principais. Então isso é importante para nós. Clique em OK, aceito e em seguida, luz SQL do Entity Framework Core. Portanto, quando você quiser usar um banco de dados SQL light, você precisa instalar esse provedor de banco de dados SQL para Entity Framework Core. Se você quiser usar o SQL Server, então é uma essência apenas Entity Framework, Core dot SQL Server e assim por diante. Então, por favor, instale essa coisa agora. Ok, eu aceito que temos nossos pacotes NuGet para que possamos fechar isso. Agora, o próximo passo é registrar nossos contextos de banco de dados. Então, novamente para o programa CS. Agora, aqui, dizemos construir serviços e, em seguida, adicionar contextos D B com classe de contexto de dados. E essa coisa. Agora primeiro temos que adicionar outro usando o erguido aqui. Mais uma vez, vamos adicionar a palavra-chave global. Então, agora temos nosso contexto de dados, e isso tem uma opção. Digamos que as opções. Opções. Queremos dizer que queremos usar o SQL light e podemos adicionar uma string de conexão aqui. Agora, geralmente, você armazenaria a cadeia de conexão, por exemplo, no arquivo JSON de configurações do aplicativo. Você ainda pode fazer isso ou da maneira rápida e suja, já que este é apenas um banco de dados SQL light, maneira rápida e suja é simplesmente inserir a string aqui e a cadeia de conexão para um banco de dados sqlite. Deixe-me colocar isso em uma nova linha, é simplesmente fonte de dados e , por exemplo, de dot db. Então, o tipo de arquivo é DB e ele simplesmente desliga isso. Isso depende totalmente de você. Você pode usar qualquer nome que quiser. E é assim que registramos o contexto do banco de dados. Com isso, podemos usar a primeira migração de código para criar nosso banco de dados com a tabela de usuários. Então, vamos para o console do Gerenciador de Pacotes novamente, certifique-se de ser colocado em nosso diretório de projeto. Portanto, a API da Web de autenticação, a API da Web de autenticação, é nesse caso. E então podemos dizer dotnet ef. Então vamos dar uma olhada rápida. Temos três Comandos, banco de dados, contexto e migrações. E para adicionar uma migração, bem, usamos migrações, então dotnet EF migrações e, em seguida, adicionamos, e então vamos simplesmente chamar isso de inicial. Está construindo, mas foi bem-sucedido e essencialmente já está feito. O que recebemos agora é uma pasta Migrações aqui. E aqui você também vê o que acontecerá quando executarmos essa migração. Vamos criar uma tabela, usar-nos com um ID definido para incrementos automáticos. Então, temos o id 123 e assim por diante obtivemos automaticamente o nome de usuário como uma string ou um tipo de texto. E as matrizes de bytes serão usadas com o tipo blob. E já temos uma chave primária aqui. E se eu remover essa migração ou função, a função, esse banco de migração, então simplesmente deixaremos cair essa tabela. E agora ainda não temos o banco de dados, certo? Então, o que está acontecendo agora quando dizemos que atualização do banco de dados dotnet EF não é apenas atualizá-lo, mas também criará esse banco de dados. Ok, então você vê aqui todos os comandos, mas foi bem-sucedido e agora há uma tabela de criação. Isso é apenas para Energy Framework, o sistema de migração. E também onde está Aqui os usuários da tabela. Isso está feito. E aqui vemos esse arquivo de banco de dados e, na verdade podemos abrir esse arquivo e dar uma olhada. Nós baixamos mais uma coisa e este seria o navegador DB, o navegador de banco de dados para a linha SQL. Então, vamos fazer isso em seguida. 14. Abra o banco de dados com o navegador DB para SQLite: E isso é o que você precisa apenas para encaminhar o navegador TB do Google para SQL lite ou ir para SQL browser.org. É assim que parece. Então, basta ir para Download e, em seguida, para o seu sistema operacional, obtenha essa coisa. Meu caso, não o conheço e instalei o navegador DB para luz de sequela, o instalador padrão para Windows de 64 bits. Então, por favor, pegue essa coisa e então você deve obtê-lo aqui. É assim que parece. E agora podemos abrir o banco de dados. Aí estamos nós. Esta é a nossa pasta, este é o dB desligado. Então, vamos abrir essa coisa. E você vê aqui que temos nossa tabela de usuários com esses campos. E, claro, podemos selecioná-lo e, em seguida, ir para Procurar dados. E aqui vemos que não temos usuário. Então, o próximo passo é armazenar o usuário finalmente, após o registro no banco de dados. Então, vamos fazer isso na próxima lição. 15. Armazenar usuário no banco de dados: No Visual Studio, voltamos para o serviço off. Agora. Nós adicionamos um construtor primeiro porque, se você se lembrar, queríamos injetar os contextos de dados. Portanto, CTO é do serviço. E aqui agora dizemos contexto de dados. Contexto. Novamente, criamos e atribuímos o campo e um sublinhado. Agora temos nossos contextos de dados e a próxima coisa é dizer contextos, usuários, você já o vê aqui. Temos nossa tabela de usuário, Adicionar User Entity Framework nós Adicionar User Entity Framework que você deseja para o usuário, mas não terminamos. Também precisamos salvar essas alterações com um contexto de pesos. Salvar alterações assíncronas, tudo bem, e isso é tudo. Então, agora vamos executar este aplicativo novamente. E eu diria que adicionamos dois usuários. Aqui estamos nós. Mais uma vez. Tentamos isso com, por exemplo, pimenta do homem de ferro que executa. Este é o resultado. Você vê agora que o ID é um e quando vamos ao nosso navegador, lá está ele, atualizamos os dados. Iron Man é com id1, hashing de senha, sal de senha, blobs e tudo mais. Vamos adicionar mais um. Só por diversão. Senha do Batman, talvez seja executada. Temos id2 e o mesmo aqui. Tudo bem, então isso funciona. Agora, finalmente, o próximo passo é criar e retornar um Web Token JSON. Então, vamos fazer isso em seguida. 16. Adicionar um AuthResponseDto: Serão quatro. Na verdade, podemos criar o token da Web JSON. Temos que preparar algumas coisas. Uma coisa é que temos que verificar a senha no login. E isso já diz que é claro que também precisamos de um método de login. E então a terceira coisa é que precisamos outro DTO para retornar o token web JSON no final, bem, não é totalmente verdade que realmente precisamos desse DTO. Mas nos fins desta classe, até o final deste curso, você terá a opção de retornar um Token Web JSON junto com o token de atualização. E isso é, então, apenas para o front end. Portanto, há dados nessa resposta AO que são úteis para o front-end. Então é isso que vamos fazer. Primeiro criamos outro modelo aqui. Clique com o botão direito do mouse na pasta models, adicione uma nova classe e agora chamamos essa coisa de resposta d t. Agora, essa coisa obtém algumas propriedades. A primeira propriedade, talvez se perguntando por que diabos precisamos de algo assim? Bem, eu chamo isso de sucesso. Você pode chamá-lo de sucesso. Por exemplo, isso informará ao front-end se essa solicitação foi bem-sucedida e usaremos isso para dizer ao front-end, por exemplo, que a senha estava errada ou que o usuário não existe, ou que está tudo bem. E neste caso, esse sinalizador está definido como true, mas nós o inicializamos com falhas. Com essa informação, o front-end pode fazer outras coisas junto com essa propriedade agora, que é a mensagem assim. E isso é, por padrão, string vazia. Além disso, se você não quiser retornar essa resposta de autenticação no DTO, também podemos dizer que o controlador faz qualquer coisa com isso. Por exemplo, se usarmos o controlador novamente para encaminhar a solicitação para o serviço e o serviço retornar esse DTO, esse objeto aqui. E vemos que o sucesso é o sinalizador de sucesso está definido como false e temos uma mensagem como se uma senha estivesse errada, então também podemos decidir não retornar o objeto completo. Podemos apenas dizer que retornamos uma solicitação ruim, por exemplo, ou uma palavra não autorizada o que você quiser. Então você ficaria mais flexível com esse tipo de objeto. Agora, a última coisa por enquanto, finalmente, o token. Vamos remover esse espaço aqui. E isso também é uma string vazia. Primeiro, ok, então este é nosso DTO de resposta do autor com um sinalizador de sucesso, a mensagem e o token. E, em seguida, escreveremos um método para verificar a senha antes que possamos finalmente implementar o método de login. 17. Verificar a senha: É para verificar a senha. Voltamos para nossa parede de um serviço. Isso é novamente um método particular semelhante a essa coisa na verdade. Assim, podemos copiar e colar, pelo menos tentar copiar e colar esse método aqui. E em vez de criar um hash de senha, agora queremos verificar o hash de senha. Então, vamos apenas digitar a verificação aqui. Mais uma vez, obtemos as senhas planas como uma string. E agora também o hash de senha e a senha salt, mas não como nossos parâmetros. Obtemos isso do método de login. E agora aqui já fizemos isso. Talvez você se lembre, podemos dar esse algoritmo de criptografia, essa instância de mistura H 512 nítida. Podemos dar a essa coisa um sal e esse sal. Então tentamos calcular o hash com base na senha dada, certo? Então agora dizemos que nosso valor de hash computado é essa coisa com a senha fornecida salt e a senha fornecida. Depois disso, retornamos sequência de hash calculada igual e, em seguida, Password Hash. Como são matrizes de bytes, temos que usar seqüência igual. Claro, mudamos nosso valor de retorno aqui para valor booleano. Portanto, temos que usar seqüência igual porque são matrizes de bytes. Se você usasse apenas os sinais de igual, hash calculado é igual ao hash de senha, isso não funcionaria. Portanto, certifique-se de usar a sequência igual. Diz aqui, determina o que as duas sequências são iguais comparando os elementos, usando a comparação de igualdade padrão para seu tipo. E no nosso caso, essa é a mordida e o tipo. Então, um byte por byte, isso será comparado nesse método. Então sabemos se a senha está correta ou não. Agora, vamos implementar o método de login em seguida. 18. Implementar o método de login: Para o método de login, novamente, vamos para a interface aqui e retornamos uma tarefa. E agora você vê isso com a resposta do autor. Em DTO. Chamamos esse login com o usuário DTO novamente como uma solicitação. E voltarei para a classe de implementação. Podemos implementar automaticamente a interface. E aqui estão os métodos. Deixe-me apenas puxá-lo para cima. Vamos fazer isso aqui, talvez. Aí está ele. Agora, a primeira coisa é que precisamos do usuário. Então, digamos que o usuário var agora seja Waitz. Contextos parecem que assim que eu, enquanto digitei o aguarda, Visual Studio editou a palavra-chave assíncrona aqui. Isso é muito bom. Então lembre-se, se não aconteceu, você precisa adicionar a palavra-chave assíncrona. Agora contextos e agora podemos acessar nossos usuários. Então dizemos primeiro ou assíncrono padrão. E aqui dizemos U para usuário, onde o nome de usuário ocorre, o Nome de usuário da solicitação e, caso o usuário seja nulo, então, agora podemos retornar e todos vocês correspondem AO sinalizador de sucesso é falso por padrão. Mas também podemos adicionar uma mensagem como o usuário não encontrado, por exemplo, agora o controlador sabe disso. E também se você retornar esse objeto, a frente e sabe disso também. Agora, o próximo passo, se encontrarmos o usuário, é verificar a senha. Novamente, começamos com um ponto de exclamação if e depois. Então, verificamos se a senha não está correta, ela não está verificada. Você fornece essa senha de solicitação de método. E, em seguida, encontramos o usuário. Então, usamos o hash de senha do usuário e também o sal de senha do usuário. Agora, se isso estiver errado, retornaremos novamente uma nova resposta de autenticação DTO com outra mensagem, como Senha errada. Isso é então verificado e agora, se tudo estiver correto, retornaremos uma nova resposta do autor, D20. E vamos apenas dizer que o sinalizador de sucesso está definido como verdadeiro. Por enquanto. É isso. Não criamos um token. Primeiro nesta etapa para fins de aprendizado, só queremos verificar se o login com o nome de usuário e senha funciona em geral. E para poder testar isso, agora precisamos de outro endpoint, é claro. Então, vamos voltar ao nosso controle off. Mais uma vez. Vamos apenas copiar esse método aqui. Chamamos isso agora simplesmente de fazer login. Também chamamos aqui nossos métodos de login. E agora vamos dizer que se a resposta for bem-sucedida, podemos retornar a resposta OK. Tudo bem, então retornamos a resposta completa. E, caso contrário, podemos decidir, por exemplo, poderíamos, também poderíamos retornar um ok com a resposta. E, nesse caso, o front-end tem que verificar se o sucesso é verdadeiro ou falso e, em seguida, mostrar a mensagem de erro ou não, ou podemos fazer outra coisa. Podemos dizer que solicitações defeituosas retornarão uma solicitação incorreta e simplesmente adicionarão a mensagem em resposta. Novamente, como eu disse anteriormente, quando criamos a resposta auth para esta coisa aqui depende totalmente de você. Se você acha que tem um front-end e quer enviar um 200 ok. De volta. Em qualquer caso, com isso ok, ou retornar, ok. E, em seguida, responda, então a frente tem que decidir o que fazer e, em seguida, faça assim em qualquer caso. Portanto, você não precisa verificar aqui com esta cláusula IF aqui se essa resposta for bem-sucedida ou não. E então você pode apenas alcançar a resposta na frente e fazer todo o trabalho, ou se você quiser fazer isso assim e isso é realmente totalmente com você. Não há melhor prática na minha opinião aqui. Depende realmente do aplicativo que você deseja criar. Mas para nossos propósitos de teste, para fins de aprendizado aqui, acho que isso está tudo bem. Verificamos se a resposta foi bem-sucedida. Nesse caso, retornamos a coisa completa. Caso contrário, veremos uma solicitação ruim apenas com a mensagem. E agora a última coisa que temos que fazer, você pode vê-lo aqui. Temos um método de postagem aqui e também outro método de postagem aqui. Então isso não funcionaria. Esses são dois exatamente os mesmos endpoints com exatamente as mesmas rotas. Então, apenas API e, em seguida, desligado para o controle um objetivo. Então, vamos mudar isso e podemos alterar isso aqui com postagens HTTP. E então, entre parênteses, definimos a rota para o login. E essa é apenas outra maneira de escrever algo assim. Também podemos adicionar outro atributo aqui, o atributo route e, em seguida, basta remover o login aqui. Isso é, em essência, exatamente o mesmo. Então, vamos combinar o atributo post HTTP com o atributo route. E então temos nossos endpoints. E agora eu diria que salvamos isso e testamos isso já. Tudo bem, lá nos lembramos que já temos nossos usuários, Homem de Ferro e Batman. Então, podemos testar diretamente o método de login aqui. Então experimente. Por exemplo, vamos apenas testá-lo. Teste-o com uma string, string que podemos executar e vemos a mensagem correta que o usuário não foi encontrado. E você também vê o código de status 400 aqui. Vamos dar uma olhada aqui na guia Rede, por exemplo, vamos tentar isso novamente. Pressione Executar. Se você vê-lo novamente. Este é o código de status 400, que significa uma solicitação incorreta. Então isso é exatamente a mesma coisa aqui. E agora vamos testá-lo com o Homem de Ferro, mas a senha é string. Nós apertamos Executar, recebemos uma solicitação ruim com a senha errada da mensagem, está correta. Agora, insira a senha correta. Vemos nosso DTO de resposta Auth com sucesso, verdade, sem mensagem, sem token. Mas isso é o que vamos mudar a seguir. Então agora, finalmente, criaremos o token da Web JSON. 19. Criar e devolver um JSON Web Token: Tudo bem, então de volta ao Visual Studio. E agora a primeira coisa que precisamos é realmente um segredo. Porque com esse segredo, o back-end pode verificar se o Token da Web JSON para o qual o front-end ou o usuário está enviando, o cliente está enviando para o back-end é realmente válido. Com esse segredo, recriamos o token da Web JSON e também usaremos esse segredo para verificar o JSON Web Token e somente o back-end conhece esse segredo. O segredo não está disponível em essência no token real, então apenas o back-end conhece o segredo e a largura desse segredo. Podemos verificar o Token Web JSON real. Isso é muito importante e existem várias maneiras de fazer isso. Claro, você pode editar diretamente no serviço de autenticação. Você pode editar em uma loja, ou a maneira mais fácil aqui, no nosso caso nesta classe, seria o arquivo adjacente de configurações do aplicativo. Então, adicionamos outra seção aqui, chamamos essas configurações do aplicativo. E então nós apenas inserimos o token. E isso pode ser o que você quiser. Qualquer tipo de personagem pode ser usado aqui, qualquer sequência de caracteres, como minha chave secreta, apenas certifique-se de que isso tenha pelo menos 16 caracteres, caracteres nele, certo? Portanto, o comprimento mínimo deve ser de 16 caracteres. E com isso, agora podemos acessar chave secreta do token e criar nosso token da web JSON. Com isso, agora vamos gerar o token. Mas também temos que inserir alguns pacotes NuGet. Mas desta vez vamos fazer isso ao longo do caminho. De volta ao nosso serviço off. Vamos descer aqui. Criamos um novo método, string privada, Create Token e recebemos o usuário aqui. Agora, a primeira coisa, as reivindicações listam reivindicações e precisamos de outro namespace para essas reivindicações de segurança do sistema. Agora isso é chamado reivindicações e esta é uma nova lista de reivindicações. Aqui. Agora já definimos alguns valores, então vamos adicionar uma nova reivindicação. Com identificador de nome de tipos de reivindicação Esse será o ID do usuário. Então, ID do usuário e, em seguida, defina isso para uma string ou transfere para uma string. Vamos também adicionar outro. Então, nova reivindicação, nome dos tipos e esse será o nome de usuário. Isso já é uma string, então vamos adicionar o componente ou não precisamos de uma vírgula aqui. Ainda não, ainda não. Mais tarde, quando adicionamos as estradas, adicionamos outra reivindicação aqui. Já posso dizer que quais são as reivindicações? Bem, em essência, essas são informações sobre os dados do usuário serão armazenados no token da Web JSON e vamos dar uma olhada no token da web JSON e, em seguida, ver o que está realmente armazenado lá. Então, até agora para obter informações, bem, a reivindicação representa uma reivindicação. Então aqui você pode armazenar qualquer coisa, em essência qualquer informação que você quiser. Isso é o que queremos armazenar no token da Web JSON. Com isso, o cliente que sabe, tudo bem, qual é a ideia do usuário atualmente autenticado ou do nome de usuário e assim por diante. Certo? Agora, a próxima coisa é uma chave, uma chave de segurança simétrica. Então, vamos criar essa coisa com a chave var, nova chave de segurança simétrica. E já precisamos de outra referência aqui. Desta vez. Como eu já disse, instalamos o pacote Microsoft Identity Model dois tokens, encontramos e instalamos a versão mais recente se você não vir aqui no menu de contexto, por favor. Novamente, vá para Gerenciar pacotes NuGet e , em seguida, instale este pacote aqui manualmente ou faça assim. Portanto, ele deve ser instalado. Vamos parar com isso. E lá deveria estar. Temos o modelo de identidade da Microsoft é namespace de token. Vamos apenas mover este rapidamente para o programa CS porque eu quero fazer este banco global aqui. E agora aqui adicionamos esse namespace. Ótimo, então vamos voltar ao nosso método. Temos nossa chave de segurança simétrica, mas ela recebe alguns argumentos. A primeira coisa agora é a primeira e a única coisa a ser mais exato é o nosso segredo. Com nossa chave secreta, podemos criar essa chave de segurança simétrica. Então, vamos responder a codificação de texto do sistema, UTF-8, obter bytes. E agora temos que acessar a configuração, que é as configurações do aplicativo JSON. Então, temos que fazer uso da injeção de dependência. E fazemos isso aqui em cima. Então, o que precisamos para injetar isso, a configuração dos olhos. Chame essa configuração. vez, crie um atribuir a configuração do campo, o sublinhado aqui, assim. Agora aqui, podemos dizer seção de configuração. E essas são agora, agora são configurações disso, o token disso. Agora queremos o valor, feche isso. E temos nossa chave de segurança simétrica. Com essa chave, podemos criar as credenciais de login também necessárias para o nosso token. Vamos chamar isso de créditos. Agora é bastante complexo, mas essa é apenas a maneira de criar um token da Web JSON. Espero que ainda esteja comigo. Não é um bom momento para estar em multitarefa, por exemplo. Então, por favor, volte para mim se quiser escrever o código junto comigo. Agora sabia assinar credenciais com nossa nova e linda chave. E precisamos de um algoritmo. E agora vamos usar os algoritmos de segurança. Eu quero realmente usar o algoritmo de assinatura HMac SHA, Mac disparou 12. Tudo bem, então esse é o único. Com esses créditos. Agora, com essas credenciais de login, podemos criar um token de segurança JWT. Token da Web adjacente, token de segurança, token var. Agora, um novo token de segurança JWT. Precisamos de algo mais aqui, tokens de modelo de identidade do sistema JWT. Mais uma vez, instale este pacote. Então, novamente, precisamos adicionar alguns argumentos aqui. Primeiro, a reivindicação, então ela é armazenada neste novo token. Em seguida, temos que definir datas de validade. E digamos que essa coisa seja válida por um dia, então data e hora agora e dias um. Tudo bem. A próxima coisa agora as credenciais de assinatura são definidas como créditos. E vamos remover essas coisas aqui e V está pronto. Então agora este é o nosso token e também obtenha a string final, o token web JSON final. Chamamos var JWT, novo JWT, token de segurança, um manipulador. Aqui agora dizemos token com o token e depois retornamos o JWT. Respire fundo. Sei que é complexo, mas é assim que se faz. O importante é que armazenemos nossas reivindicações no JWT. Definimos datas de expiração e também as credenciais de login. Isso está aqui para nossa chave secreta e a seção de token de configurações do aplicativo. Mais uma vez, aqui está. Esta é a nossa chave secreta. E agora é hora, é claro, chamar essa coisa de volta aos métodos de login. Aí estamos nós. Vamos apenas dizer token de string. Agora é criar token com nosso usuário. Aqui. Agora, definimos o token, token, segurança tudo, ok, e eu saberia, digamos vamos testar isso, vamos apenas verificar porque acho que vi isso antes, então vamos salvar isso novamente. E acho que isso, de outra forma, levaria a um erro. Então, vamos adicionar a vírgula aqui. E agora vamos testar o aplicativo. Vamos tentar fazer login novamente. Experimente novamente com o Homem de Ferro. Se você pressionar Executar, lá está. Este é o nosso token adjacente e da Web. É assim que essa coisa parece. Agora há um lado bonito chamado JWT. Oh, aí está. Onde você pode colar seus tokens da Web JSON. Basta dar uma olhada no que está lá dentro. E como você pode ver aqui, a primeira parte para a primeira aqui, o primeiro período. Podemos ver o algoritmo e o tipo de token. Temos nossa mistura h de cinco e décimos. tipo de token de algoritmo é um token JWT. E agora a carga útil das reivindicações, temos identificador de nome. Este é o ID do usuário e também a data de validade, que está bem, no dia seguinte e 21h14. Agora aqui podemos verificar a assinatura. Portanto, esta é muito legal, a chave secreta, mas como você pode ver, ela não está disponível aqui, apenas os nós back-end dessa chave secreta. E vamos dar outra olhada com o Batman. Batman e traste. Acertamos Execute, copiamos isso, colamos aqui e você vê que algo mudou, que é o nome identificado, é claro que agora é id2, como você pode ver aqui também, ID 12. E agora temos um minuto depois são agora as datas de validade. Tudo bem, então isso funciona. Temos nosso token da web JSON e agora o que devemos fazer com isso? Bem, vamos criar outro endpoint que só está disponível para autorizar usuários. Eu diria. Agora, com esse endpoint, é totalmente necessário adicionar esse token ao cabeçalho da sua solicitação. E só então você poderá, ou pode acessar esses endpoints. E eu diria: Vamos fazer isso em seguida. 20. Adicionar um Endpoint seguro para usuários autorizados: Certo, então de volta ao Visual Studio. Vamos criar esse endpoint agora. E eu só faço isso aqui no controlador off nem na implementação do serviço. Na verdade, só queremos verificar, o usuário está autorizado e capaz de chamar isso. Então, agora acabamos de criar um GetMethod com HTTP. Novamente, esse agora é nosso método de solicitação HTTP. Vamos apenas usar resultados de uma ação pública. Então agora nenhuma tarefa, nenhum método assíncrono aqui e nós apenas retornamos uma string. E vamos chamar isso de Aloha porque eu amo como Y. Então também podemos retornar. Certo? Aloha. Você está autorizado. Certo, ótimo. Portanto, esse é o nosso endpoint, seja, se chamarmos isso agora, todos devem poder acessar essa mensagem ou receber essa mensagem. Então, vamos testar isso rapidamente. Aí está, o GetMethod aqui, API desativada. Tentamos isso, atingimos as notas Execute, embora você esteja autorizado. Todos podem fazer isso. Mas agora queremos garantir essa coisa. E a maneira mais fácil de fazer isso é apenas usar os atributos autorizados. Portanto, autorize que seja, ainda não é conhecido, então temos que usar o namespace, autorização Microsoft ASP NET Core. E é isso. Ótimo. Bem, vamos testar isso primeiro. Então, de volta a vaguer. Espero que ele reconstrua. Vamos fazer isso manualmente aqui para ter certeza absoluta. Ok. Agora ele fez o GetMethod aqui. Agora, apertamos experimentá-lo, executar e recebemos um erro. Bem, espero que não haja esquema de autenticação especificado. Então você pode usar o token da Web JSON, precisamos de um esquema de autenticação. Então, vamos adicionar isso rapidamente. Voltamos aos nossos programas, sim. E agora aqui em baixo temos que escrever algumas coisas novamente. Primeiro serviços de construtor e adicione autenticação. Essa coisa. Agora, ficando novamente um pouco complicado, queremos um portador de token da Web JSON padrões. Isso não é conhecido, então vamos dar uma olhada. Podemos instalar o pacote Microsoft ASP.NET Core Authentication, portador JWT. Isso é o que precisamos porque isso é um token de portador. Então encontre e instale a versão mais recente. Quando essa coisa estiver instalada. Em seguida, podemos usar um esquema de autenticação. Claro, paramos o aplicativo e agora ele sabe o que está acontecendo aqui. O valor padrão é usado pela autenticação por par. Portador do termo urso. Talvez você já tenha ouvido. É apenas um símbolo de portador, em essência, é apenas uma string. Pode ser uma string curta ao longo da string, Web Token adjacente, qualquer outra coisa? Ele é chamado de portador e você verá no cabeçalho, então também adicionaremos o espaço do portador de valor e, em seguida, o token da web JSON. Mas veremos isso em um minuto. Por enquanto, esquema de autenticação aqui. Agora dizemos adicionar JWT Vera com algumas opções. Claro, essas opções se parecem com isso. Então, primeiro, temos opções, parâmetros válidos de token, que são novos parâmetros e validação de token. Novamente, eles obtêm alguns valores. Primeiro, validamos a chave de assinatura do problema. Isso está definido como verdadeiro. Em seguida, a própria chave de assinatura do emissor, O que é isso novamente, são chave ultra-secreta. Então, uma nova chave de segurança simétrica novamente. E novamente textos do sistema codificando UTF-8. Em seguida, obtenha bytes. Aqui. Agora crie uma configuração. Obtenha configurações de seção, token e, a partir disso novamente, o valor. Tudo bem, Agora os dois últimos valida o problema. Podemos definir isso como falso na verdade e também valida o público também falso. E fechamos isso aqui, e é isso. Formate essa pequena esperança. E agora temos nosso middleware, em essência, o serviço de logística ou apenas um serviço exigido pelos serviços de autenticação. Então, agora vamos testar essa coisa novamente. Reconstruído. Vamos dar uma olhada. Tentamos isso para que ele seja executado. E agora ótimo, temos um banco não autorizado. Então, para 01 significa autorizado. Mais uma vez, podemos verificar novamente. Quando dizemos executar para 01, pegamos esta bolsa. Esta é a resposta, nenhuma mensagem, nada disso. Este é apenas o código de status. Não estamos autenticados e não estamos autorizados a obter isso ou acessar esse endpoint. Isso é ótimo porque não enviamos nenhum cabeçalho com isso. Novamente, podemos dar uma olhada aqui na guia de rede que você executaria. E você vê a resposta definida como cabeçalhos de solicitação, nada com autenticação ou autorização. Então, isso é o que temos que fazer a seguir. Temos que definir o cabeçalho de autenticação para nossas solicitações, para nossa chamada. E para isso temos que mudar esse vetor u i um pouco. Então, novamente, temos que fazer algumas coisas nos programas, sim. E também temos que adicionar middleware para que isso funcione. E então poderemos usar nosso token da Web JSON com a UI Swagger e x's, o endpoint, o endpoint autorizado. Então, vamos fazer isso em seguida. 21. Use o JWT com SwaggerUI & o Middleware de Autenticação: De volta ao programa CS aqui nesta linha X, vaguer Jane, temos que adicionar mais algumas coisas. É maior. Jen recebe opções. Em relação a essas opções, dizemos que queremos adicionar uma definição de segurança. Vamos chamar isso de OAuth2. Em seguida, defina um novo esquema de segurança de API aberto. Deixe-me remover isso. Basta adicionar outro namespace aqui. E aqui. Agora podemos dar a essa coisa uma descrição como cabeçalho de autorização padrão usando o esquema de portador, por exemplo, jogo. Isso será então, como eu disse, portador e, em seguida, o token real assim. Essa seria a descrição. Então podemos definir o parâmetro em. Então, onde queremos definir isso ou colocar isso? localização do parâmetro é o cabeçalho. Então o nome está desligado. O tipo é tipo de esquema de segurança, chave de API e ordem para poder definir isso, temos duas opções. Filtro de operação, depois requisitos de segurança, filtro de operações. E para isso, temos que instalar outro pacote, seu filtro de operação. Aqui, instale o pacote, fivela swash. Nós paramos com isso. Acho que está instalando agora. Aí está. Agora, isso foi um pouco rápido swashbuckling ASP NET Core filtros. Este é o pacote que precisamos com isso agora não terminamos. Também temos que adicionar outro middleware aqui em baixo. Isso será AB, uso de autenticação. Ele diz isso aqui como o middleware de autenticação de recall da Microsoft HP para o construtor de aplicativos especificado que permite recursos de autenticação. Isso é ótimo. E agora vamos executar isso mais uma vez. Voltamos aqui agora primeiro, você vê aqui já temos um novo botão autorizar. É aqui que podemos adicionar agora nosso token. Vamos fazer login primeiro aqui com o Homem de Ferro e depois pimentar e executar. Copiamos o token. Agora podemos definir isso aqui, portador e, em seguida, o espaço do portador de token, e então o token que podemos autorizar fechar. Agora tentamos executar isso, aperte executa. E voila, recebemos nossa mensagem de volta. E aqui podemos ver que este é o cabeçalho de autorização que dissemos. Vamos apenas verificar aqui na guia Rede. Pressione Executar novamente. Vimos em nossos cabeçalhos de solicitação, dissemos autorização, cabeçalho de autorização, portador e, em seguida, o token. Agora tudo funciona. Criamos o JSON Web Token, conseguimos usá-lo e obter um acesso autorizado a endpoints autorizados. Ótimo. Este é, em essência, o primeiro grande capítulo, e o próximo capítulo agora é o token de atualização. 22. Atualizar Tokens Introdução: Agora isso já funcionou. Isso é perfeito. Mas a questão é agora, quando você tem seu token da web JSON, ele está expirando em breve, ou pode ser o caso de haver um invasor. E com esse invasor, seu token da Web JSON não é mais seguro. Portanto, esse invasor pega seu JSON Web Token e, em seguida usa essa coisa para se autenticar e você não quer fazer isso. Portanto, é por isso que usamos datas de expiração mais curtas para nossos Tokens Web JSON, como 15 minutos, por exemplo. Quando fazemos isso, para obter um novo token da Web JSON, precisamos de um token de atualização porque, caso contrário, se estiver adjacente, já tenho o tokenismo válido. E você, como usuário, ainda quer usar um aplicativo web com o JSON Web Token, isso não funcionaria, mas o que você pode fazer então, e isso é uma essência, a responsabilidade do front-end. O que você pode fazer é usar um token de atualização válido por muito mais tempo, por exemplo, uma semana, sete dias. Portanto, é mais difícil obter esse token de atualização, então não é mais fácil para um invasor. E também quando você usar esse token de atualização, não apenas atualizaremos o token da Web JSON, mas também o próprio token de atualização. Então, tudo é novo então. E você, como usuário, não percebe nada sobre isso. Mas você ainda está autenticado. Também autorize talvez tudo esteja seguro, certo? Então, vamos dar uma olhada nos tokens de atualização em seguida. 23. Adicionar Atualizar dados de token ao modelo de usuário: Tudo bem, agora o primeiro passo para nosso token de atualização é que queremos armazenar o token de atualização junto com a data e a hora em esse token foi criado e quando ele expira. Deseja armazenar isso no banco de dados junto com o usuário. Portanto, o primeiro passo é, bem, para estender esse modelo de usuário aqui, adicionamos outra string, que é o token de atualização real. Obter isso pode ser uma string vazia como essa. E, em seguida, para uma data e hora, uma propriedade. primeiro é um token criado e o próximo, durante o dia, o token expira e você deseja armazenar isso ou adicionar outra migração ao banco de dados. Então, vamos fazer isso. Se o aplicativo estiver em execução, certifique-se de interrompê-lo. Basta fechar o terminal e depois vamos para o console do Package Manager. Onde estamos? Bem, temos que mudar o diretório. Certo, e agora inserimos migrações dotnet EF em dados de token de atualização, por exemplo. Vamos dar uma olhada no arquivo de migração. Aí está. Vemos que novas colunas serão adicionadas para usar como uma tabela. E se revertarmos a migração, eles serão excluídos? Então está tudo bem. Atualizamos o banco de dados com dotnet. atualizações de banco de dados. Tudo bem, vamos abrir o banco de dados novamente. O aberto, e agora já o vemos aqui. Temos o token de atualização e as datas. E aqui também a estrutura da tabela. Ótimo, então isso está feito. Temos nossos dados de token de atualização junto com os dados do usuário. E o próximo passo é criar o token de atualização no Login. 24. Criar o Token de atualização no Login: Agora, para criar um também retorna o token de atualização, a primeira coisa que precisamos aqui é, bem, podemos estender a resposta do autor DTO e os dados aqui também. Aqui agora você pode ver por que faz sentido criar este DTO de resposta de autenticação, não podemos apenas enviar o sinalizador de sucesso com uma mensagem e o token da web JSON, também podemos enviar o token de atualização e alguns dados junto com esse token de atualização. Porque então é responsabilidade do front-end decidir quando atualizar esse token de atualização. Mas veremos isso em lições futuras. Então, vamos primeiro adicionar as propriedades. Então, a primeira coisa novamente é o token de atualização real. Por padrão, novamente, esta é uma string vazia. E agora também, vamos adicionar a data de validade, então o token vai expirar. E agora outra coisa que faz sentido e facilita nossa vida é adicionar um modelo de token de atualização. Não armazenaremos isso no banco de dados, não retornaremos isso. Mas, em nossa lógica, usaremos esse modelo de token de atualização para colocar os dados aqui. E então você usa esses dados para fazer outras coisas, como configurar o token de atualização no cookie. Então, vamos criar outro modelo aqui, outra classe e chamar esse token de atualização agora. Aqui dizemos corda de prop. token de atualização é uma string vazia. Então dizemos data, hora, criamos e vamos chamar esse token apenas. Agora também, a data e hora expira. Tudo bem, agora de volta para o serviço de autenticação. E aqui agora podemos criar nosso método para criar o token de atualização. Então, novamente, são outros métodos privados, token de atualização de criação privada. E também retorna um token de atualização. Veja agora, já faz sentido usar o modelo de token de atualização aqui. E essa coisa agora, é claro, um novo token de atualização. E aqui nós apenas dizemos converter token para string base 64, então bytes de gerador de números aleatórios e, em seguida, 64. E é assim que criamos nosso token de atualização. Você vê que é simplesmente uma string de vários caracteres, então nada extravagante como o JSON Web Token. Este é o nosso token de atualização, e aqui isso será válido por uma semana e será criado. Agora, no final, retornamos esse token de atualização. Certo? Agora, quando conseguimos isso, podemos usar esse método para fazer login. Então, aqui no método de login depois de criar o token da Web JSON, agora podemos dizer que nosso token de atualização é criar um token de atualização. Defina essa coisa aqui, é claro. Então, talvez possamos formatar isso de forma um pouco diferente. Dizemos que o token de atualização, o token e o token expira, data é o token de atualização expira. Agora salvamos isso e testamos rapidamente com swagger. Aí estamos nós. Vamos fazer login. Experimente isso, cara, pappa e executa. E lá está ele. Temos nosso token da Web JSON e agora também o token de atualização. Então é assim que essa coisa se parece junto com a data de exploração. Perfeito. E agora o próximo passo é armazenar esse token no banco de dados junto com o usuário e também adicioná-lo a um cookie. Então, vamos fazer isso em seguida. 25. Definir Atualizar Token no Cookie e no banco de dados: Agora, para definir o token de atualização para um cookie, precisamos da solicitação e do objeto de resposta todo esse processo aqui na API da Web. E para poder acessar essa coisa, precisamos do exercício de contexto http. Então, queríamos acessar os contextos HTTP, usaríamos no controlador. Bem aqui. Ele já estaria disponível aqui. Você já tem o contexto HTTP. E com isso, você pode simplesmente acessar a resposta. Por exemplo, semente aqui cabeçalhos de resposta e, em seguida, também solicite cabeçalhos e assim por diante. Então você já pode fazer isso aqui. Mas como queremos usar o serviço aqui, primeiro temos que injetar o exercício de contextos HTTP. Então, vamos fazer isso muito rápido. Aqui em cima, no construtor, dizemos que eu exercício de contexto HTTP. Vamos chamar isso também de exercício de contexto http. E novamente, criamos esses campos e um sublinhado aqui e aqui. E também temos que registrar essa coisa e fazemos isso, talvez vamos parar o aplicativo primeiro. Ok, e agora no programa CS, aqui em baixo, podemos dizer serviços de construtor e em seguida, adicionar exercícios de contexto HTTP. Esse é o único. Ok, então com isso, temos nosso acessador de contexto HTTP e registramos essa coisa. E agora podemos criar nosso método para definir esse token no cookie e também no banco de dados. Então aqui, novamente, outro método privado , Async desta vez, mas não retornamos nada de atualização token. E essa coisa obtém os objetos de token de atualização reais e , em seguida, também o usuário. Então é disso que precisamos. E agora começamos com o cookie. E um cookie precisa de opções de cookies. Então, primeiro, as opções de cookies, novas opções de cookies. E aqui dizemos que este é um cookie somente HTTP. Isso significa que ele só pode ser acessado por meio da solicitação, por meio das chamadas e não via JavaScript no navegador. Isso é importante. E este é o único lugar onde precisamos desse cookie. E também podemos definir o estágio de exploração para atualizar o token expira. Estas já são as opções de cookies e agora com os contextos HTTP exercitam, e então pode ser nulo. Então, aqui podemos acessar os contextos HEB. E a partir disso agora definimos a resposta. E aqui podemos acessar os cookies. E aqui acabamos de dizer, apenas dizemos depende. O valor é chamado de token de atualização. Em seguida, o token de atualização. Token, esse é o valor. E também damos essa coisa, as opções de cookies, e é assim que definimos o cookie em nossa resposta. A próxima coisa agora também é o usuário. Portanto, o token de atualização do usuário será definido para atualizar token de token. Em seguida, temos um token de usuário criado, que é o token de atualização criado. A última coisa que o token de usuário expira é o token de atualização expira e, no final, dizemos contextos de espera e, em seguida, Salvar alterações assíncronas. Certo? E, novamente, agora usamos isso em nosso método de login. Aqui em cima. Depois de criarmos o token de atualização, dizemos definir token de atualização com nossos objetos de token de atualização e o usuário. Vamos salvar isso e, novamente, testar essa coisa. Tudo bem, lá estamos nós. E agora já vamos abrir o console aqui. Como eu quero mostrar algo na guia do aplicativo, você vê nosso aplicativo atual localizado sete O oito. Vemos que aqui podemos acessar os cookies reais, mas vamos dar uma olhada. Na guia Rede, tentamos fazer login. Mais uma vez, digamos que com a pimenta do Homem de Ferro, nós batemos Execute. E você vê o que nós recebemos de volta. E agora aqui primeiro vemos nos cabeçalhos, na resposta, vemos essa coisa aqui, definir cookies. Portanto, este é o nosso cookie real, agora está definido como um cookie somente HTTP. O token de atualização é definido como um cookie somente HTTP. E agora também podemos encontrar isso na guia do aplicativo aqui. Aí está ele. Vamos fazer isso um pouco maior. Talvez tenhamos o token de atualização de valor e o token de atualização de nome. E agora aqui também o valor. E o melhor é agora que automaticamente essa coisa é enviada a cada solicitação. Então, se, digamos, por exemplo, você quiser obter isso aqui, diga experimente, ele executa, vá para a guia Rede. É claro que não estamos autorizados, mas vemos que em nosso cabeçalho de solicitação, envie esse token de atualização. Isso é importante agora para as próximas etapas porque podemos definir o token de atualização. Quando criamos um token de atualização, definimos um token de atualização no cookie e também aqui no banco de dados. Agora podemos ver esse token de atualização completo. Agora, o próximo passo é bom atualizar o token de atualização e também o JSON Web Token, é claro, porque o importante aqui com o token de atualização é que assim que uma Web JSON o token expira ou alguns segundos ou minutos antes dele. É responsabilidade do front-end chamar outros endpoints que permitam ao usuário atualizar o JWT, o JSON Web Token e também o token de atualização. E mesmo quando o token da Web JSON expirou, ele não é mais válido com a ajuda do token de atualização válido por mais tempo, podemos criar um novo token JWT e uma nova atualização token para que o usuário ainda seja autenticado e autorizado e o usuário não precise se autenticar novamente com o nome de usuário e a senha. Então, essa é a melhor coisa do token de atualização. Mas, para isso, precisamos de outro endpoint onde possamos atualizar o pacote completo. Então, vamos fazer isso em seguida. 26. Atualizar o Token de atualização (e o Token Web JSON): Mais uma vez, de volta ao Visual Studio. E na interface criamos esses novos métodos, tarefa fora da resposta DTO. Chamamos esse token de atualização de metanol também. E não tem nenhum argumento. Sim, nós reconstruímos, mas teremos uma flecha, é claro, porque isso não está implementado. Mas vamos fazer isso agora muito rápido. Implemente a interface, enquanto nossos métodos provavelmente aqui em baixo. Sim, vamos colocar isso. Temos o usuário do registro. Agora vamos descer aqui. Existe nosso método de token de atualização. Novamente, se você pular o final da última lição, é importante que o front-end, front-end, chame essa coisa. Assim que o token da Web JSON expirar ou pouco antes ou depois. Em seguida, o front-end tem que chamar esse endpoint aqui. Bem, este não é o ponto final, este é o método de serviço, mas é claro que o endpoint será criado no controlador em um minuto. Mas agora com esse método aqui, podemos atualizar tudo. A primeira coisa que precisamos é desse token de atualização atual. Então eu já disse que , a cada solicitação agora, o token de atualização será enviado com nosso exercício de contexto, exercício de contexto HTTP. Em seguida, os contextos HTTP. Podemos acessar a solicitação desta vez, não a resposta às solicitações, e procurar um determinado valor de cookie, e esse seria o token de atualização. Depois disso, com o token de atualização, tente novamente obter o usuário com o token de atualização. Então, o usuário var agora Waitz contexta os usuários primeiro ou assíncrono padrão, onde o token de atualização do usuário agora é o token de atualização, o fornecido do cookie. Agora, se você não encontrar o usuário, dizemos retornar nova resposta de autenticação com a mensagem metanfetamina, token de atualização inválido. E outra opção, é claro, é se você encontrar um usuário, mas o token do usuário expirou. Portanto, falar expira é menor que uma data e hora. Agora, neste caso, retornamos novamente uma nova resposta de autenticação DTO com mensagem. E desta vez a mensagem simplesmente pode expirar. Nesse caso, o usuário teria que autenticar novamente com o nome de usuário e a senha. Mas se tudo for válido, temos um token de usuário ainda é válido. Mais uma vez, criamos um novo token. Esse é o token da Web JSON com nosso usuário. Em seguida, criamos um novo token de atualização. Crie token de atualização. E também defina essa coisa. Defina o token de atualização, o novo token de atualização e o usuário. No final, retornamos novamente uma nova resposta do autor, DTO. Com sucesso definido como verdadeiro. O token é o token, o token de atualização. Novo token de atualização, token. E definimos que o token expira para o novo token de atualização expira, que já era e deveria ser ele. Mais uma vez muito rápido, esta linha aqui é realmente importante. Nós pegamos o token de atualização do valor do cookie somente HTTP. E a partir disso tentamos encontrar o usuário desta vez, não com o ID do usuário, mas com o token de atualização, porque esse é um token apenas para um usuário específico. E se você não tiver o usuário, o token de atualização é inválido. Se o token tiver expirado, então, bem, retornaremos outra mensagem onde o token expirou e o sinalizador de sucesso é falso. Caso contrário, novamente, definimos o, o JSON Web Token para criar o JSON Web Token semelhante ao lock-in, criamos um novo token de atualização e definimos essa coisa e, em seguida, retornamos o pacote completo. Tudo bem, então agora precisamos dos endpoints. Então, para o nosso controlador, vamos editar aqui talvez. Então, novamente, um HTTP posts com embora um GET também funcionasse, mas vamos usar uma postagem aqui e atualizar o token. E o método agora sou preguiçoso, então vamos copiar colar o resultado da ação da tarefa e depois uma string. Chamamos isso aqui agora, atualizar token, sem argumentos. E chamamos o token de atualização sem argumento porque, novamente, o token de atualização vem com o cookie de solicitação. Se for bem-sucedido, retornaremos uma resposta OK. Caso contrário, retornamos solicitações ruins. Bem, eu diria que é hora de testar isso novamente. Vamos executar o aplicativo. Tudo bem, aqui estamos nós. Eu removi o cookie aqui da guia Aplicativo. Como você pode ver, um cookie está vazio. Não temos um conjunto de token de atualização e também a guia Rede está vazia. Então, vamos testar isso novamente. Vamos para o login, experimentamos isso com pimenta Iron Man, por exemplo, e executamos. Está tudo bem. Recebemos nosso token da Web JSON, o token de atualização. Também o vemos aqui no aplicativo uma guia. E agora, quando tento executar o endpoint do token de atualização aqui ou chamar essa impressão e execução. Isso funciona, obtemos um novo token de atualização. Você o vê aqui nas mudanças de valor. Agora, o que acontece? A propósito, é claro, no banco de dados? Também podemos dar uma olhada. Vamos apenas atualizar isso. Aqui vemos exatamente o mesmo token. E agora, quando eu removo os nove aqui e clique em Executar, novamente, recebemos a mensagem de erro correta, token de atualização inválido, colocá-lo de volta e agora ele funciona. E a data? Temos esse novo token aqui e vemos que expirar está definido para 16 de maio. Então deixe-me mudar a data na minha máquina. Mude, defina isso agora para denotar 20º, talvez mude. Tentei atualizar o token novamente. Ele diz que o token expirou. Ok, ótimo, então esse endpoint funciona totalmente. E, novamente, isso é responsabilidade do front-end. Não posso afirmar isso o suficiente para que o front-end ou o cliente tenha que verificar. Existe Web Token adjacente que expira ou já expirou. Nesse caso, precisamos pegar um token de atualização e chamar o endpoint do token de atualização para obter um novo token de atualização. Tudo bem, e com isso terminamos com os tokens de atualização e o último capítulo agora, as estradas e o grande tópico, autorização. 27. Introdução de Papéis: Agora, esses são os endpoints agora para o registro, para fazer login, para o token de atualização. E agora a última parte deve ser o papel. Temos nosso objeto de usuário no banco de dados, mas ele não tem nenhuma função ainda. Mas agora isso mudará. Então, o que vamos fazer a seguir é adicionar a função em uma nova migração. Portanto, esse campo é, então, no banco de dados, a função do usuário. E também usaremos as reivindicações para adicionar essa função no Token da Web JSON. E, em seguida, quando o usuário tenta chamar um determinado endpoint e o usuário precisa ser autorizado para esse endpoint. Em seguida, podemos verificar isso na API da Web com outro atributo. Por exemplo, talvez você tenha a função típica de usuário ou cliente, mas também uma função de administrador apenas nos administradores pode chamar determinados endpoints. Então, isso é o que vamos verificar a seguir. 28. Adicionar função ao modelo de usuário: A primeira coisa, novamente para nossas funções é adicionar o rolo ao modelo de usuário e adicionar uma nova migração. Aqui no modelo de usuário, adicionamos uma nova propriedade. Isso seria então uma string simplesmente com a linha e uma string vazia. Por padrão, salvamos isso e agora executamos outra migração. Portanto, as migrações dotnet EF usam linha, por exemplo. Tudo bem, agora vemos essa coisa aqui em nossa pasta de migrações. Acabamos de adicionar uma nova coluna. Tudo bem. Então, vamos atualizar o banco de dados com o banco de dados dotnet EF. Agora vamos dar uma olhada. Aqui estão nossos usuários. Atualizamos os dados, vemos a nova linha aqui e, claro, podemos alterá-la. Por exemplo, agora podemos dizer que o Irã tem o usuário da linha que pressionamos Aplicar. E se você mudar algo aqui, certifique-se no navegador de banco de dados para SQL light que você clique neste botão aqui, certo? Alterações. Agora, essas alterações são gravadas e salvas. Ok, então esta é agora a nova função e o modelo de usuário. E, em seguida, adicionamos a reivindicação da regra S ao token da Web JSON. 29. Adicionar papel como reivindicação ao JSON Web Token: Então, voltamos para o serviço de autenticação e, em seguida, onde criamos o token aqui, podemos simplesmente adicionar a linha agora como uma nova reivindicação. Então, apenas adicionamos uma nova reivindicação e depois os tipos de reivindicação e depois a linha. Aqui, está sugerindo já a coisa correta, linha do usuário, essa é a única. Já é isso. Portanto, agora já podemos testar se a função atual do usuário está disponível no token da Web JSON. Vamos dar uma olhada. Existe nosso aplicativo. Vamos fazer login novamente. A propósito, se você ainda estiver bloqueado ou tiver o token de atualização em seu cookie disponível, poderá usar simplesmente o endpoint do token de atualização aqui para obter o novo token da Web JSON. Essa é a melhor coisa agora com tokens de atualização, você não precisa fazer login novamente como eu preciso porque removi tudo dos meus cookies. Portanto, nesse caso, você poderia usar o endpoint de token Atualizar e obter um novo Token Web JSON. Você acabou de olhar para dentro. E agora aqui vemos o token da web JSON. Vamos pegar essa coisa. Dê uma olhada aqui, nós o colamos novamente. E devemos ver, sim, aí está, o papel agora, que é o usuário. Ótimo, então isso já funciona. Agora, a última etapa já é que temos que usar essa linha para a autorização que somente usuários específicos com uma função específica possam acessar determinados endpoints. Então, vamos fazer isso em seguida. 30. Usar o papel para a autorização: Agora vamos usar a situação atual. Tentamos obter um novo JSON Web Token aqui. Isso agora funciona porque já temos um token de atualização. Novamente, verificamos essa coisa aqui e você vê o usuário da função. Agora vá para o nosso getc chamado aqui e clique em, Experimente. Você vê por um ou não está autenticado ou autorizado. Agora adicionamos o token da Web JSON aqui. Hit Execute, estamos recebendo aloha, você está autorizado. Mas e se quisermos apenas que os administradores, por exemplo, usem esse endpoint. Portanto, o administrador da função, por exemplo, podemos mudar isso rapidamente. O controlador desligado. Aqui em cima, vemos onde está lá não está aqui em cima. Aqui embaixo. Podemos simplesmente adicionar parênteses rho. Em seguida, administrador, por exemplo, salvamos isso. Basta reiniciar o aplicativo. Então, agora estamos bloqueados novamente, mas com a ajuda do nosso token de atualização, obtemos um novo token da Web JSON para que não precisemos fazer login manualmente. Vamos autorizar novamente. Pressione Autorizar, fechar. Agora tentamos pegar essa coisa aqui e conseguimos um 403. Agora 403 Proibido. Então isso significa que enviamos um cabeçalho de autorização. Enviamos uma chave JSON Web Token aqui, mas com a linha errada. Agora vamos mudar nossa função aqui em vez de usuário, agora dizemos admin, ele se aplica e escreve as alterações. E agora, novamente, vamos atualizar o token. Tudo bem, então vamos copiar essa coisa ouvindo novamente. Temos que usar esse token aqui. Agora clicamos em Autorizar e agora 1 sétimo aloha, você está autorizado. Ótimo. Então, agora, como administrador com essa função específica, temos permissão para obter essas informações aqui ou acessar o conteúdo, as informações desse endpoint. Agora, a última coisa que muitos usuários, muitos alunos perguntam é o que acontece várias funções quando você tem, quando você quer autorizar mais varas do que apenas uma. Bem, basta digitar usuário e depois Admin. E isso também funciona. Vamos reiniciar o aplicativo manualmente apenas para ter certeza. Agora, quando usamos o mesmo token aqui, clicamos em Autorizar, ainda funciona. E último teste, digamos novamente, queremos dar a este usuário, a linha do usuário. Nós escrevemos a mudança. Mais uma vez, obtemos um novo token. Este agora é o token de usuário que você vê aqui. Agora, esse é um usuário. E clicamos em Autorizar um logout, Berra, fechar, executar, e ainda obtemos o contrário, você está autorizado. Agora é assim que as estradas funcionam. E com isso, acabamos com essa aula. Parabéns. 31. Considerações finais: Tudo bem, e é isso já em pouco tempo você aprendeu a registrar usuários, bloqueá-los e criar JSON Web Tokens. Também use tokens de atualização e você adicionou funções a esse usuário. Então agora eu acho que você já conhece todos os fundamentos para um processo de autenticação com dotnet six, eu realmente esperava que você aprendesse algo e isso fosse útil para você. Se assim for, eu adoraria ver um comentário. Muito obrigado por isso. E talvez você queira mergulhar mais fundo no dotnet e no blazer e outros funcionários em relação ao desenvolvimento web. E neste caso, eu adoraria vê-lo no meu canal do YouTube. Então, novamente, muito obrigado pelo seu tempo e obrigado por se juntar ao meu curso. E espero vê-lo no próximo curso ou no meu canal do YouTube. Tome cuidado.