Open Authorization, también conocido como OAuth, es un protocolo que se utiliza para autorizar a un usuario en su sitio web utilizando algún servicio de terceros como Google, Github, Facebook, etc. El servicio de terceros comparte algunos datos (nombre, correo electrónico, foto de perfil, etc.) con su sitio web y luego autoriza al usuario en su nombre sin administrar las contraseñas y nombres de usuario de su sitio web, y ahorrándoles a los usuarios muchos problemas adicionales.
Cómo funciona OAuth
Cuando un usuario hace clic en “Iniciar sesión con Google”, lo lleva a la página de consentimiento de Google OAuth. Cuando el usuario acepta el consentimiento y autentica su identidad en Google, Google se pondrá en contacto con su sitio web como un servicio de terceros y autorizará al usuario en su nombre y compartirá algunos datos con su sitio web. De esta manera, el usuario puede ser autorizado sin administrar las credenciales de su sitio web por separado.
Implementar Google OAuth con Node.js
Casi todos los lenguajes de programación proporcionan diferentes bibliotecas para implementar google oauth para autorizar a los usuarios. Node.js proporciona bibliotecas ‘passport’ y ‘passport-google-oauth20’ para implementar google oauth. En este artículo, implementaremos un protocolo oauth para autorizar a los usuarios a usar node.js.
Crea un proyecto en Google
El primer paso para implementar Google OAuth es crear un proyecto en la consola de desarrollo de Google para su sitio web. Este proyecto se utiliza para obtener las claves de API que se utilizan para realizar solicitudes a Google para la autenticación abierta. Vaya al siguiente enlace y cree su proyecto.
https://console.developers.google.com
Configuración de Google Project
Después de crear el proyecto, ingrese al proyecto y seleccione “Pantalla de consentimiento de OAuth” en el menú del lado izquierdo.
Haga clic en el botón ‘crear’ y proporcione todos los detalles de su proyecto. Haga clic en “Guardar y continuar” para continuar.
Ahora proporcione el alcance de su proyecto. Los ámbitos son los tipos de permisos para acceder a los datos del usuario desde una cuenta de Google. Debe configurar los permisos para obtener datos de usuario específicos de su cuenta de Google. Haga clic en “Guardar y continuar”.
Ahora agregue los usuarios de prueba al proyecto si lo desea. Los usuarios de prueba son los únicos usuarios permitidos que pueden acceder a su aplicación web en el modo de prueba. Por ahora, no ingresaremos ningún usuario de prueba y haremos clic en “Guardar y continuar” para pasar a la página de resumen del proyecto.
Revise su proyecto en la página de resumen y guarde la configuración. Ahora generaremos credenciales para nuestro proyecto. Seleccione la pestaña ‘Credenciales’ en el menú del lado izquierdo y haga clic en el botón ‘Crear credenciales’ en la parte superior para generar ID de cliente OAuth 2.0.
En el menú desplegable, seleccione ‘ID de cliente OAuth’ y especifique el tipo de aplicación como ‘Aplicación web’ y el nombre de su aplicación.
En la misma página, debemos proporcionar dos URI, los ‘Orígenes de JavaScript autorizados’ y los ‘URI de redireccionamiento autorizados’. Los ‘Orígenes de JavaScript autorizados’ es el origen HTTP de su aplicación web y no puede tener ninguna ruta. El ‘URI de redireccionamiento autorizado’ es el URI exacto con una ruta a la que se redirigirá al usuario después de la autenticación de Google.
Después de ingresar todas las entradas requeridas, haga clic en ‘crear’ para crear las credenciales de OAuth.
Iniciando el proyecto Node.js
Hasta ahora, hemos creado un proyecto de Google para autorizar a los usuarios de nuestra aplicación a utilizar Google. Ahora vamos a iniciar el proyecto node.js para implementar oauth. Cree un directorio llamado ‘auth’ e inicie el proyecto express.
Instalación de paquetes npm necesarios
Para implementar Google OAuth usando node.js, necesitamos instalar algunos paquetes npm. Usaremos ‘passport’, ‘express’, ‘path’ y ‘passport-google-oauth20’. Instale estos paquetes usando npm.
Escribir código de Node.js
En primer lugar, escribiremos dos páginas web html simples, la que tiene un botón, y autorizaremos al usuario cuando haga clic en el botón. La segunda página será autorizada y el usuario será redirigido a la página autorizada después de la autorización. Cree un archivo ‘public / index.html’.
Ahora cree un archivo ‘public / success.html’ con el siguiente contenido.
Después de crear páginas web, ahora escribiremos código para autorizar a los usuarios a usar Google oauth. Cree un archivo ‘index.js’.
const express= require(‘express’)
const passport= require(‘passport’)
const path= require(‘path’)
const GoogleStrategy= require(‘passport-google-oauth20’).Strategy
const app= express()
// defining parameters
// client id is the parameter that we will get from the google developer console
CLIENT_ID=”xxxxxxx”
// client secret will also be taken from the google developer console
CLIENT_SECRET=”xxxxx”
// user will be redirected to the CALLBACK_URL after authorization
CALLBACK_URL=”http://localhost:8000/authorized”
// port number must be the same as defined in the developer console
PORT=8000
// configuring passport middleware
app.use(passport.initialize())
app.use(passport.session())
passport.serializeUser( function(id, done) {
done(null, id)
})
passport.deserializeUser( function(id, done) {
done(null, id)
})
// following middleware will run whenever passport. Authenticate method is called and returns different parameters defined in the scope.
passport.use(new GoogleStrategy({
clientID: CLIENT_ID,
clientSecret: CLIENT_SECRET,
callbackURL: CALLBACK_URL
},
async function(accessToken, refreshToken, profile, email, cb) {
return cb(null, email.id)
}
))
// serving home page for the application
app.get(‘/’, (req, res)=>
{
res.sendFile(path.join(__dirname + ‘/public/index.html’))
})
// serving success page for the application
app.get(‘/success’, (req, res)=>
{
res.sendFile(path.join(__dirname + ‘/public/success.html’))
})
// user will be redirected to the google auth page whenever hits the ‘/google/auth’ route.
app.get(‘/google/auth’,
passport.authenticate(‘google’, {scope: [‘profile’, ‘email’]})
)
// authentication failure redirection is defined in the following route
app.get(‘/authorized’,
passport.authenticate(‘google’, {failureRedirect: ‘/’}),
(req, res)=>
{
res.redirect(‘/success’)
}
)
// running server
app.listen(PORT, ()=>
{
console.log(“Server is running on Port ” + PORT)
})
Prueba de Google OAuth
Ahora nuestra aplicación está lista y podemos probar si autoriza a los usuarios que usan google oauth. Vaya al directorio raíz y ejecute la aplicación.
Ahora ingrese la URL de su aplicación en el navegador.
Muestra la página de inicio con una etiqueta de anclaje.
Cuando hacemos clic en ‘Autorizar aquí’, se redireccionará a la página de Google Oauth.
El nombre de su aplicación “Prueba” se muestra en la página de autenticación de Google. Cuando autorice su cuenta, lo llevará a la página autorizada.
Conclusión
Administrar nombres de usuario y contraseñas para diferentes aplicaciones web no es una tarea feliz para los usuarios. Muchos usuarios abandonan su aplicación web sin registrar su cuenta solo porque no quieren administrar las credenciales. El proceso de autorización en su aplicación web o sitio web se puede simplificar mediante el uso de servicios de terceros como Google, Facebook, etc. Estos servicios autorizan a los usuarios en su nombre, y el usuario no necesita administrar las credenciales por separado. En este artículo, hemos implementado el protocolo oauth de Google para autorizar a los usuarios a utilizar Node.js.