Estoy seguro de que tienes una o más cuentas de redes sociales.
Ya sea Facebook, Twitter, YouTube, Google, GitHub,
o muchos otros proveedores de servicios de este tipo, donde registró teléfono y cuenta.
Ahora, estos proveedores de servicios, a su vez,
están dispuestos a proporcionar servicios de autenticación en su nombre.
Así, por ejemplo, ve la proliferación de una serie de sitios web
y aplicaciones móviles donde se le permite iniciar sesión
usando sus cuentas de redes sociales.
Ahora, ¿cómo funciona esto realmente?
Muchos de estos proveedores de cuentas de redes sociales actúan
como proveedores de servicios de autenticación mediante un protocolo llamado OAuth.
Vamos a ver OAuth y cómo permite a estos proveedores de autenticación de terceros
proporcionar autenticación en su nombre,
y le permite iniciar sesión en otros servicios utilizando sus cuentas de redes sociales.
Estoy seguro de que es posible que haya oído al pasar acerca de OAuth 1 y OAuth 2,
y que podría haber escuchado a personas
que dicen que Facebook proporciona autenticación basada en OAuth 2,
o Google proporciona autenticación basada en OAuth 2, etc.
Estoy seguro de que debe preguntarse,
¿qué son exactamente estos OAuth1 y OAuth 2 destinados a ser?
Ahora, OAuth1 y OAuth 2 son marcos de autorización
que se basan en estándares abiertos.
Y estos se pueden utilizar a través de Internet para autenticar
su identidad en muchos sitios web o aplicaciones móviles.
Ahora, cuando usas estos servicios,
estás dependiendo de una de las cuentas de redes sociales como Facebook,
Google, Twitter, Microsoft, Instagram,
GitHub, DigitaloCean, y muchas más,
que proporcionan estos servicios de autenticación para que otros los utilicen.
Estos proveedores de servicios de autenticación prometen a
los usuarios de estos servicios de autenticación que autenticarán la identidad
del usuario en función del envío de
sus credenciales para estos servicios de redes sociales.
Ahora, hay un servicio complementario OpenID.
Pero, por supuesto, no está relacionado con OAuth, pero proporciona un tipo de servicio similar.
Pero la mayoría de los proveedores de servicios de redes sociales estándar,
como verá aquí,
ofrecen servicios basados en OAuth 2 en estos días.
Ahora, como mencioné, OAuth1 y OAuth 2 son protocolos de autenticación,
y OAuth 1 fue el primer protocolo que surgió.
Esto fue evolucionado a partir de Twitter,
Blaine Cook siendo la persona detrás de él,
y esto está documentado en el Internet Engineering Task Force, RFC 5849.
Entonces, si quieres leer los detalles sangrientos de cómo funcionan estos protocolos,
ese es el lugar para encontrarlo. El
protocolo OAuth 2 evolucionó a partir de OAuth 1 para hacerlo más simple
y proporcionar una forma más simple para el desarrollo de clientes.
Y esto está documentado en IETF RFC 6749 y luego,
otro uso de token portador se produjo en IETF RFC 6750.
Ahora, desde nuestra perspectiva,
realmente no queremos entrar en detalles de cómo funcionan estos protocolos en realidad.
En cambio, todo lo que nos interesa es,
¿cómo aprovechamos estos para la autenticación de usuarios dentro de nuestra aplicación web,
o dentro de nuestra aplicación móvil,
cuando necesitamos autenticar al usuario
en el servidor Express que hemos estado construyendo hasta ahora?
Ahora, nos concentraremos principalmente en OAuth 2,
porque en el ejercicio,
veremos el uso de Facebook como un proveedor de servicios de autenticación OAuth 2
, y aquí, necesitamos entender
algunos términos para ver cómo funciona exactamente este protocolo OAuth 2.
Al menos, los detalles básicos de cómo funciona el protocolo en sí.
Ahora, en el caso de OAuth 2,
siempre hablamos de la propiedad de un recurso.
Ahora, en este caso,
el recurso al que me refiero no es
el recurso que está almacenado en el servidor Express.
En cambio, el recurso al que nos referimos aquí,
es la identidad del usuario.
Ahora, cualquier servidor, como el servidor Express que hemos estado construyendo,
quiere tener acceso a este recurso,
esa es su identidad.
Ahora, ¿dónde está tu identidad?
Su identidad se almacena en uno de
esos proveedores de servicios de autenticación de redes sociales como Facebook, etc.,
porque ya ha creado una cuenta en estos sitios de redes sociales.
Por lo tanto, su información o su información de identidad o
su información de perfil se almacenan en Facebook, por ejemplo.
Ahora, su servidor Express quiere obtener acceso a su identidad y
verificar que realmente es usted quien está tratando de acceder al servidor Express.
Por lo tanto, en este caso,
el servidor Express que hemos desarrollado,
actúa como la aplicación cliente.
Por lo tanto, aquí es donde la aplicación cliente,
que es el sitio web o la aplicación móvil que quiere
acceder al servidor de recursos con el fin de obtener la información sobre usted.
¿ Qué es un servidor de recursos del que estamos hablando?
Este es el servidor de autenticación OAuth de Facebook,
que también proporciona información de su perfil a petición.
Ahora, por supuesto, no vas a seguir distribuyendo aleatoriamente la información de tu perfil.
En su lugar, desea poder verificar que proporciona acceso a la
información de su perfil a un proveedor de servicios autenticado o a un servidor autenticado.
Ahora, aquí es donde su aplicación cliente o el servidor Express aquí,
por ejemplo, se registrarán en Facebook con una cuenta que dice que estoy operando una aplicación,
y quiero registrarme como una fuente potencial que puede
acercarse a usted para autenticar usuarios cuando proporcionan
acceso a su perfil que está almacenado en su sitio.
Por lo tanto, el servidor Express,
en este caso actuando como la aplicación cliente,
se registrará en Facebook y obtendrá un ClientID y un secreto de cliente de Facebook.
Ahora, cuando el servidor Express se registre en Facebook,
necesita tener una cuenta en Facebook,
una cuenta autenticada en Facebook,
que usará para configurar esta aplicación en Facebook.
Por lo tanto, una vez que
te registres, obtendrás acceso a un ClientID y a un secreto de cliente.
Ahora, el servidor de recursos,
como mencioné, es el servidor que aloja los datos protegidos.
Datos protegidos, es decir, el perfil del usuario que desea acceder al servidor Express.
Por lo tanto, el servidor Express quiere acceder a este servidor
de recursos y obtener los datos de perfil del usuario que desea acceder al servidor Express.
Así que, ves la relación aquí.
Por lo tanto, cuando hablo de una aplicación cliente,
no me refiero a su aplicación front-end,
sino a su servidor Express que está tratando de proporcionarle
acceso a los recursos que tiene en su sitio.
Pero el servidor Express,
para permitirle acceder,
necesitará acceso a su servidor de recursos de Facebook que
lo autenticará y proporcionará su información de perfil al servidor Express.
Por lo tanto, el servidor de recursos del que estoy hablando aquí,
es el servidor de autenticación OAuth 2 de Facebook
más el servidor de recursos que le da acceso a la información del perfil del usuario.
Y el servidor de autorización es el servidor que
autorizará a alguien a acceder
al servidor de recursos para recuperar la información del perfil.
Ahora, el usuario es el que tiene la información de perfil en el servidor de recursos.
El usuario debe autorizar al servidor Express a ir
a este servidor de recursos para obtener la información del perfil.
Pero si el usuario necesita autorizar el servidor Express,
el usuario debe iniciar sesión en la cuenta de Facebook,
y luego obtener información de Facebook llamada como un token de acceso,
que el usuario luego pasará al servidor Express.
Ahora, cuando el token de acceso se obtiene de Facebook a través del protocolo OAuth 2,
el token de acceso se emitirá en términos
de permitir esta aplicación cliente o el servidor Express,
que ya está registrado en Facebook diciendo que
este servidor cliente voy a autorizar a
acceder su información de perfil de su proveedor de servicios OAuth de Facebook.
Así que, de nuevo, esto es un poco confuso.
Veremos un diagrama donde este flujo de
información se explica un poco más claramente a usted.
Un punto que acabo de mencionar es sobre un token OAuth o el token de acceso.
¿ Qué es este token de acceso?
El token de acceso es algo que el servidor de autorización emite por usted.
¿ Qué servidor de autorización?
Este es el servidor de autorización de OAuth 2 de terceros,
servidor de Facebook, en este ejemplo.
Así que son aplicaciones de servidor Express.
Ahora, usted, como su usuario front-end,
quiere acceder a algo desde la aplicación del servidor Express.
La aplicación del servidor Express le dirá que se autentica
desde Facebook y luego obtiene el token de acceso de Facebook.
Este token de acceso se emite
al usuario front-end desde Facebook cuando el usuario inicia sesión en su cuenta de Facebook.
Ahora este token de acceso se emite en el nombre de la aplicación cliente,
servidor Express, que ya se ha registrado en Facebook.
Por lo tanto, para que el usuario acceda a Facebook para obtener su token de acceso,
el usuario requiere el ID de cliente de la aplicación cliente o la aplicación Express.
Por lo tanto, este ID de cliente está integrado en
la aplicación front-end que este servidor Express le servirá.
Así que el servidor Express está sirviendo un sitio web al que está accediendo,
entonces ese sitio web contendrá código donde
el ID de cliente de ese servidor Express ya está incrustado allí.
Una información más que mencioné es un secreto de cliente.
Ahora, en el flujo de autenticación del que voy a hablar,
el secreto del cliente nunca será revelado a nadie.
El secreto del cliente estará solo en el lado del servidor Express.
Cuando el servidor Express intenta autenticar y
obtener acceso al perfil del usuario desde Facebook,
la aplicación cliente, el servidor Express
enviará tanto el ID del cliente como el secreto del cliente,
junto con el token de acceso que el usuario le proporciona a Facebook.
Y Facebook, a su vez,
autoriza a su aplicación cliente a acceder
al servidor de recursos para obtener los datos de perfil del usuario.
Y una vez que los datos del perfil del usuario se obtienen del servidor de recursos de Facebook,
entonces mi servidor Express va a crear una cuenta
para este usuario en particular que los ha registrado con su cuenta de Facebook.
Y luego, posteriormente, proporcione un token web JSON al usuario,
que el usuario puede usar para acceder a
los recursos almacenados en el servidor Express.
Así que, de nuevo, para resumir esto,
tengo un diagrama aquí para explicarle esto con un poco más de detalle.
Además de esto,
también hay un token de actualización.
Cuando el servidor de Facebook OAuth 2 emite un token de acceso,
el token de acceso tiene una duración limitada.
Después de eso, el token de acceso se volverá inválido.
Por lo tanto, el token de acceso debe mantenerse confidencial.
Así que todo este intercambio de tokens entre los diferentes sitios
se realizará en un asunto cifrado usando el protocolo HTTPS.
Así que asegúrese de que cuando envíe su token de acceso desde
su aplicación front-end de usuario al servidor Express,
solo enviará el token de acceso a través de HTTPS, no HTTP.
Esto es muy importante porque no
desea que su token de acceso se revele a nadie porque cualquiera
que pueda obtener uno de su token de acceso puede pretender ser
su aplicación cliente y luego obtener acceso a su perfil de usuario.
Así que eso es muy importante.
Ahora, dado que el token de acceso tiene una duración limitada,
también hay un token de actualización correspondiente,
que se puede usar para actualizar un token de acceso caducado.
Ahora, en el tipo de flujo que vamos a
usar con nuestra aplicación en el ejercicio,
no podremos usar el token de actualización.
Cada vez que el usuario quiera autorizar
al servidor Express para ir a buscar la información del perfil de Facebook,
el usuario tendrá que proporcionar explícitamente
un nuevo token de acceso que se obtiene de Facebook.
La única parte que acabo de mencionar brevemente,
pero no he elaborado,
es cómo funciona la aplicación cliente, el servidor Express,
las básculas, ¿cómo se registra en el proveedor de servicios OAuth 2?
Ahora, aquí es donde muchos de los proveedores de servicios de OAuth 2
proporcionan una forma de registrar una aplicación en su sitio.
Por lo tanto, una aplicación cliente,
los servidores Express en nuestro ejemplo,
se registrará como una aplicación cliente en el proveedor de servicios OAuth.
Así que como verá en el ejercicio,
el primer paso que haremos es iniciar sesión en Facebook con
nuestra cuenta y luego crear una aplicación en el sitio de Facebook.
Al hacerlo, Facebook le emitirá un ID de aplicación cliente y un secreto de cliente.
Este procedimiento se aplica a muchos otros proveedores de servicios OAuth porque
este es el flujo general del que habla el protocolo OAuth 2.
Por lo tanto, el ID de la aplicación cliente y el secreto del cliente son útiles para que podamos
probar nuestra identidad
al servidor OAuth cuando estamos pasando un token de acceso que obtenemos del usuario.
Ahora, también hay una URL de redirección que necesita
registrar cuando está registrando la aplicación cliente,
y me verá realizando eso en los pasos que registro
la aplicación en el sitio de Facebook.
Ahora, para resumir el flujo de información del
que acabamos de hablar brevemente en el caso anterior,
permítanme comenzar en este punto.
El primer punto a tener en cuenta es el propietario del recurso.
Así que el propietario del recurso aquí
es el usuario que va a usar su cuenta de redes sociales.
Facebook, en este ejemplo,
tiene la autenticación para el usuario.
Por lo tanto, el propietario del recurso es el que tiene el perfil sobre el recurso.
Y esta información de perfil para cada cuenta de Facebook,
se almacenaron en el servidor de Facebook.
Y así el servidor de Facebook proporciona el servidor de recursos aquí.
Así que ese es el proveedor de servicios OAuth que ve en
el lado derecho de esta imagen aquí.
Así que imagina el servidor de Facebook en el lado derecho, esa aplicación cliente,
que tiene el resto del servidor API,
el servidor Express que hemos implementado,
es una aplicación cliente en este caso,
y el propietario del recurso es el usuario.
URL de usuario front-end, que va a
autorizar a ir a Facebook para verificar la credencial de ese usuario.
Así que cuando desee acceder a la información del lado del cliente,
primero tendrá que ir y
autorizar esta aplicación cliente para poder
obtener acceso a la información de su perfil.
Por lo tanto, la aplicación cliente,
si está actuando como una aplicación web,
proporcionará un botón apropiado allí diciendo iniciar sesión usando Facebook.
Y así, cuando haces clic en el botón,
esencialmente, se inicia el primer paso. Se
inicia la solicitud de autorización de usuario.
Así que su aplicación cliente,
a través del agente de
usuario, el agente de usuario es básicamente la aplicación cliente, la aplicación front-end.
Podría ser la aplicación Angular que hemos desarrollado o esa aplicación móvil,
ya sea Ionic o si se trata de
una aplicación NativeScript que hemos desarrollado en los cursos anteriores en
la especialización o incluso una aplicación nativa como una aplicación iOS o una aplicación Android.
Todos estos actúan como agente de usuario.
Por lo tanto, el agente de usuario,
utilizan un proceso de solicitud de autorización a través
del agente de usuario al servidor de autorización,
que es el servidor de Facebook.
Ahora, cuando eso pase,
entonces el propietario del recurso o el usuario,
que está tratando de dar acceso a su perfil a esta aplicación cliente,
tendrá que autorizar a Facebook para
poder compartir esta información con la aplicación cliente.
En el enfoque de concesión de flujo implícito que estamos utilizando en
nuestro ejemplo aquí y también en el ejercicio que sigue,
el enfoque de concesión de flujo implícito es
el enfoque más adecuado cuando está implementando una aplicación web usando
un marco como Angular o la aplicación móvil híbrida
con Ionic o un NativeScript o incluso una aplicación nativa.
El enfoque de concesión de flujo implícito es una forma mucho más simple de
operar el OAuth 2 para este tipo de aplicaciones.
Entonces, el propietario del recurso hace clic en el botón de inicio de sesión,
luego el servidor de autorización le preguntará al propietario del recurso con la información que dice:
«Esta aplicación cliente quiere acceder a la información de su perfil.
¿ Lo autoriza usted?
Así que esto aparecerá por Facebook,
y luego hará clic en un botón que dice: «
Sí, autorizo a esta aplicación cliente a acceder en mi nombre».
Entonces, en ese punto,
el servidor de autorización en Facebook,
el servidor de autorización de OAuth 2 en Facebook,
generará un token de acceso.
Para generar este token de acceso,
hará uso del ID de cliente para esta aplicación cliente,
la aplicación de servidor Express que registramos.
Por lo tanto, el ID de cliente debe formar parte del agente de usuario que utiliza este usuario.
Por lo tanto, este ID de cliente se incrusta en
la aplicación Angular, la aplicación Ionic o NativeScript o incluso en una aplicación iOS o Android.
Por lo tanto, el
agente de usuario usará el ID del cliente para convertir el servidor de autorización diciendo:
«Esta aplicación cliente quiere acceso a mi perfil,
y estoy dispuesto a autorizarle a permitir el acceso al perfil».
Por lo tanto, en ese punto,
el servidor de autorización enviará un token de acceso al agente de usuario en este caso.
Por lo tanto, recuerde, este token de acceso entra en el agente de usuario,
que es la aplicación móvil o su aplicación angular que implementamos.
A continuación, este agente de usuario tomará este token de acceso y
luego pasará este token de acceso a esa aplicación cliente.
Por lo tanto, el OAuth para iniciar sesión,
pero el token de acceso se pasará a la aplicación cliente,
el servidor Express en este caso,
en una ruta particular en el enrutador del usuario,
la ruta de autenticación en el sitio de la aplicación cliente.
Ahora, anteriormente, vimos el uso de la autenticación local,
donde enviamos una solicitud para recortar el usuario barra de inicio de sesión.
Ahora, para que esto funcione en nuestra aplicación,
configuraremos otra en usuarios de barra
diagonal, barra de Facebook, token de barra, etc.
Entonces, otra URL en la que proporcionamos este token de acceso al servidor Express.
Ahora, cuando el servidor Express obtiene este token de acceso,
el servidor Express tomará este token de acceso,
y luego junto con su ID de cliente y el secreto del cliente,
enviará esta información al servidor de autorización.
Y el servidor de autorización permitirá que su aplicación cliente
acceda al servidor de recursos para obtener la información del perfil.
Y así la información del perfil se enviará de vuelta en el paso número seis, de
vuelta a la aplicación cliente en este caso.
Por lo tanto, cuando la aplicación cliente obtiene la información de perfil para
el usuario, la aplicación cliente creará una nueva cuenta para
el usuario en cada sitio si no existe una cuenta.
Si ese usuario ya ha iniciado sesión con su ID de Facebook,
ya existirá una cuenta para que la aplicación cliente y el servidor Rest API
simplemente comprueben que esta cuenta de usuario ya existe.
Y, en ese momento,
el usuario se autentica en la funcionalidad de inicio de sesión de terceros
proporcionada por el servicio de autenticación OAuth 2 de Facebook.
En ese momento, la aplicación cliente generará un JSON Web Token,
en el ejemplo que vamos a implementar y hacer ejercicio,
y luego pasar este JSON Web Token de vuelta al agente de usuario o la aplicación front-end,
o la aplicación Angular, o la aplicación Ionic,
o la aplicación NativeScript.
A continuación, el usuario utilizará el token web JSON
para autenticarse cada vez que quiera
acceder a cualquier recurso almacenado en el servidor Express.
Por lo tanto, una vez que obtiene el token web JSON
, todas las operaciones posteriores, ya ha visto cómo hacerlo con JSON Web Token.
Por lo tanto, una vez que obtiene el token web JSON
, su trabajo está hecho,
y luego puede continuar con la operación normal a partir de ese punto.
Ahora, cuando el Token web JSON expira,
entonces debe pasar por todo el proceso de volver a autenticarse y,
posteriormente, permitir que los usuarios accedan a la información en su sitio.
Por lo tanto, con esta rápida comprensión de cómo funcionan las operaciones de OAuth 2
, de nuevo, como puede ver, hay muchos detalles aquí.
Pero, afortunadamente, no tenemos que lidiar con todos estos detalles porque vamos a
usar un módulo de nodo que se ocupa de muchos de estos detalles en nuestro nombre.
Como ya hemos configurado nuestro servidor Express para usar Passport,
ahora podemos usar otro código de módulo de nodo como módulo Passport-Facebook-Token.
El módulo Passport-Facebook-Token esencialmente implementa
el enfoque implícito de concesión del que hablé antes.
Y luego puede inicializar
una nueva estrategia en su estrategia de Passport, dentro de su aplicación.
Y para que el módulo Passport-Facebook-Token le permita configurar
una nueva estrategia de autenticación de Passport para usar la API OAuth 2 basada en Facebook.
Y así, para hacer uso de este módulo,
instale esto diciendo pasado npm install passport- facebook-token,
menos menos guardar, y luego una vez que lo instale,
entonces configurará una estrategia de Facebook dentro de su aplicación, y, a partir de entonces,
hará uso de esto para configurar la estrategia para que su Passport
haga uso de si estamos haciendo uso de la autenticación basada en OAuth 2 para nuestra aplicación.
Con esta rápida comprensión de OAuth 2,
pasemos al ejercicio,
donde configuraremos nuestro servidor Express para hacer uso de
este enfoque de concesión implícita para permitirnos
verificar nuestra identidad al servidor Express y, a
partir de entonces, obtener acceso a los recursos, los platos,
las promociones y la información de los líderes que se almacena en nuestro servidor Express.