es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo usar PassportJS con JWT en una API REST

Actualmente estoy trabajando en la construcción de una API REST donde los usuarios pueden autenticarse a través de diferentes estrategias de passport (google, facebook). La autenticación debe realizarse sin una sesión.

Ya he trabajado en la estrategia local y funciona de la siguiente manera: la aplicación envía una solicitud POST /login a la API y cuando el usuario ingresa las credenciales correctas, recibe una carga útil como esta:

[
{
“tokenType”: “refresh”,
“expiresIn”: 604800000,
“token”: “eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTUsImlhdCI6MTY0MDc4NzA4MCwiZXhwIjoxNjQxMzkxODgwfQ.zdxdpX8NkiSTsbZj0xOd18RdbLjeSsQpkikLGW71xrE”
},
{
“tokenType”: “access”,
“expiresIn”: 7200000,
“token”: “eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTUsImlhdCI6MTY0MDc4NzA4MCwiZXhwIjoxNjQwNzk0MjgwfQ.EBDuJqQYT-D0bnYbC76_khe6b29c80R4pMyEaBNKLKE”
}
]

Sin embargo, el problema con las estrategias de Google y Facebook es que funcionan a través de OAuth. Me resulta difícil encontrar una forma de enviar la información anterior (como lo hice con mi estrategia local) al cliente después de que la autenticación de OAuth haya tenido éxito.

Estos servicios de OAuth trabajan con una URL de retorno como /auth/facebook/return. Pero esta URL de retorno está en la API, que luego no puede enviar la información al cliente (¿o sí?).

¿Cómo puedo hacer esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para enviar la carga de autenticación al cliente después de que la autenticación de OAuth haya tenido éxito, puedes utilizar JSON Web Tokens (JWT).

    Cuando un usuario se autentica mediante OAuth a través de Facebook o Google, la API puede generar un JWT que contenga la información del usuario y enviarlo de vuelta al cliente como respuesta. El cliente puede luego almacenar el JWT en almacenamiento local o en una cookie, y enviarlo con cada solicitud subsiguiente para autenticar al usuario.

    Para implementar la autenticación con JWT utilizando passport.js, puedes utilizar la estrategia passport-jwt. Esta estrategia valida los JWT y extrae la información del usuario de ellos. La estrategia puede ser utilizada junto con passport-facebook o passport-google-oauth para habilitar la autenticación de OAuth con JWT.

    Cuando el usuario es redirigido al punto final /auth/facebook/return o /auth/google/return de la API después de una autenticación exitosa, la API puede generar un JWT y enviarlo de vuelta al cliente. El cliente puede entonces extraer el JWT, almacenarlo y enviarlo con cada solicitud subsiguiente a los puntos finales autenticados.

    En general, utilizar JWT para la autenticación te permite implementar la autenticación de OAuth sin sesiones y aún proporcionar un mecanismo de autenticación seguro y sin estado para tu API REST.

Comments are closed.