Autenticación y autorización en . NET 6 con tokens web JSON (JWT), tokens y roles | Patrick God | Skillshare

Velocidad de reproducción


1.0x


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

Autenticación y autorización en . NET 6 con tokens web JSON (JWT), tokens y roles

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

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción

      1:34

    • 2.

      Descripción de la clase

      1:31

    • 3.

      Crear el proyecto

      1:39

    • 4.

      Añade el modelo de usuario

      3:31

    • 5.

      Cómo agregar el controlador

      3:36

    • 6.

      Primera prueba con SwaggerUI

      1:32

    • 7.

      Cómo agregar el servicio de autenticación

      2:24

    • 8.

      Inyectar el servicio (inyección de dependencia)

      1:46

    • 9.

      GitHub Repo

      0:54

    • 10.

      Cómo crear una contraseña

      6:32

    • 11.

      Cómo agregar el núcleo de DataContext y Entity

      3:36

    • 12.

      Instalar herramientas básicas

      1:31

    • 13.

      Cómo utilizar las migraciones en código

      4:46

    • 14.

      Abre la base de datos con el explorador de DB para SQLite

      0:56

    • 15.

      Usuario de la tienda

      1:51

    • 16.

      Cómo agregar un AuthResponseDto

      3:13

    • 17.

      Verificar la contraseña

      2:07

    • 18.

      Cómo implementar el método de inicio de sesión

      6:41

    • 19.

      Cómo crear y devolver un token web JSON

      11:59

    • 20.

      Cómo agregar un punto final seguro para usuarios autorizados

      6:53

    • 21.

      Cómo usar el JWT con SwaggerUI y el middleware

      4:21

    • 22.

      Cómo actualizar tokens

      1:34

    • 23.

      Cómo agregar datos de token actualizados al modelo de usuario

      2:13

    • 24.

      Cómo crear el token actualizado

      4:50

    • 25.

      Cómo establecer token actualizado en galletas

      7:21

    • 26.

      Actualizar el token de actualización (y el token web JSON)

      8:16

    • 27.

      Introducción de roles

      0:56

    • 28.

      Cómo agregar papel al modelo de usuario

      1:32

    • 29.

      Cómo agregar papel como reclamo al token web de JSON

      1:55

    • 30.

      Cómo usar el papel para autorizar

      3:40

    • 31.

      Palabras finales

      0:48

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

397

Estudiantes

2

Proyectos

Acerca de esta clase

Bienvenido a la "Autenticación y autorización en. Clase NET de 6".

En esta clase aprenderás cómo

  • Crear un proyecto de API web de ASP.NET
  • registrar usuarios y conectarlos con su nombre de usuario y contraseña
  • Almacenar a estos usuarios
  • Cómo utilizar las migraciones básicas
  • crear tokens web de JSON (JWT)
  • Crea tokens de actualización
  • autorizar a un usuario con roles

Aprenderás todo eso en un solo proyecto NET 6 y Visual Studio 2022.

Una pequeña experiencia con C#, . NET, y crear API Web es definitivamente una ventaja.

¡Espero que estés listo! Empecemos.

Conoce a tu profesor(a)

Teacher Profile Image

Patrick God

Teaching code in a simple and fun way.

Profesor(a)

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... Ver perfil completo

Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. INTRODUCCIÓN: Oye ahí, gracias por pasarte y bienvenidos al curso de autenticación y autorización de dotnet seis. Mi nombre es Patrick guardias. Es posible que ya me conozcas desde mi canal de YouTube donde hablé principalmente desarrollo web con dotnet y blazer y también Angular React y así sucesivamente. Así que tal vez si no conoces el canal ya, tal vez quieras echar un vistazo. Muchas gracias por considerar, pero por supuesto también puedes simplemente quedarte conmigo aquí porque en este curso de autorización de autenticación, aprenderás a crear un usuario en una base de datos. Entonces registrando a un usuario, registrando a este usuario mendigar en ancho, nombre de usuario y la contraseña. Useremos un hash de contraseña y la contraseña sal para eso. Y luego creamos un JSON Web Token. Entonces esto es una cosa importante del proceso de autenticación. Además, adicionalmente al token web JSON, usaremos tokens de actualización. Entonces si el token web JSON ha expirado, entonces vamos a echar un vistazo al token de actualización y cómo se puede actualizar el token web JSON con ese token de actualización. Y además de eso, por supuesto, vamos a echar un vistazo a la carretera. Por lo que esto es n, la parte de autorización donde utilizaremos un reclamos para dar a un usuario roles específicos y sólo con un rol específico, el usuario es capaz de llamar a ciertos puntos finales. Entonces esto es lo que vamos a hacer. Ahora estás despedido y quieres unirte a este curso porque no es tan largo y en este corto periodo de tiempo, podrás hacer todo esto con dotnet six. Por lo que espero verte en la primera lección. 2. Descripción general de la clase: Muchas gracias por unirte a este curso ahora, primero, una verdadera visión rápida. ¿ Qué vas a hacer? Se trata de JSON Web Tokens, actualizar tokens y roles. Y por supuesto, lo primero que necesitamos para eso, nuestros usuarios. Por lo que comenzaremos creando un modelo de usuario y también un DTO de usuario, es decir, un objeto de transferencia de datos para que enviemos usuario y contraseña en texto plano a la API Web. Y a partir de eso crearemos hash de contraseña y la contraseña salt. Y entonces lo haremos, esto es importante. Almacenaremos al usuario completo con el nombre de usuario y contraseña de ID, hash, contraseña sal en base de datos. Muy bien, entonces esto es lo que vamos a hacer primero. Y después de eso trataríamos de bloquear a este usuario en. Por lo que de nuevo, usaremos el mismo usuario DTO, enviaremos el nombre de usuario y contraseña para el log n Es lo mismo que usamos para el registro. Este DTO entonces se utilizará en nuestra API web. Volveremos a crear el hash de contraseña con la ayuda de la sal que luego se almacena en la base de datos. Entonces esto es lo que vas a hacer y cuando todo esté correcto, por lo que el nombre de usuario y la contraseña coinciden con el personal que vimos o almacenamos en la base de datos. Entonces crearemos el JSON Web Token. Entonces este es el primer paso. Después de eso, también somos capaces de crear tokens de actualización. Y después de eso, también vamos a echar un vistazo a los roles. Por lo que ahora usuario y JSON Web Tokens, Empecemos. 3. Crear el proyecto: Estamos aquí con Visual Studio 2022 y ahora vamos a crear un nuevo proyecto. Supuse que ya ha instalado el dotnet seis STK. Entonces esto es por supuesto requisitos. Así que por favor, si aún no has buscado los SDK de dotnet con Google por ejemplo, y luego simplemente instala esta cosa. Y después de eso, abrir Visual Studio 2022, claro, esto también es un requisito, pero creo que ya tienes todo eso. Y luego creamos un proyecto ASP NET Core Web API. Entonces solo backend en esta clase aquí. Y ahora vamos a llamar a esta cosa autenticación web API. Por ejemplo, la autenticación web API es ubicación depende totalmente de usted. Eso está bien. Nuevamente, dotnet six es el marco que queremos utilizar. No necesitamos ningún tipo de autenticación. Hacemos eso manualmente esta vez. Configuramos para HTTPS, Eso está bien. Usamos controlador, por lo que no estamos usando API mínimas aquí. Y habilitamos el soporte API abierto. Esto significa, véalo aquí que podemos usar swagger para probar nuestra API. Entonces vamos a crear nuestro proyecto entonces. Muy bien, y como pueden ver, ya tenemos aquí nuestro proyecto de ejemplo con los pronósticos meteorológicos. Asumo que ya sabes esas cosas. Entonces esto no es para el principiante absoluto aquí. Por lo que no voy a profundizar aquí con respecto al proyecto de ejemplo. Empezaremos de inmediato. Entonces lo primero que necesitamos es después de crear este proyecto, agregamos algunos modelos. 4. Añadir el modelo de usuario: Lo primero que necesitamos es el modelo de usuario. Para eso. Primero creemos una nueva carpeta y llamemos a esto modelos. Ahora aquí añadimos una nueva clase y esta será el usuario, y esta también será la entidad que almacenará en la base de datos. Así que vamos a dar esta cosa I D. Lo que estoy haciendo aquí es escribir prop para propiedad, golpear Tab dos veces, y luego ya podemos ingresar a la siguiente propiedad, que es el nombre de usuario. Y esta es una cadena vacía por defecto. Y otra cosa siguiente, esto ya es interesante e importante. Estamos almacenando un hash de contraseña, la contraseña sal en la base de datos. Entonces no lo que se sugiere aquí por el código IntelliJ. Almacenaremos matriz de bytes, que es el hash de contraseña. Y en realidad podemos darle a este un valor predeterminado como la matriz de bytes 32. Eso está bien. Pero en muy importante para nosotros podría ser en realidad también ahora. Pero de esa manera no vemos estas líneas verdes ondulado entonces. Así que sólo quédate conmigo aquí. Creo que esto está totalmente bien. Ahora esta es la sal. Y de nuevo, vamos a dar esta cosa matriz de bytes por defecto. Muy bien, entonces este es nuestro modelo de usuario, y en un par de minutos también lo almacenaremos en la base de datos. Pero primero vamos a hacer esto, es decir, registrar a un usuario sin base de datos y solo cuando implementamos esto y ya tienes la idea de cómo funciona el registro y creación de un hash de contraseña. Entonces lo guardaremos también en la base de datos. Entonces este es nuestro modelo de usuario y ya necesitamos una cosa más. Y ese sería el objeto de transferencia de datos para el usuario, lo que significa que necesitamos otro objeto, otro modelo donde podamos transferir el nombre de usuario y luego la contraseña real en texto plano a la API web. Así que agreguemos aquí otro modelo. Añadimos una clase y luego decimos usuario D TO. Por supuesto, también podrías usar diferentes carpetas aquí. Podrías llamar a esta carpeta entidades, por ejemplo, y simplemente poner al usuario aquí porque se trata de una entidad que entonces también se representa en la base de datos. Y luego otra carpeta para el DTO son los objetos de transferencia de datos y solo agrega aquí el DTO de usuario. Esto depende totalmente de ti. El asunto con un usuario DTO ahora es que vamos a utilizar esta cosa para registrar a un usuario y también registrar al usuario n Puede preguntarse por qué no utilizar un objeto de solicitud de registro de usuario y el usuario objeto de solicitud de inicio de sesión por ejemplo. Bueno, podemos usar este DTO aquí para ambos casos de uso. Así que vamos a ingresar la primera propiedad que es una cadena en realidad el nombre de usuario. Y por defecto para ser enviado esto a cadena vacía. Y ahora de hecho la contraseña. Entonces esta vez, esto es correcto, vale, Ahora estos son todos los modelos que necesitamos por ahora, el siguiente paso es ya agregamos el controlador de autenticación. Entonces hagámoslo a continuación. 5. Añadir el controlador de autenticación: El controlador de autenticación, hacemos clic derecho en la carpeta controladores y luego controlador simplemente la primera entrada de menú aquí. Y luego obtenemos algunas sugerencias. No queremos usar un controlador MVC, queremos usar un controlador API. Lo ves aquí tenemos una vacía, tenemos una anchura, tenemos una anchura, leemos y escribimos acciones ya. Por lo que esto entonces proporcionará algún código generado para todas las operaciones crud, crear, leer, actualizar, y eliminar. Y ya tenemos esto aquí usando Entity Framework. Por lo que ya se generó mucho código para nosotros. En mi opinión, siempre es mejor o casi siempre mejor usar uno vacío porque entonces puedes construir cualquier cosa desde cero. Tienes todo el control y sabes lo que realmente se hace aquí. Y puedes, Bueno, tienes más control sobre tu código con fines de aprendizaje. Por supuesto, uno vacío también es bastante limpio. Así que vamos a crear un controlador API vacío y simplemente llamamos a esto ahora fuera del controlador para la autenticación. Aquí. Ahora lo que ya quiero hacer es escribir el método para registrar usuario. Entonces lo que podemos hacer es simplemente tarea asíncrona pública, entonces resultado real, yo resultado real sería suficiente, es totalmente suficiente. Pero si quieres ver los modelos reales representados en Silva UI, entonces tienes que usar un resultado real y luego definir el modelo exacto que se devuelve aquí. Y ahora oso conmigo, le devolveremos al usuario con un hash de contraseña. Y ahora en producción, por supuesto, no harías algo así. Acabas de enviar el texto tal vez bolsa o simplemente un código de estado de éxito 200, de acuerdo. Donde la aplicación, el frente y luego sabe todo salió bien. Pero en nuestro caso para solo ver por ahora lo que realmente está sucediendo aquí, le devolveremos al usuario. Esto es realmente sólo para propósitos de aprendizaje. Y necesitamos otra, necesitamos una referencia de uso aquí, usando directiva, usando autenticación, modelos de API web. Y ya que soy un codificador perezoso o solo quiero usar las nuevas cosas de C-sharp diez. Vamos a utilizar un global usando aquí en el programa CS. Ahora, ya lo sabemos, también conocemos el modelo aquí en esta clase en el controlador Earth, aunque no tenemos edición de referencia aquí, ¿no es eso bonito? Ahora llamemos a este usuario de registro. Aquí ya está el usuario DDoS nuestra solicitud objetos aquí. Ahora sólo podemos crear un nuevo usuario. De nuevo, esto es sólo por ahora. En un par de minutos, almacenaremos esta cosa en la base de datos. Pero por ahora, solo veamos cómo se ve esto cuando creamos un nuevo usuario con el nombre de usuario dado. Y luego regresamos, vale, Así que código de estado 200 con el usuario aquí. Muy bien, entonces este es nuestro método. Y ahora lo último que es importante, necesitamos un método de solicitud HTTP. Y para eso usaremos el método post identifica una acción que soporta el método HTTP post. Ahora vamos a guardar esto y ya ejecutarlo y probar esto un poco. 6. Primera prueba con SwaggerUI: Entonces aquí está nuestra aplicación o la interfaz de usuario Swagger para que podamos probar nuestra nueva API. Y ahora solo usemos este método off aquí ya lo ves. El usuario DTL. Entonces la solicitud es un nombre de usuario y contraseña y esperamos un objeto de usuario, ese es el. Y también vemos nuestros modelos aquí. Entonces este es el usuario y este es el usuario D TO. Muy bien, así que vamos a escribir. A lo mejor podemos hacer algo como Iron Man, password, pepper, hit Ejecutar. ¿ Y qué vemos? Id no es como 0. Eso es correcto. Cuando usamos una base de datos, entonces esto será diferente. En la base de datos hará el trabajo por nosotros aquí y agregará un ID 123 y así sucesivamente. Nombre de usuario es me quedé. Entonces vemos que esto realmente funcionó. Y estos valores hash aquí son los, bueno, los matrices de bytes inicializados. Entonces no hizo nada con esta contraseña aquí, claro, pero vemos que nuestra API ya, funciona. Ahora el siguiente paso que me gustaría hacer es que queremos usar inyección de dependencia porque cuando tenemos toda nuestra lógica aquí en el controlador, entonces este es un controlador PHET que no es la mejor práctica. Así que vamos a cambiar eso un poco y la siguiente lección. Y agregamos el servicio de auth y luego ponemos ahí la lógica. 7. Agregar el servicio de autenticación: Ahora para el servicio de autenticación, recrea una nueva carpeta y llama a este servicios. Y también otra carpeta llamó a esto fuera de servicio. momento creamos una interfaz para esa interfaz llamada esta I de servicio y también una clase de implementación llamada esta cosa del servicio. Y por supuesto implementamos aquí la IA de servicio. Y cuando pegues a Guardar, sí, queremos reconstruir y aplicar todos nuestros cambios. Y ahora para estar seguros de que inyección de dependencia vamos a trabajar, tenemos que registrar este servicio aquí en el programa CS. Escribimos servicios de construcción y vamos. Se trata de un servicio de alcance del tipo especificado en tipo de servicio a la cobranza específica del servicio. Muy bien, y ahora ponemos el ojo del servicio aquí. Tengo que escribirlo adecuadamente servir este fuera de servicio. Y por supuesto agregamos la directiva de uso y también agregamos la palabra clave global para que nuestro controlador en un minuto, también sabremos dónde encontrar este servicio. Ahora esta cosa está registrada. Esto significa que podemos inyectarlo en el controlador de la Tierra en un minuto. Pero primero, pongamos aquí nuestro método de registro en la interfaz. Usuario de tareas. Llame de nuevo a este usuario de registro con el DTO del usuario y llame a esto simplemente solicita. Ahora guarde esto. Y por supuesto, lo guardé demasiado pronto porque aún no se implementa. Pero con periodo de control, podemos implementar la interfaz en la palabra clave asíncrona. Ahora en esencia, podemos copiar esta línea aquí del controlador aquí, y simplemente devolver a este usuario. Y hemos terminado con mover la lógica del controlador al servicio de autor. Y lo siguiente es que tenemos que inyectar este servicio y armar todo. Entonces hagámoslo a continuación. 8. Inyectar el servicio (inyección de dependencia): Para inyectar esta cosa, vamos al controlador off y agregamos un constructor aquí primero con CTE OR y luego golpeamos Tab dos veces. Y aquí ahora decimos yo de servicio, llamar a esta cosa fuera de servicio y también con periodo de control. Ahora, podemos crear y asignar este campo que este servicio está disponible en todas partes en este controlador ahora, y me gustaría agregar este subrayado aquí. Y ahora aquí abajo en este método, decimos, por caso, respuesta viral pondera fuera solicitudes de los usuarios registrados del servicio. ¿ Ves eso? Por lo que ahora tenemos esta lógica, se trasladó al servicio de autor, y el controlador solo reenvía la solicitud al servicio y devuelve los resultados. En nuestro caso, ésta sería entonces la respuesta. Ahora podemos salvar todo, probarlo de nuevo y el resultado debe ser exactamente el mismo. Aquí estamos. Nuevamente. Este es nuestro punto final. Lo intentamos de nuevo con Iron Man. Y esta contraseña aquí pulsa Ejecutar. Y esto es exactamente lo mismo que ya hemos visto cuando no lo estamos, no usar inyección de dependencia. Pero lo bueno de nuevo es ahora que puedes inyectar el servicio y la lógica donde quieras en tu aplicación. Y definitivamente es una mejor práctica. Muy bien, entonces este es el primer código de calderas. Y ahora lo siguiente es crear realmente el hash de contraseña. Entonces hagamos eso a continuación. 9. GitHub Repo: Muy rápido antes escribir el método para crear el hash de contraseña, hasta ahora ya hicimos algunas cosas, así que creo que es bueno empujar esto a un repositorio Git. Yo lo hice. Y ahora puedes conseguir el código aquí mismo. Entonces si no quieres escribirlo tú mismo, ahora es un buen momento para simplemente agarrar el código aquí de mi repositorio de GitHub. Consulta la URL aquí, github.com slash Patrick obtuvo una API web de autenticación de barras. Entonces aquí es donde encontrarás el código fuente completo fuera de esta clase. Esto sólo por una pequeña pista. Así que de nuevo, si no quieres escribir el código tú mismo, aunque realmente recomiendo hacerlo, porque esa es la mejor manera de aprender. Puedes obtener el código aquí o si tienes algún problema. De nuevo, también puedes obtener el código, por supuesto ahora en GitHub. 10. Crear la contraseña Hash: Entonces crearé el hash de contraseña. Entonces lo que hacemos ahora es volver al servicio de auth y escribimos métodos simples. Entonces este es un vacío privado y llamamos a esto crear contraseña hash. Esta cosa ahora consigue una contraseña. Entonces esta es la contraseña y los textos sencillos y luego dos parámetros fuera, y estos serían la matriz de bytes hash password y la contraseña salt out bites password hash y también bytes, sales de contraseña. Ahora, ¿cómo hacer esto? En realidad no es mucho. Primero creamos una instancia de un algoritmo de criptografía, y en nuestro caso usaremos HMac 512. Nuevamente, necesitamos aquí una directiva de uso, usando criptografía de seguridad de sistemas. Y aquí ahora, cuando tengamos esta instancia, ya tenemos una contraseña salt y volveré a la contraseña salt en un segundo. Entonces eso sería HMac y luego la clave, esta es nuestra sal. Ahora para obtener el hash de contraseña, decimos compute hash y luego los textos del sistema que codifican UTF-8 obtener bytes y luego la contraseña. Ahora, lo que realmente está sucediendo aquí con el método de crear contraseña hash, generamos una sal. Ahora bien, esto es como se afirma aquí, clave que se utiliza en el cálculo de HMac. Y cuando combinas la sal con la contraseña, obtienes un hash de contraseña diferente, aunque usas la misma contraseña. Ahora para ver mejor todo el proceso aquí diría que acabamos de probar esto. Vamos a usar el método hash create password ya. Y luego verás cuando usamos la contraseña pepper varias veces, obtendremos un valor hash de contraseña diferente. Eso es por la sal. Pero si siempre usara la misma sal, el hash de contraseña sería el mismo. Y el problema con eso es que algún día, gente muy inteligente va a descifrar los algoritmos de criptografía y luego pueden ver un hash de contraseña. Y desde el hash de contraseña, pueden llegar a la contraseña de texto plano. Pero esto no se hace con una sal. Significa que si no conocen la sal, no son capaces de obtener la contraseña, la contraseña real. Muy bien, así que probemos esto y luego verás a qué me refiero con eso. Entonces primero cuando registramos a un usuario, decimos que creamos el hash de contraseña. Entonces, así crea hash de contraseña. Esta cosa obtiene la contraseña aquí. Y ahora el hash de contraseña, la contraseña salt que se devuelve. Sentido. Aquí. Obtenemos esta cosa y también las sales de contraseña. Muy bien, así que ahora tenemos nuestro valor de hachís y sal. Y ahora aquí para el usuario, lo que hacemos es no sólo establecer el nombre de usuario, también configuramos la contraseña hash a password hash. Aquí abajo, configuramos la contraseña salt a las sales de contraseña, acuerdo, y luego devolvemos al usuario. Así que intentemos eso ahora. Reinicie la aplicación. Nuevamente cuando usamos Ironman. ¿ Y qué vemos ahora? Vemos esta cadena loca aquí, o por una matriz para Bx y así sucesivamente. Ahora cuando lo intento de nuevo, buscando diferente y otra vez también miro a diferentes. Ahora hagamos esto un poco diferente. Entonces digamos que le damos a este algoritmo de criptografía ya asalto como nueva matriz de bytes 32. Por lo que esta entonces será la clave que se utiliza aquí. Muy bien, míralo aquí. Hay una sobrecarga la una, la, la instancia sin la clave ni la sal, y la instancia con esta sal ahora, lo que significa esto, significa que ahora en este método de hash de cómputo, el algoritmo utilizará esta sal aquí cada vez que hacemos esto. Vamos a guardar esto de nuevo y reiniciar la aplicación solo para estar seguros. Lo intentamos de nuevo. Pruébalo. Hombre. Sin pimienta. Golpeamos Ejecutar para M MPH y ejecutamos de nuevo para MPH y así sucesivamente. Cada vez. Lo mismo que se ve en esto es por qué necesitamos una sal. El sal es el mismo y la contraseña de texto sin formato es la misma, luego obtenemos el mismo valor hash cada vez. Entonces es lo mismo si no usarías una sal en absoluto, lo que significa que una contraseña específica siempre da como resultado el mismo valor hash y viceversa y esencia. Y ahora cuando volvemos a quitar esto y realmente usamos una nueva clave generada al azar como sal, obtenemos una contraseña diferente, diferente hash de contraseña. Cada vez que usamos este algoritmo. Muy bien, véalo aquí. Es por eso que usamos sal. Espero que tengas la idea. Así es como creamos un hash de contraseña. Y ahora antes seguimos con el inicio de sesión al usuario y luego creando el token web JSON. Yo diría que agregamos nuestra base de datos y almacenamos al usuario con la contraseña hash y la sal y así sucesivamente en esta base de datos. Hagámoslo a continuación. 11. Agregar el núcleo de DataContext y Entity Framework: Muy bien, Así que queremos usar Entity Framework Core aquí y también una base de datos secuela lite. Esta vez utilizo diferentes bases de datos a lo largo de mis clases y tutoriales. Esta vez vamos a utilizar una base de datos de luz SQL. Esto es multiplataforma y bastante simple de crear. Lo primero que ahora antes de que podamos realmente utilizar esta base de datos es que necesitamos un contextos de datos. Por lo que de nuevo, creamos una nueva carpeta llamada estos datos. Aquí. Ahora agregamos una nueva clase y llamamos a este contexto de datos de clase. Y esta cosa aquí usa la clase de contextos DB. Aquí no se sabe. Entonces con periodo de control, obtenemos algunas sugerencias. Y queremos utilizar esta cosa aquí, instalar paquete, Microsoft Entity Framework Core, encontrar e instalar la última versión ya hecha. Ahora está hecho. Y de nuevo, podemos usar aquí una directiva de uso global porque necesitamos esta cosa en varios lugares. Entonces hagamos esto así. Y ahora tenemos contexto DB aquí. Con este DB contextos, ahora, podemos acceder a los usuarios desde nuestra base de datos. Y lo ves aquí. Dice que una instancia de contexto de base de datos representa una sesión con la base de datos y se puede utilizar para consultar y guardar instancias, instancias de sus entidades. El contexto Db es una combinación de la unidad de trabajo y patrón de repositorio. En cuanto al patrón de repositorio, es similar a nuestro servicio Auth porque ahora podemos inyectar este contexto, por ej., en nuestro servicio Auth y luego volver a acceder a los usuarios en la base de datos. Pero aún tenemos que hacer algo para poder hacer eso. Por último, lo primero es el constructor. Nuevamente con CD O volvemos a ser nuestro constructor. El argumento aquí son ahora las opciones de contexto DB. Esta cosa aquí con nuestra clase. Y a esto llamamos Opciones. Y también tenemos que llamar al constructor base con opciones base. Entonces este es ahora el constructor que necesitamos. Y lo último para poder agregar los usuarios, o para ser más precisos para agregar la tabla de usuarios en la base de datos, necesitamos una propiedad aquí. Y esto es de tipo db set con clase de usuario. A esto llamamos entonces usuarios y este será el nombre de nuestra mesa. Por lo que normalmente sólo se pluralizaría el nombre de esta entidad. Por lo que los usuarios serían totalmente suficientes. Y creo que este es un buen nombre para esta mesa. Eso es lo que tenemos que hacer para sumar esta tabla. Y si no te gusta esta línea verde squiggly aquí, ya puedes decir que esto es un conjunto de usuarios como ese, y luego ya no recibes ninguna advertencia. Vale, vamos a salvar esto. Y ahora el siguiente paso es usar primero las migraciones de código para crear nuestra base de datos. Pero antes de que podamos hacer eso, por supuesto tenemos que instalar las herramientas Entity Framework Core. Entonces hagámoslo a continuación. 12. Instalar EF Core Tools: Instalar las herramientas Entity Framework Core. Abrimos la consola de gestor de paquetes. Puedes abrir esta cosa también aquí bajo vista otras ventanas y luego obtienes la consola de Package Manager. Y también debe haber un atajo para eso. Y aquí ahora lo primero que tenemos que hacer es que tengamos que estar en el directorio correcto. Por lo que tenemos que ir a nuestro directorio API web de autenticación. Ahí estamos. Entonces tenemos que detener la aplicación. Por lo que acaba de cerrar la terminal aquí. Y ahora podemos instalar las herramientas EF Core y luego la migración. Así que por favor asegúrate de detener la aplicación porque lo contrario no somos capaces ejecutar el código primero migraciones, sino primero las herramientas para eso. Decimos dotnet new install y luego dash, dash global, y luego dotnet dash EF. Ahora en mi caso, ya lo tengo instalado, así que déjame simplemente desinstalarlo muy rápido. Para que podamos hacer esto juntos aquí. Desinstalar dotnet ef. Lo ves aquí, versión 6.3. Y ahora si vuelvo a ejecutar el comando install, obtengo la versión 604. Y con dotnet E F, podemos revisar dos veces. Y están las herramientas de línea de comandos dotnet de Entity Framework Core. Entonces esta cosa me instalaron y continuación usamos código primero, migraciones. 13. Utilización de código de migración: Estamos en el directorio correcto. Tenemos instaladas las herramientas de línea de comandos, tenemos instalado el paquete NuGet de framework energético, pero hay dos paquetes NuGet más que tenemos que instalar. Y este es el paquete de diseño y el paquete SQL lite de energy frame a core. Ahora, el diseño, lo verás en un minuto. Déjame simplemente abrir esto. Así que haga clic derecho en el proyecto, Administrar paquetes NuGet. Y entonces solo decimos diseño y creo que ya tenemos esto. Entonces asegúrate de usar la pestaña de navegación aquí. Ahí está, Microsoft Entity Framework Core Design compartió componentes de tiempo de diseño para la entrada desde un núcleo de herramientas. Entonces esto es importante para nosotros. Haga clic en Aceptar, acepto y luego Entity Framework Core SQL light. Entonces, cuando quieras usar una base de datos SQL light, tienes que instalar este proveedor de base de datos SQL para Entity Framework Core. Si quieres usar SQL Server, entonces es una esencia solo Entity Framework, Core dot SQL Server y así sucesivamente. Así que por favor instale esta cosa ahora. Vale, acepto que tenemos nuestros paquetes NuGet para que podamos cerrar esto. Ahora el siguiente paso es registrar nuestros contextos de base de datos. Por lo que de nuevo al programa CS. Ahora aquí abajo decimos construir servicios y luego agregar contextos D B con clase de contexto de datos. Y esta cosa. Ahora primero tenemos que sumar otro usando el erigido aquí. Nuevamente, agreguemos la palabra clave global. Entonces ahora tenemos nuestro contexto de datos, y esto obtiene una opción. Digamos opciones. Opciones. Queremos decir que queremos usar luz SQL y podemos añadir aquí una cadena de conexión. Ahora normalmente se almacenaría la cadena de conexión, por ejemplo, en el archivo JSON de configuración de la aplicación. Todavía se puede hacer esto o la forma rápida y sucia ya que esto es solo una base de datos de luz SQL, forma rápida y sucia es simplemente ingresar la cadena aquí y la cadena de conexión para una base de datos sqlite. Permítanme poner esto en una nueva línea, es simplemente fuente de datos y luego por ejemplo, de dot db. Entonces el tipo de archivo es entonces DB y simplemente desactiva esto. Esto depende totalmente de ti. Puedes usar cualquier nombre que quieras. Y así es como registramos el contexto DB. Con eso, entonces podemos usar el código primero migración para crear nuestra base de datos con la tabla de usuarios. Por lo que vamos a la consola de Package Manager de nuevo, asegúrate de ser colocado en nuestro directorio de proyectos. Entonces autenticación web API, autenticación web API, es en este caso. Y entonces sólo podemos decir dotnet ef. Entonces echemos un vistazo rápido. Tenemos tres Comandos, Base de Datos DB, contexto y migraciones. Y para agregar una migración, bueno, usamos migraciones, así que dotnet EF migraciones y luego agrega, y luego llamemos simplemente a esto inicial. Está construyendo, pero tiene éxito y esencialmente ya está hecho. Lo que obtenemos ahora es una carpeta Migraciones aquí. Y aquí también ves qué pasará cuando ejecutemos esta migración. Vamos a crear una tabla, usarnos con un ID establecido a incrementos auto. Entonces tenemos el id 123 y así sucesivamente obtuvimos automáticamente el nombre de usuario como una cadena o un tipo de texto. Y las matrices de bytes entonces se utilizarán con el tipo blob. Y ya tenemos aquí una clave primaria. Y si elimino esta migración o rol, el rol, este banco migratorio, entonces simplemente dejamos caer esta tabla. Y ahora aún no tenemos la base de datos, ¿verdad? Entonces lo que está sucediendo ahora cuando decimos dotnet EF database update no sólo es actualizarlo, también creará esta base de datos. De acuerdo, entonces ves aquí todos los comandos, pero tuvo éxito y ahora hay una tabla de crear. Esto es sólo para el Marco Energético, el sistema migratorio. Y también dónde está Aquí los usuarios de la tabla. Esto se hace. Y aquí vemos este archivo fuera de DB y en realidad poder abrir este archivo y echar un vistazo. Descargamos una cosa más y esta sería el navegador DB, el navegador de base de datos para la línea SQL. Entonces hagámoslo a continuación. 14. Abra la base de datos con el explorador de DB para SQLite: Y esto es lo que necesitas para simplemente Google reenviar navegador TB para SQL lite o ir a SQL browser.org. Así es como se ve. Así que solo ve a Download y luego para tu sistema operativo, consigue esta cosa. Mi caso, no lo conozco e instalé navegador DB para la luz de secuela, el instalador estándar para Windows de 64 bits. Así que por favor consigue esta cosa y entonces deberías conseguirlo aquí. Así es como se ve. Y ahora podemos abrir la base de datos. Ahí estamos. Esta es nuestra carpeta, esta es la DB off. Entonces vamos a abrir esta cosa. Y ya ves aquí tenemos tabla de nuestro usuario con estos campos. Y por supuesto podemos seleccionarlo y luego ir a Navegar Datos. Y aquí vemos que no tenemos usuario. Por lo que el siguiente paso es almacenar al usuario finalmente, al registrarse en la base de datos. Entonces hagamos eso en la próxima lección. 15. Usuario de la tienda en la base de datos: En Visual Studio, volvemos al servicio off. Ahora. Agregamos primero un constructor porque si recuerdas, queríamos inyectar los contextos de datos. Entonces CTO son es del servicio. Y aquí ahora decimos contexto de datos. Contexto. Nuevamente, creamos y asignamos el campo y un subrayado. Ahora tenemos nuestros contextos de datos y lo siguiente es que decimos contextos, usuarios, ya lo ven aquí. Tenemos la tabla de nuestro usuario, Add User Entity Framework nodos que desea al usuario, pero no hemos terminado. También tenemos que guardar estos cambios con un contexto de pesos. Guardar Cambios asincrónicos, está bien, y esto es todo. Así que ahora vamos a ejecutar esta aplicación de nuevo. Y yo diría que sumamos dos usuarios. Aquí estamos. Nuevamente. Lo probamos con, por caso, pimiento de hierro hombre que ejecuta. Este es el resultado. Ya ves el ID es uno y cuando vamos a nuestro navegador, ahí está, actualizamos los datos. Es Iron Man con id1, hashing de contraseñas, sal de contraseña, blobs y todo. Vamos a añadir uno más. Sólo por diversión. Contraseña de Batman, tal vez se ejecuta. Tenemos id2 y lo mismo aquí. Muy bien, así que esto funciona. Ahora, por último, el siguiente paso es crear y devolver un JSON Web Token. Entonces hagamos esto a continuación. 16. Añadir un AuthResponseDto: Serán cuatro. En realidad podemos crear el token web JSON. Tenemos que preparar algunas cosas. Una cosa es que tenemos que verificar la contraseña al iniciar sesión. Y esto ya te dice que por supuesto también necesitamos un método de inicio de sesión. Y entonces lo tercero es que necesitamos otro DTO para devolver el token web JSON al final, bueno, no es del todo cierto que realmente necesitamos este DTO. Pero al final de esta clase, al final de este curso, tendrás la opción de devolver un JSON Web Token junto con el token de actualización. Y esto es entonces sólo para el frente. Entonces hay datos entonces en esta respuesta que es útil para el front-end. Entonces eso es lo que vamos a hacer. Primero creamos aquí otro modelo. Haga clic con el botón derecho en la carpeta modelos, agregue una nueva clase, y ahora llamamos a esta cosa de respuesta d t Ahora, esta cosa obtiene algunas propiedades. El primer inmueble, tal vez preguntándose por qué carajos necesitamos algo así? Bueno, yo lo llamo éxito. Puedes llamarlo un éxito. Por caso, esto le dirá al front-end si esta solicitud fue exitosa, y lo usaremos para decirle al front-end, por caso, que la contraseña estaba equivocada o que el usuario no existe, o que todo está bien. Y en este caso entonces esta bandera se establece en true, pero la inicializamos con fallas. Con esa información, el front-end puede hacer otras cosas junto con esta propiedad ahora, que es el mensaje así. Y esto es por defecto cadena vacía. Y adicionalmente, si no quieres devolver esta respuesta de auth en DTO, también podemos decir que el controlador hace algo con eso. Entonces, por caso, si volvemos a utilizar el controlador para reenviar la solicitud al servicio y el servicio devuelve este DTO, este objeto aquí. Y vemos que el éxito es, la bandera de éxito se establece en false y tenemos un mensaje como una contraseña está mal, entonces también podemos decidir no devolver el objeto completo. Podemos simplemente decir que devolvemos una mala solicitud por instancia, o un no autorizado decir lo que quieras. Así que simplemente sería más flexible con ese tipo de objeto. Ahora, lo último por ahora, finalmente, el token. Quitemos este espacio aquí. Y esta también es una cuerda vacía. Primero, vale, Así que esta es nuestra respuesta de autor DTO con una bandera de éxito, el mensaje y el token. Y a continuación escribiremos un método para verificar la contraseña antes de que luego podamos finalmente implementar el método de inicio de sesión. 17. Verificar la contraseña: Es para verificar la contraseña. Volvemos a nuestro muro de un servicio. Esto es de nuevo un método privado similar a esta cosa en realidad. Para que podamos copiar y pegar, al menos tratar de copiar y pegar este método aquí. Y en lugar de crear un hash de contraseña, ahora queremos verificar el hash de contraseña. Así que vamos a entrar a verificar aquí. De nuevo, obtenemos las contraseñas de avión como una cadena. Y ahora también el hash de contraseña y la contraseña sal, pero no como nuestros parámetros. Obtenemos esto del método de inicio de sesión. Y ahora aquí ya hicimos esto. Tal vez recuerdes, podemos darle este algoritmo de criptografía, esta H mix sharp 512 instancia. Podemos darle a esta cosa una sal y esa sal. Entonces tratamos de computar el hash basado en la contraseña dada, ¿verdad? Por lo que ahora decimos nuestro valor hash computado es esta cosa con la contraseña dada salt y la contraseña dada. Después de eso, devolvemos secuencia hash calculada igual y luego Password Hash. Dado que se trata de matrices de bytes, tenemos que usar secuencia igual. Por supuesto, cambiamos nuestro valor de retorno aquí a valor booleano. Entonces tenemos que usar secuencia igual porque se trata de matrices de bytes. Si utilizaras los signos justo los iguales, hash computado es igual al hash de contraseña, esto no funcionaría. Así que por favor asegúrese de usar secuencia igual. Lo dice aquí, determina qué son iguales las dos secuencias comparando los elementos, mediante el uso de la igualdad predeterminada comparar para su tipo. Y en nuestro caso, esa es la mordida y el tipo. Entonces un byte por byte, esto será comparado en este método. Entonces sabemos si la contraseña es correcta o no. Ahora, implementemos el método de inicio de sesión a continuación. 18. Implementar el método de inicio de sesión: Para el método de inicio de sesión, nuevamente, vamos a la interfaz aquí y devolvemos una tarea. Y ahora lo ves con la respuesta del autor. En DTO. Llamamos a este inicio de sesión con el usuario DTO de nuevo como solicitud. Y volveré a la clase de implementación. Podemos implementar automáticamente la interfaz. Y aquí abajo están los métodos. Déjame simplemente sacarlo hacia arriba. Hagámoslo aquí, tal vez. Ahí está. Ahora lo primero es que necesitamos al usuario. Entonces digamos que var user ahora es Waitz. Los contextos parecen que tan pronto como yo, como escribí me espera, Visual Studio ha editado aquí la palabra clave asíncrona. Eso es bastante bonito. Así que recuerda si no lo hizo, hay que agregar la palabra clave asíncrona. Ahora contextos y ahora podemos acceder a nuestros usuarios. Entonces decimos primero o por defecto asíncrono. Y aquí decimos U para usuario, donde se produce el nombre de usuario, el Solicitar Nombre de usuario, y en caso de que el usuario sea nulo, entonces, ahora podemos devolver y todos ustedes corresponden A la bandera de éxito es falsa por defecto. Pero también podemos agregar un mensaje como usuario no encontrado por ejemplo, este momento el controlador lo sabe. Y también si devuelves este objeto, el frente y lo sabe también. Ahora el siguiente paso si encontramos al usuario, es verificar la contraseña. Nuevamente, comenzamos con un signo de exclamación if y luego. Por lo que verificamos si la contraseña no es correcta, no está verificada. Le das a este método solicitar contraseña. Y luego encontramos al usuario. Por lo que usamos el hash de contraseña del usuario y también la contraseña salt del usuario. Ahora, si esto está mal, volvemos a devolver una nueva respuesta de auth DTO con otro mensaje, como Contraseña equivocada. Esto entonces se comprueba y ahora si todo está correcto, devolvemos una nueva respuesta de autor, D20. Y digamos que la bandera de éxito se establece en verdad. Por ahora. Eso es todo. No creamos un token. Primero en este paso con fines de aprendizaje, solo queremos comprobar si el inicio de sesión con el nombre de usuario y contraseña funciona en general. Y para poder probar esto, ahora necesitamos otro punto final, claro. Así que volvamos a nuestro controlador de apagado. Nuevamente. Vamos a copiar este método aquí. Llamamos a esto ahora simplemente login. También llamamos aquí a nuestros métodos de inicio de sesión. Y ahora digamos que si la respuesta es exitosa, podemos devolver la respuesta OK. Muy bien, así que devolvemos la respuesta completa. Y de lo contrario podemos decidir, por ejemplo, podríamos, también podríamos devolver un bien con la respuesta. Y entonces en este caso, el front-end tiene que comprobar si el éxito es verdadero o falso y luego mostrar el mensaje de error o no, o podemos hacer otra cosa. Podemos decir que las malas peticiones devolverán una mala solicitud y simplemente agregaremos el mensaje en respuesta. Nuevamente, como dije antes, cuando creamos la respuesta de auth A esta cosa aquí depende totalmente de ti. Si crees que tienes un front-end y quieres mandar un 200 bien. Atrás. En cualquier caso con esto bien, o regresa, está bien. Y luego respuesta, entonces el frente tiene que decidir qué hacer, entonces por favor hágalo así en todo caso. Por lo que no tienes que consultar aquí con esta cláusula IF aquí si esta respuesta es exitosa o no. Y entonces solo puedes llegar a la respuesta en el frente y hace todo el trabajo, o si quieres hacerlo así y esto realmente depende totalmente de ti. no hay mejor práctica en mi opinión. Realmente depende de la aplicación que quieras construir. Pero para nuestros propósitos de prueba, para propósitos de aprendizaje aquí creo que esto está bien. Comprobamos si la respuesta es exitosa. En este caso, devolvemos lo completo. De lo contrario vemos una mala solicitud solo con el mensaje. Y ahora lo último que tenemos que hacer, lo puedes ver aquí. Aquí tenemos un método post y también otro método post aquí. Por lo que esto no funcionaría. Estos son dos exactamente los mismos extremos con exactamente las mismas rutas. Así que sólo API y luego apagado para el control un objetivo. Entonces vamos a cambiar eso y podemos cambiar esto aquí con publicaciones HTTP. Y luego entre paréntesis, configuramos la ruta para iniciar sesión. Y esta es sólo otra forma de escribir algo como esto. También podemos agregar otro atributo aquí, el atributo route, y luego simplemente eliminar el login aquí. Esto es en esencia exactamente lo mismo. Así que vamos a combinar el atributo HTTP post con el atributo route. Y luego tenemos nuestros puntos finales. Y ahora yo diría que guardamos esto y probamos esto ya. Muy bien, ahí recordamos que ya tenemos a nuestros usuarios, Iron Man y Batman. Por lo que en realidad podemos probar directamente el método de inicio de sesión aquí. Así que pruébalo. Por ejemplo, vamos a probarlo. Pruébalo con una cadena, cadena que podemos ejecutar y vemos el mensaje correcto usuario no encontrado. Y también se ve el código de estado 400 aquí. Echemos un vistazo aquí en la pestaña Red por ejemplo, intentemos eso de nuevo. Golpea Ejecutar. Si lo vuelves a ver. Este es el código de estado 400, que significa una mala solicitud. Entonces esto es exactamente lo mismo aquí. Y ahora vamos a probarlo con Iron Man, pero la contraseña es cadena. Golpeamos Ejecutar, obtenemos una mala solicitud con el mensaje contraseña incorrecta, eso es correcto. Ahora, ingresa la contraseña correcta. Vemos nuestra respuesta Auth DTO con éxito, verdadero, sin mensaje, sin token. Pero esto es lo que vamos a cambiar a continuación. lo que ahora finalmente, vamos a crear el token web JSON. 19. Crear y devolver un Token Web JSON: Muy bien, así que de vuelta a Visual Studio. Y ahora lo primero que necesitamos es en realidad un secreto. Porque con ese secreto, el back-end puede comprobar si el token web JSON al que está enviando el front-end o el usuario, el cliente está enviando al backend es realmente válido. Con ese secreto, recreamos el token web JSON y también usaremos este secreto para verificar el JSON Web Token y sólo el backend conoce este secreto. El secreto no está disponible en esencia en el token real, entonces solo el backend conoce el secreto y el ancho que secreto. Podemos verificar el actual JSON Web Token. Esto es muy importante y hay varias formas de hacerlo. Por supuesto, puedes editar en el servicio de auth directamente. Se puede editar en una tienda, o de la forma más fácil aquí, en nuestro caso en esta clase, sería la configuración de la aplicación archivo adyacente. Por lo que agregamos otra sección aquí, llamamos a esta configuración de la aplicación. Y luego solo entramos token. Y esto puede ser lo que quieras. Aquí se puede usar cualquier tipo de caracteres, cualquier secuencia de caracteres, como mi clave secreta, solo asegúrate de que esto tenga al menos 16 caracteres, personajes en ella, ¿verdad? Por lo que la longitud mínima debe ser de 16 caracteres. Y con eso, ahora podemos acceder a clave secreta token y crear nuestro token web JSON. Con eso, ahora vamos a generar el token. Pero también tenemos que insertar algunos paquetes de NuGet. Pero esta vez solo hagamos eso en el camino. Regresar a nuestro servicio fuera. Vayamos aquí abajo. Creamos un nuevo método, cadena privada, Create Token, y obtenemos al usuario aquí. Ahora lo primero, las listas de reclamos reclaman y necesitamos otro espacio de nombres para los reclamos de seguridad del sistema. Ahora esto se llama reclamos y esta es una nueva lista fuera de reclamo. Aquí. Ahora ya establecemos algunos valores, así que agreguemos un nuevo reclamo. Con tipos de reclamación identificador de nombre. Este será el ID del usuario. Entonces ID de usuario, y luego establece esto en una cadena o transferencias a una cadena. Agreguemos también otro. Por lo que nuevo reclamo, tipo de reclamo nombre, y este entonces será el nombre de usuario. Esto ya es una cadena, así que vamos a añadir el componente o no necesitamos una coma aquí. No, aún no, aún no. Posteriormente cuando sumamos las carreteras, agregamos aquí otro reclamo. Ya te puedo decir que ¿cuáles son las afirmaciones? Bueno, en esencia, estas son información fuera los datos del usuario se almacenarán en el token web JSON y vamos a echar un vistazo al token web JSON, luego ver lo que realmente se almacena ahí. que justo hasta el momento para obtener información, bueno, el reclamo representa un reclamo. Por lo que aquí puedes almacenar cualquier cosa, en esencia cualquier información que quieras. Esto es lo que queremos almacenar en el token web JSON. Con eso, el cliente que sabe, bien, cuál es la idea del usuario actualmente autenticado o el nombre de usuario y así sucesivamente. ¿ Verdad? Ahora lo siguiente es una clave, una clave de seguridad simétrica. Así que vamos a crear esta cosa con clave var, nueva clave de seguridad simétrica. Y ya necesitamos otra referencia aquí. Esta vez. Como ya dije, instalamos el paquete Microsoft Identity Model dos tokens, encontramos e instalamos la última versión si no lo ves aquí en el menú contextual, por favor. Otra vez ve a Administrar paquetes NuGet y luego instala este paquete aquí manualmente, o haz así. Por lo que debe instalarse. Detengamos esto. Y ahí debería estar. Tenemos el modelo de identidad de Microsoft es espacio de nombres token. Vamos a mover este realmente rápido al programa CS porque quiero hacer este banco global aquí. Y ahora aquí agregamos este espacio de nombres. Genial, así que volvamos a nuestro método. Tenemos nuestra clave de seguridad simétrica, pero obtiene algunos argumentos. Lo primero es ahora primero y lo único para ser más exactos es nuestro secreto. Con nuestra clave secreta, podemos crear esta clave de seguridad simétrica. Así que vamos a responder Codificación de texto del sistema, UTF-8, obtener bytes. Y ahora tenemos que acceder a la configuración, que es la configuración de la aplicación JSON. Por lo que tenemos que hacer uso de la inyección de dependencia. Y lo hacemos aquí arriba. Entonces lo que necesitamos para inyectar esto, la configuración de los ojos. Llame a esta configuración. Nuevamente, crea un asignar la configuración de campo, el subrayado aquí, así. Ahora aquí abajo podemos decir sección de configuración. Y estos son ahora, estos son ahora ajustes de eso, el token de eso. Ahora queremos el valor, cierra esto. Y tenemos nuestra clave simétrica de seguridad. Con esta clave, podemos crear las credenciales de inicio de sesión también necesarias para nuestro token. Llamemos a esto créditos. Ahora es bastante complejo, pero esa es solo la forma de crear un token web JSON. Espero que aún estés conmigo. No es un buen momento para estar en multitarea, por ejemplo. Así que por favor vuelve a mí si quieres escribir el código junto conmigo. Ahora sabía firmar credenciales con nuestra nueva hermosa llave. Y necesitamos un algoritmo. Y ahora vamos a usar los algoritmos de seguridad. En realidad quiero usar el algoritmo de firma HMac SHA, Mac shot 12. Muy bien, así que ésa es la indicada. Con estos créditos. Ahora con estas credenciales de inicio de sesión, podemos crear un token de seguridad JWT. Así que el token web adyacente, token de seguridad, var token. Ahora un nuevo token de seguridad JWT. Necesitamos algo más aquí, tokens de modelo de identidad del sistema JWT. Nuevamente, por favor instale este paquete. Entonces de nuevo, tenemos que añadir algunos argumentos aquí. Primero el reclamo, por lo que esto luego se almacena en este nuevo token. Entonces tenemos que fijar fechas de caducidad. Y digamos que esta cosa es válida por un día, así que datetime ahora y días uno. Muy bien. Lo siguiente ahora las credenciales de firma se establecen en créditos. Y vamos a quitar esta materia aquí y V están terminados. Entonces ahora este es nuestro token y también consigue la cadena final, el token web JSON final. Llamamos var JWT, nuevo JWT, token de seguridad, un manejador. Aquí ahora decimos token con el token y luego devolvemos el JWT. Respira hondo. Sé que es complejo, pero así es como se hace. Lo importante es que almacenamos nuestros reclamos en el JWT. Establecemos fechas de caducidad y también las credenciales de inicio de sesión. Esto está aquí para nuestra clave secreta y la sección token de configuración de la aplicación. Nuevamente, aquí está. Esta es nuestra clave secreta. Y ahora es el momento, por supuesto de volver a llamar a esta cosa a los métodos de inicio de sesión. Ahí estamos. Digamos solo token de cadena. Ahora es crear token con nuestro usuario. Aquí adentro. Ahora, configuramos el token, token, seguro todo, está bien, y yo sabría, digamos, vamos a probar esto, vamos a hacer un doble cheque porque creo que lo vi antes, así que vamos a guardar eso otra vez. Y creo que esto de otra manera llevaría a un error. Así que agreguemos aquí la coma. Y ahora probemos la aplicación. Intentemos volver a iniciar sesión. Pruébalo de nuevo con Iron Man. Si golpeas Ejecutar, ahí está. Este es nuestro token adyacente y Web. Así es como se ve esta cosa. Ahora hay unos lados hermosos llamados JWT. Oh, ahí está. Donde puedes pegar tus tokens Web JSON. Solo echa un vistazo a lo que hay ahí dentro. Y como se puede ver aquí, la primera parte a la primera aquí, el primer periodo. Podemos ver el algoritmo y el tipo de token. Tenemos nuestra mezcla h de cinco doceavos. tipo de token de algoritmo es un token JWT. Y ahora la carga útil de las reclamaciones, tenemos identificador de nombre. Este es el ID de usuario y también la fecha de caducidad, que está bien, al día siguiente y 09:14 PM. Ahora aquí podríamos verificar la firma. Entonces esto es muy ordenado, la clave secreta, pero como se puede ver, no está disponible aquí, sólo los nodos back-end de esta clave secreta. Y echemos otra mirada con Batman. Batman y traste. Golpeamos Ejecutar, copiar esto, pegarlo aquí y ves que algo ha cambiado, que es el nombre identificar, por supuesto esto ahora es id2, como puedes ver aquí también, ID 12. Y ahora tenemos un minuto después es ahora las fechas de vencimiento. Muy bien, así que esto funciona. Tenemos nuestro token web JSON y ahora ¿qué debemos hacer con eso? Bueno, vamos a crear otro punto final que solo está disponible para autorizar a los usuarios. Yo diría yo. Ahora con ese punto final, entonces es totalmente necesario agregar este token al encabezado de su solicitud. Y solo entonces puedes poder, o puedes acceder a estos puntos finales. Y yo diría, Hagámoslo a continuación. 20. Agregar un punto final garantizado para usuarios autorizados: De acuerdo, así que de vuelta a Visual Studio. Vamos a crear este punto final ahora. Y yo sólo lo hago aquí en el controlador off ni la implementación del servicio. En realidad, solo queremos comprobar, es el usuario autorizado y capaz de llamar a esta cosa. Por lo que ahora solo creamos un getMethod con HTTP. Nuevamente, este es ahora nuestro método de solicitud HTTP. Solo utilicemos resultados de una acción pública. Así que ahora no hay tarea, ningún método asíncrono aquí y simplemente devolvemos una cadena. Y llamemos a esto Aloha porque me encanta cómo Y. entonces también podemos regresar. ¿ De acuerdo? Aloha. Está autorizado. Bien, genial. Entonces este es nuestro punto final, es decir, si lo llamamos ahora, todos deberían poder acceder a este mensaje o recibir este mensaje. Así que probemos esto muy rápido. Ahí está, el getMethod aquí, API off. Probamos esto, golpeamos Expete calificaciones, aunque ja, estás autorizado. Todo el mundo puede hacer esto. Pero ahora queremos asegurar esta cosa. Y la forma más fácil de hacerlo es que solo usamos los atributos autorizados. Por lo que autorizarlo es, aún no se sabe, por lo que tenemos que utilizar el espacio de nombres, autorización Microsoft ASP NET Core. Y eso es todo. Genial. Bueno vamos a probar esto primero. Así que de vuelta a vaguer. Espero que se reconstruya. Hagámoslo manualmente aquí para estar absolutamente seguros. Ok. Ahora hizo el getMethod aquí. Ahora pegamos probarlo, ejecutamos, y obtenemos un error. Bueno, espero que no haya ningún esquema de autenticación especificado. Por lo que ves para poder utilizar el token web JSON, necesitamos un esquema de autenticación. Así que vamos, vamos a añadir esto real rápido. Volvemos a nuestros programas, sí. Y ahora aquí abajo tenemos que volver a escribir algunas cosas. Primero servicios de constructor, luego agrega autenticación. Esta cosa. Ahora, volviéndose un poco complicado, queremos que un portador de tokens Web de JSON sea por defecto. Esto no se sabe, así que echemos un vistazo. Podemos instalar el paquete Microsoft ASP.NET Core Authentication, portador de JWT. Esto es lo que necesitamos porque esto es un token portador. Entonces encuentra e instala la última versión. Cuando esta cosa está instalada. Entonces podemos usar un esquema de autenticación. Por supuesto, paramos la app y ahora sabe lo que está pasando aquí. El valor predeterminado es utilizado por la autenticación de pares. Portador el término oso. A lo mejor ya lo escuchaste. Es sólo un token portador en esencia es sólo una cuerda. Puede ser cadena corta a lo largo de cadena, adyacente Web Token, ¿ algo más? Se acaba de llamar portador y verás en el encabezado entonces también agregaremos el espacio portador de valor y luego el token web JSON. Pero lo veremos en un minuto. Por ahora esquema de autenticación aquí. Ahora decimos agregar JWT Vera con algunas opciones. Por supuesto, estas opciones se ven así. Entonces primero, tenemos opciones, parámetros válidos de token, que son nuevos parámetros y validación de token. De nuevo, estos obtienen algunos valores. En primer lugar, validamos la clave de firma de tema. Esto se establece en verdad. Entonces el emisor que firma la clave en sí, Qué es eso de nuevo, son clave de alto secreto. Por lo que otra vez una nueva clave simétrica de seguridad. Y de nuevo los textos del sistema que codifican UTF-8. Entonces consigue bytes. Aquí. Ahora construye una configuración. Obtener la configuración de sección, token, y de eso de nuevo, el valor. Muy bien, Ahora los dos últimos valida tema. Podemos establecer esto en falso en realidad y también valida audiencia también falsa. Y cerramos esto aquí, y eso es todo. Formatea esta pequeña esperanza. Y ahora tenemos nuestro middleware, en esencia, el servicio logístico, o simplemente unos servicios requeridos por los servicios de autenticación. Así que ahora vamos a probar esta cosa otra vez. Reconstruida. Sólo echemos un vistazo. Probamos esto para que se ejecute. Y ahora genial, conseguimos un banco no autorizado. Por lo que para 01 medios autorizados. De nuevo, podemos volver a verificar. Cuando decimos ejecutar por 01, nos dan esta bolsa. Esta es la respuesta, no hay mensaje, nada de eso. Este es solo el código de estado. No estamos autenticados y no autorizados para obtener esto o acceder a este punto final. Esto es genial porque no enviamos ningún encabezado con esto. De nuevo, podemos echar un vistazo aquí a la pestaña de red que ejecutarías. Y se ve la respuesta establecida como los encabezados de solicitud, nada con autenticación o autorización. Entonces esto es lo que tenemos que hacer a continuación. Tenemos que configurar el encabezado de autenticación a nuestras solicitudes, a nuestra llamada. Y para eso tenemos que, bien cambiar este vector u i un poquito. Así que de nuevo, tenemos que hacer algunas cosas en los programas, sí. Y también tenemos que agregar middleware para que esto funcione. Y luego podremos usar nuestro token web JSON con Swagger UI y x's, el punto final, el punto final autorizado. Entonces hagámoslo a continuación. 21. Utilice el JWT con SwaggerUI y el middleware de autenticación: De vuelta al programa CS aquí en esta línea X, vaguer Jane, tenemos que añadir algunas cosas más. Es más grande. Jen obtiene opciones. En cuanto a estas opciones, decimos que queremos agregar una definición de seguridad. Llamemos a esto oAuth2. A continuación, establezca un nuevo esquema de seguridad API abierto. Permítanme quitar esto. Simplemente agrega otro espacio de nombres aquí. Y aquí dentro. Ahora podemos darle a esta cosa una descripción como cabecera de autorización estándar usando el esquema portador, por ejemplo, juego. Eso será entonces, como dije, portador y luego el token real así. Esta sería la descripción. Entonces podemos se establece el parámetro en. Entonces, ¿dónde queremos poner esto o poner esto? La ubicación del parámetro es el encabezado. Entonces el nombre está apagado. El tipo es tipo de esquema de seguridad, clave API y orden para poder establecer esto, tenemos dos opciones. Filtro de operación, luego requisitos de seguridad, filtro de operaciones. Y para eso, tenemos que instalar otro paquete, su filtro de operación. Aquí, instale el paquete, la hebilla del swash. Detenemos esto. Creo que está instalando ahora. Ahí está. Ahora esto fue un poco rápido swashbuckling filtros ASP NET Core. Este es el paquete que necesitamos con eso ahora no hemos terminado. También tenemos que añadir otro middleware aquí abajo. Eso será AB, uso de autenticación. Lo dice aquí como el middleware de autenticación de recuperación de Microsoft HP al constructor de aplicaciones especificado que habilita las capacidades de autenticación. Eso es genial. Y ahora vamos a correr esto una vez más. Regresamos aquí ahora primero, lo ves aquí ya tenemos un nuevo botón autorizar. Aquí es donde podemos agregar ahora nuestro token. Uh, vamos a iniciar sesión primero aquí con Iron Man y luego pimienta y ejecutar. Copiamos el token. Ahora podemos poner esto aquí, portador y luego el espacio portador de tokens, y luego el token podemos autorizar cerrar. Ahora tratamos de ejecutar esto, hit ejecuta. Y voila, recuperamos nuestro mensaje. Y aquí podemos ver que esta es la cabecera de autorización que hemos dicho. Solo revisemos dos veces aquí en la pestaña Red. Golpea Ejecutar de nuevo. Hemos visto en nuestros encabezados de solicitud, dijimos autorización, el encabezado de autorización, portador y después el token. Ahora todo funciona. Creamos el JSON Web Token, pudimos usarlo y obtener un acceso autorizado para obtener un acceso autorizado a un endpoints autorizado. Genial. Este es en esencia el primer gran capítulo, y el siguiente capítulo ahora es el token de actualización. 22. Actualizar Tokens Introducción: Ahora esto ya funcionó. Esto es perfecto. Pero la pregunta es ahora, cuando tienes tu token web JSON, está caducando pronto, o podría ser el caso de que haya un atacante. Y con ese atacante, tu token web JSON ya no está seguro. Entonces este atacante agarra tu JSON Web Token y luego usa esta cosa para autenticarte y no quieres hacer eso. Entonces es por eso que usamos fechas de caducidad más cortas para nuestros tokens web JSON como 15 minutos por ejemplo. Cuando hacemos eso, para obtener un nuevo token web JSON, necesitamos un token de actualización porque de lo contrario, si adyacente tengo tokenism válido ya. Y tú como usuario, aún quieres usar una aplicación web con el JSON Web Token, esto no funcionaría, pero lo que puedes hacer entonces, y esto es una esencia, la responsabilidad del frente. Lo que puedes hacer es usar un token de actualización que es válido mucho más tiempo, por ejemplo, una semana, siete días. Por lo que es más difícil obtener este token de actualización, por lo que ya no es tan fácil para un atacante. Y también cuando uses este token de actualización, no solo refrescaremos el token web JSON entonces, sino también el propio token de actualización. Entonces todo es nuevo entonces. Y tú como usuario, no notes nada por eso. Pero aún estás autenticado. También autorizar tal vez todo esté seguro, ¿verdad? Así que echemos un vistazo a los tokens de actualización a continuación. 23. Añadir Actualizar datos de token al modelo de usuario: Muy bien, ahora el primer paso para nuestro token de actualización es que queremos almacenar el token de actualización junto con la fecha y la hora se creó este token y cuando expira. Quieres almacenar eso en la base de datos junto con el usuario. Entonces el primer paso es, bueno, extender este modelo de usuario aquí, agregamos otra cadena, que es el token de actualización real. Conseguir esto puede ser una cuerda vacía como esa. Y luego a una fecha hora un inmuebles. Primero uno es un token creado y el siguiente, diurno, luego el token caduca y quieres almacenar esto o agregar otra migración a la base de datos. Así que hagamos eso. Si tu aplicación se está ejecutando, por favor asegúrate de detenerla. Simplemente cierre la terminal y luego nos dirigimos a la consola de Package Manager. ¿ Dónde estamos? Bueno, tenemos que cambiar el directorio. De acuerdo, y ahora ingresamos las migraciones de EF de dotnet al actualizar los datos del token por ejemplo. Echemos un vistazo al archivo de migración. Ahí está. Vemos que se agregarán nuevas columnas para usarlas como tabla. Y si retrocedemos la migración, serán eliminados? Así que eso está bien. Actualizamos la base de datos con dotnet. Actualizaciones de bases de datos. Muy bien, volvamos a abrir la base de datos. El abierto, y ahora ya lo vemos aquí. Tenemos el token de actualización y las fechas. Y aquí también la estructura de la mesa. Genial, Así que esto se hace. Tenemos nuestros datos de token de actualización junto con los datos del usuario. Y el siguiente paso es crear el token de actualización en Login. 24. Crear el Token de actualización en Login: Ahora para crear un también devolver el token de actualización, lo primero que necesitamos aquí es, bueno, podemos extender la respuesta del autor DTO y en los datos aquí también. Aquí ahora se puede ver por qué tiene sentido crear esta respuesta de auth DTO, no sólo podemos enviar el indicador de éxito con un mensaje y el token web JSON, también podemos enviar el token de actualización y algunos datos junto con ese token de actualización. Porque entonces es responsabilidad del front-end decidir cuándo refrescar este token de actualización. Pero lo veremos en futuras lecciones. Así que primero solo agreguemos las propiedades. Entonces lo primero de nuevo es el token de actualización real. Por defecto de nuevo, esta es una cadena vacía. Y ahora también, vamos a añadir la fecha de caducidad, Así que el token va a expirar. Y ahora otra cosa que tiene sentido y hace nuestra vida más fácil es agregar un modelo de token de actualización. No almacenaremos esto en la base de datos, no vamos a devolver esto. Pero en nuestra lógica, usaremos este modelo de token de actualización para poner los datos aquí. Y luego usas estos datos para hacer algunas otras cosas como configurar el token de actualización en la cookie. Así que vamos a crear otro modelo aquí, otra clase y llamemos a esto ahora refresco token. Aquí decimos cuerda de prop. Refresh token es una cadena vacía. Entonces decimos fecha, hora, lo crea, y llamemos solo a este token. Ahora también, fecha y hora caduca. Muy bien, ahora de vuelta al servicio de auth. Y aquí ahora podemos crear nuestro método para crear el token de actualización. Así que de nuevo, es otro método privado, privado crear token de actualización. Y también devuelve un token de actualización. Ver ahora ya tiene sentido usar el modelo de token de actualización aquí. Y esta cosa ahora, por supuesto, un nuevo token de actualización. Y aquí solo decimos token convertir a cadena base 64, luego bytes generador de números aleatorios, y luego 64. Y así es como creamos nuestro token de actualización. Ya ves que es simplemente una cadena de varios personajes, así que nada elegante como el JSON Web Token. Este es nuestro token de actualización, y aquí esto será válido por una semana y se crea. Ahora, al final, devolvemos este token de actualización. ¿ De acuerdo? Ahora cuando conseguimos esto, podemos usar este método al iniciar sesión. Entonces aquí arriba en método de inicio de sesión después de crear el token web JSON, ahora podemos decir que nuestro token de actualización es crear un token de actualización. Establezca esta cosa aquí, por supuesto. Entonces tal vez podamos formatear este bit de manera diferente. Decimos que el token de actualización, el token de actualización, y el token expira, date is refresh token expira. Ahora guardamos esto y lo probamos muy rápido con swagger. Ahí estamos. Vamos a iniciar sesión. Prueba esto, hombre, pappa y ejecuta. Y ahí está. Tenemos nuestro token web JSON y también ahora el token de actualización. Entonces así es como se ve esta cosa junto con la fecha de exploración. Perfecto. Y ahora el siguiente paso es almacenar este token en la base de datos junto con el usuario, y también agregarlo a una cookie. Entonces hagámoslo a continuación. 25. Establecer Refresh Token en Cookie & en la base de datos: Ahora para configurar el token de actualización a una cookie, necesitamos la solicitud y el objeto de respuesta fuera todo este proceso aquí fuera de la API Web. Y para poder acceder a esta cosa, necesitamos el ejercicio de contexto http. Entonces queríamos acceder a los contextos HTTP, lo usaría en el controlador. Aquí mismo. Ya estaría disponible aquí. Ya tienes el contexto HTTP. Y con eso, simplemente puedes acceder a la respuesta. Por ejemplo, sembrar aquí encabezados de respuesta, y luego también solicitar encabezados y así sucesivamente. Para que ya puedas hacer eso aquí. Pero como queremos utilizar el servicio aquí, primero tenemos que inyectar el ejercicio de contextos HTTP. Así que hagamos eso muy rápido. Aquí arriba en el constructor decimos I ejercicio de contexto HTTP. Llamemos a esto también ejercicio de contexto http. Y de nuevo, creamos estos campos y un subrayado aquí y aquí. Y también tenemos que registrar esta cosa y lo hacemos por, quizá vamos a parar primero la aplicación. De acuerdo, y ahora en el programa CS, aquí abajo, solo podemos decir servicios de constructor y luego agregar ejercicio de contexto HTTP. Ese es el uno. De acuerdo, así que con eso, tenemos nuestro accesor de contexto HTTP y hemos registrado esta cosa. Y ahora podemos crear nuestro método para establecer este token en la cookie y también en la base de datos. Entonces aquí abajo otra vez, otro método privado , Asincrono esta vez, pero no devolvemos nada token de actualización. Y esta cosa obtiene los objetos de token de actualización reales y luego también el usuario. Entonces eso es lo que necesitamos. Y ahora empezamos con la galleta. Y una cookie necesita opciones de cookies. Entonces primero, las opciones de cookies, nuevas opciones de cookies. Y aquí decimos que esta es una cookie única HTTP. Esto significa que sólo se puede acceder a ella a través de la solicitud, a través de las llamadas y no a través de JavaScript en el navegador. Eso es importante. Y este es el único lugar donde necesitamos esta galleta. Y también podemos establecer la etapa de exploración para refrescar el token expira. Esta ya son las opciones de cookies y ahora con el ejercicio de contextos HTTP, y luego podría ser nulo. Por lo que aquí podemos acceder a los contextos HEB. Y a partir de eso ahora fijamos la respuesta. Y aquí podemos acceder a las cookies. Y aquí acabamos de decir, sólo decimos depende. El valor se llama token de actualización. Entonces el token de actualización. Token, este es el valor. Y también le damos a esta cosa, las opciones de cookie, y así es como configuramos la cookie en nuestra respuesta. Lo siguiente ahora es también el usuario. Por lo que el token de actualización del usuario se establecerá para refrescar token token. Entonces tenemos un token de usuario creado, que es token de actualización creado. Lo último que vence el token de usuario es el token de actualización caduca y al final decimos Esperar contextos y luego Guardar cambios asincrónicos. ¿ De acuerdo? Y de nuevo, ahora usamos esto en nuestro método de inicio de sesión. Aquí arriba. Después de crear el token de actualización, decimos configurar el token de actualización con nuestros objetos token de actualización y el usuario. Salvemos esto y otra vez, pongamos a prueba esta cosa. Muy bien, ahí estamos. Y ahora vamos a abrir ya la consola aquí. Porque quiero mostrarte algo en la pestaña de aplicación, ves nuestra aplicación actual localizada siete O ocho. Vemos que aquí podemos acceder a las cookies reales, pero echemos un vistazo. En la pestaña Red, tratamos de iniciar sesión. Nuevamente, digamos con Iron Man pepper, le pegamos a Ejecutar. Y ya ves lo que recuperamos. Y ahora aquí primero vemos en los encabezados, en la respuesta, vemos esto aquí, establecer cookies. Entonces esta es nuestra cookie real es, ahora se establece como una cookie HTTP solamente. El token de actualización se establece como una cookie solo HTTP. Y ahora también podemos encontrar esto en la pestaña de aplicación aquí. Ahí está. Hagamos esto un poco más grande. Tal vez tengamos el token de actualización de valor y el token de actualización de nombre. Y ahora aquí también el valor. Y lo grandioso es ahora que automáticamente esta cosa se envía con cada solicitud. Entonces si, digamos por ejemplo, quieres conseguir esto aquí, digamos pruébalo, se ejecuta, ve a la pestaña Red. Por supuesto que no estamos autorizados, pero vemos que en nuestro encabezado de solicitud, envía este token de actualización. Esto es importante ahora para los siguientes pasos porque somos capaces de establecer el token de actualización. Cuando creamos un token de actualización, configuramos un token de actualización en la cookie y también aquí en la base de datos. Ahora podemos ver este token de actualización completo. Ahora el siguiente paso está bien para refrescar el token de actualización y también el JSON Web Token, por supuesto, porque lo importante aquí con el token de actualización es que tan pronto como una web JSON el token expira o un par de segundos o minutos antes de que lo haga. Es responsabilidad del front-end llamar a otros endpoints que luego permitan al usuario actualizar el JWT, el token web JSON, y también el token de actualización. E incluso cuando el token web JSON haya expirado, ya no es válido con la ayuda del token de actualización que es válido por más tiempo, podemos crear un nuevo token JWT y una nueva actualización token para que el usuario siga autenticado y autorizado y el usuario no necesita autenticarse nuevo con el nombre de usuario y contraseña. Entonces esto es lo grandioso del token de actualización. Pero para eso necesitamos otro punto final donde podamos refrescar el paquete completo. Entonces hagámoslo a continuación. 26. Actualizar el Token Refresh (y el Token Web JSON): De nuevo de vuelta a Visual Studio. Y en la interfaz creamos estos nuevos métodos, tarea off respuesta DTO. Llamamos a este metanol también refresco token. Y no tiene argumentos en absoluto. Sí, reconstruimos, pero vamos a conseguir una flecha por supuesto, porque esto no se implementa. Pero hagámoslo ahora muy rápido. Implementar la interfaz, mientras que nuestros métodos probablemente aquí abajo. Sí, vamos a poner esto. Tenemos al usuario del registro. Ahora vamos a bajar aquí. Ahí está nuestro método de token de actualización. Nuevamente, si saltas el final de la última lección, es importante que el front-end, front-end llame a esta cosa. Por lo que en cuanto el token web JSON caduque o poco antes o después. Entonces el front-end tiene que llamar a este punto final aquí. Bueno, este no es el punto final, este es el método de servicio, pero por supuesto el punto final se creará en el controlador en un minuto. Pero ahora con ese método aquí, podemos refrescar todo. Lo primero que necesitamos es ese token de actualización actual. Por lo que ya te dije que con cada solicitud ahora, el token de actualización se enviará con nuestro ejercicio de contexto, ejercicio de contexto HTTP. Entonces los contextos HTTP. Podemos acceder a la solicitud esta vez no a la respuesta a las solicitudes, y buscar un cierto valor de cookie, y ese sería el token de actualización. Después de eso, con el token de actualización reintente obtener al usuario con el token de actualización. Entonces var usuario ahora Waitz contexta a los usuarios primero o asíncrono predeterminado, donde el token de actualización del usuario es ahora el token de actualización, el dado de la cookie. Ahora si no encuentras al usuario, decimos devolver nueva respuesta de autenticación con el mensaje de metanfetamina, token de actualización no válido. Y otra opción, por supuesto, es si encuentras un usuario, pero el token de usuario ha caducado. Por lo que hablar expira es menor que una fecha y hora. Ahora, en este caso, volvemos a devolver nueva respuesta de auth DTO con mensaje. Y esta vez el mensaje es simplemente puede caducar. En ese caso, el usuario tendría que volver a autenticarse con el nombre de usuario y contraseña. Pero si todo es válido, tenemos un token de usuario sigue siendo válido. Nuevamente, creamos un nuevo token. Ese es el token web JSON con nuestro usuario. Después creamos un nuevo token de actualización. Crear token de actualización. Y también establecer esta cosa. Establecer token de actualización, nuevo token de actualización y el usuario. Al final, volvemos de nuevo una nueva respuesta de autor, DTO. Con el éxito fijado a verdad. El token es el token, token de actualización. Nuevo token de actualización, token. Y configuramos el token expira a nuevo token de actualización caduca, eso ya era y eso debería ser. De nuevo muy rápido, esta línea aquí es realmente importante. Tomamos el token de actualización de valor de cookie única HTTP. Y a partir de eso tratamos de encontrar al usuario esta vez, no con el ID de usuario, sino con el token de actualización, porque este es un token solo para un usuario específico. Y si no tiene el usuario, el token de actualización no es válido. Si el token ha caducado, entonces bueno, devolvemos otro mensaje donde el token está caducado y la bandera de éxito es falsa. De lo contrario nuevamente, configuramos el, el JSON Web Token para crear el JSON Web Token similar al lock-in, creamos un nuevo token de actualización y configuramos esta cosa y luego devolvemos el paquete completo. Muy bien, entonces ahora necesitamos los puntos finales. Entonces a nuestro controlador, vamos a editar aquí tal vez. Así que de nuevo, un HTTP posts con aunque un GET también funcionaría, pero vamos a usar una publicación aquí y actualizar token. Y el método ahora soy perezoso, así que vamos a copiar pegue este resultado de acción de tarea y luego una cadena. Llamamos a esto aquí ahora, token de actualización, sin argumentos. Y llamamos a refresh token ningún argumento porque de nuevo, el token de actualización viene con la cookie de solicitud. Si tiene éxito, devolvemos respuesta OK. De no ser así, devolvemos un mal peticiones. Bueno, yo diría que es hora de volver a probar esto. Vamos a ejecutar la aplicación. Muy bien, aquí estamos. Quité la cookie aquí de la pestaña Aplicación. Como se puede ver, una galleta está vacía. No tenemos set de token de actualización, y también la pestaña Red está vacía. Así que vamos a probar esto de nuevo. Vamos a iniciar sesión, probar esto con Iron Man pepper por ejemplo, y ejecuta. Todo está bien. Obtenemos nuestro token web JSON, el token de actualización. También lo vemos aquí en la aplicación una pestaña. Y ahora cuando trato de ejecutar el endpoint token de actualización aquí o llamar a esto print out and execute. Esto funciona, obtenemos un nuevo token de actualización. Lo ves aquí en los cambios de valor. ¿ Ahora qué pasa? Por cierto, por supuesto, en la base de datos? También podemos echar un vistazo. Vamos a refrescar esto. Aquí vemos exactamente el mismo token. Y ahora cuando elimino los nueve aquí y golpeo Ejecutar, de nuevo, obtenemos el mensaje de error correcto, token de actualización no válido, lo pongo de nuevo, y ahora funciona. ¿ Y qué pasa con la fecha? Tenemos este nuevo token aquí y vemos que expira está fijado para el 16 de mayo. Así que déjame simplemente cambiar la fecha en mi máquina. Cámbialo, pon esto ahora para denotar 20, tal vez cambio. Intenté volver a refrescar el token. Dice que el token expiró. Bien, genial, Así que este punto final funciona totalmente. Y de nuevo, esta es responsabilidad del frente. No puedo afirmar esto lo suficiente como para que el front-end o el cliente tenga que comprobar. ¿ Hay algún Web Token adyacente que expira o ya está caducado. En ese caso, tenemos que tomar un token de actualización y llamar al endpoint del token de actualización para obtener un nuevo token de actualización. Muy bien, y con eso hemos terminado con los tokens de actualización y el último capítulo ahora, las carreteras y el gran tema, la autorización. 27. Introducción de roles: Ahora estos son los puntos finales ahora para el registro, para iniciar sesión, para el token de actualización. Y ahora la última parte debe ser el papel. Tenemos nuestro objeto de usuario en la base de datos, pero aún no tiene papel. Pero ahora esto va a cambiar. Entonces lo que vamos a hacer a continuación es que vamos sumar el papel en una nueva migración. Entonces este campo está entonces en la base de datos el rol del usuario. Y también utilizaremos las afirmaciones para sumar este rol en el JSON Web Token. Y luego cuando el usuario intenta llamar a un determinado punto final y el usuario necesita ser autorizado para este punto final. Entonces podemos comprobar eso en la API web con otro atributo. Por caso, tal vez tengas el rol típico de usuario o cliente, pero luego también un rol de administrador en solo los administradores son capaces llamar a ciertos endpoints. Entonces esto es lo que vamos a revisar a continuación. 28. Añadir rol al modelo de usuario: Lo primero, de nuevo para nuestros roles es agregar el roll al modelo de usuario y agregar una nueva migración. Aquí en el modelo de usuario, agregamos una nueva propiedad. Esto sería entonces una cadena simplemente con la fila y una cadena vacía. Por defecto, guardamos esto y ahora ejecutamos otra migración. Entonces las migraciones de dotnet EF usan row por instancia. Muy bien, ahora vemos esto aquí en nuestra carpeta de migraciones. Simplemente agregamos una nueva columna. Eso está bien. Entonces vamos a actualizar la base de datos con la base de datos de dotnet EF. Ahora echemos un vistazo. Aquí están nuestros usuarios. Actualizamos los datos, vemos aquí la nueva fila, y por supuesto podemos cambiarla. Por caso, ahora podemos decir que Irán tiene el usuario de fila al que golpeamos Aplicar. Y si cambias algo aquí, asegúrate en el navegador DB para luz SQL que haces clic aquí en este botón, ¿verdad? Cambios. Ahora estos cambios están escritos y guardados. De acuerdo, Entonces este es ahora el nuevo rol y el modelo de usuario. Y a continuación agregamos el reclamo de la regla S al token web JSON. 29. Añadir papel como reclamo al Token Web JSON: Entonces volvemos al servicio de auth y luego donde creamos el token aquí, simplemente podemos agregar la fila ahora como un nuevo reclamo. Por lo que solo agregamos un nuevo reclamo y luego reclamamos tipos y luego fila. Aquí, está sugiriendo ya lo correcto, fila de usuarios, esa es la indicada. Eso ya es todo. Por lo que ahora ya podemos hacer pruebas si el rol actual del usuario está disponible en el token web JSON. Echemos un vistazo. Ahí está nuestra app. Volvamos a iniciar sesión. Por cierto, si todavía está bloqueado o tiene el token de actualización en su cookie disponible, entonces puede usar simplemente el punto final del token de actualización aquí para obtener el nuevo token web JSON. Eso es lo genial ahora con tokens de actualización, no tienes que volver a iniciar sesión como tengo que porque me quité todo de mis cookies. Entonces en ese caso, solo podría usar el endpoint token Refresh y obtener un nuevo JSON Web Token. Simplemente mires adentro. Y ahora aquí vemos el token web JSON. Vamos a agarrar esta cosa. Echa un vistazo aquí, lo pegamos de nuevo. Y deberíamos ver, sí, ahí está, el rol ahora, que es el usuario. Genial, así que esto ya funciona. Ahora el último paso ya es que tenemos que usar esta fila para la autorización para que solo usuarios específicos con un rol específico puedan acceder a ciertos puntos finales. Entonces hagámoslo a continuación. 30. Utilice el rol para la autorización: Ahora solo usemos la situación actual. Tratamos de conseguir un nuevo JSON Web Token aquí. Esto ahora funciona porque ya tenemos un token de actualización. Nuevamente, revisamos esta cosa aquí y se ve el rol de usuario. Ahora ve a nuestro getc llamado aquí y haz click, Pruébalo. Lo ves por uno o no estás autenticado o autorizado. Ahora agregamos aquí el token web JSON. Hit Execute, estamos consiguiendo aloha, estás autorizado. Pero qué pasa si sólo queremos administradores, por ejemplo, utilizar este punto final. Entonces el rol admin, por ejemplo, podemos cambiar esto realmente rápido. El controlador de apagado. Aquí arriba, vemos dónde está Ahí no está aquí arriba. Aquí abajo. Simplemente podemos sumar entre paréntesis rho. Entonces admin por ejemplo, guardamos esto. Simplemente reinicie la aplicación. Por lo que ahora estamos bloqueados de nuevo, pero con la ayuda de nuestro token de actualización, obtenemos un nuevo token web JSON para que no tengamos que iniciar sesión manualmente. Vamos a autorizar de nuevo. Golpe Autorizar, cerrar. Ahora tratamos de conseguir esta cosa aquí y obtenemos un 403. Ahora 403 Prohibido. Por lo que esto significa que enviamos un encabezado de autorización. Enviamos aquí una clave JSON Web Token, pero con la fila equivocada. Ahora vamos a cambiar nuestro rol aquí en lugar de usuario, ahora decimos admin, se aplica y escribe los cambios. Y ahora de nuevo, vamos a refrescar el token. Muy bien, así que vamos a copiar esta cosa escuchando otra vez. Tenemos que usar este token aquí. Ahora hacemos clic en Autorizar y ahora 1 séptimo aloha, estás autorizado. Genial. Por lo que ahora como administrador con este rol específico, se nos permite obtener esta información aquí o acceder al contenido, la información de este punto final. Ahora lo último que muchos usuarios, muchos estudiantes preguntan es qué pasa con varios roles cuando se tiene, cuando se quiere autorizar más varillas que una sola. Bueno, solo ingresa usuario y luego Admin. Y esto funciona también. Reiniciemos la aplicación manualmente solo para estar seguros. Ahora cuando usamos el mismo token aquí, hacemos clic en Autorizar, todavía funciona. Y última prueba, digamos de nuevo, queremos darle a este usuario, la fila del usuario. Escribimos el cambio. De nuevo, obtenemos nuevo token. Este es ahora el token de usuario que ves aquí. Esto ahora es un usuario. Y pegamos Autorizar un cierre de sesión, Berra, cerrar, ejecutar, y seguimos obteniendo lo contrario, estás autorizado. Así es ahora como funcionan las carreteras. Y con eso, terminamos con esta clase. Enhorabuena. 31. Palabras finales: De acuerdo, y eso es todo ya en poco tiempo aprendiste a registrar usuarios, bloquearlos y crear tokens Web JSON. También usa tokens de actualización y has agregado roles a ese usuario. Entonces ahora creo que ya conoces todos los fundamentos para un proceso de autenticación con dotnet six, realmente esperaba que aprendieras algo y te fue útil. Si es así, me encantaría ver una reseña. Muchas gracias por eso. Y tal vez quieras sumergirte más profundamente en dotnet y blazer y otro personal con respecto al desarrollo web. Y en este caso, me encantaría verte en mi canal de YouTube. Así que de nuevo, muchas gracias por su tiempo y gracias por unirse a mi curso. Y espero verte en el próximo curso o en mi canal de YouTube. Cuídate.