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.