Introducció
En els sistemes distribuïts, la seguretat és un aspecte fonamental per garantir que només els usuaris i serveis autoritzats puguin accedir a les dades i recursos. Aquest mòdul se centra en dos conceptes clau de la seguretat: l'autenticació i l'autorització.
Objectius del Mòdul
- Comprendre els conceptes d'autenticació i autorització.
- Conèixer els diferents mètodes d'autenticació.
- Aprendre sobre els mecanismes d'autorització.
- Implementar exemples pràctics d'autenticació i autorització.
Conceptes Bàsics
Autenticació
L'autenticació és el procés de verificar la identitat d'un usuari o servei. Això es fa normalment mitjançant credencials com ara noms d'usuari i contrasenyes, però també pot incloure mètodes més avançats com l'autenticació de dos factors (2FA) o l'ús de certificats digitals.
Mètodes d'Autenticació
- Contrasenyes: El mètode més comú, però també el més vulnerable si no es gestiona correctament.
- Certificats Digitals: Utilitzen criptografia per verificar la identitat.
- Autenticació de Dos Factors (2FA): Combina dos mètodes diferents per augmentar la seguretat.
- Biometria: Utilitza característiques físiques com empremtes digitals o reconeixement facial.
Autorització
L'autorització és el procés de determinar si un usuari autenticat té permís per accedir a un recurs específic o realitzar una acció determinada. Això es gestiona normalment mitjançant polítiques d'accés i rols d'usuari.
Mètodes d'Autorització
- Llistes de Control d'Accés (ACL): Defineixen permisos específics per a cada usuari o grup.
- Rols Basats en l'Accés (RBAC): Assignen permisos basats en rols predefinits.
- Polítiques Basades en Atributs (ABAC): Utilitzen atributs d'usuari i de recurs per determinar l'accés.
Implementació Pràctica
Exemple d'Autenticació amb JWT (JSON Web Tokens)
Els JSON Web Tokens (JWT) són una manera popular d'implementar autenticació en aplicacions distribuïdes. A continuació es mostra un exemple bàsic d'autenticació amb JWT utilitzant Node.js i Express.
Instal·lació de Dependències
Codi d'Exemple
const express = require('express'); const jwt = require('jsonwebtoken'); const bodyParser = require('body-parser'); const app = express(); const port = 3000; const secretKey = 'secretKey'; app.use(bodyParser.json()); // Ruta per autenticar l'usuari i generar un token app.post('/login', (req, res) => { const { username, password } = req.body; // Validació bàsica d'usuari if (username === 'user' && password === 'password') { const token = jwt.sign({ username }, secretKey, { expiresIn: '1h' }); res.json({ token }); } else { res.status(401).send('Credencials incorrectes'); } }); // Middleware per verificar el token const authenticateJWT = (req, res, next) => { const token = req.headers.authorization; if (token) { jwt.verify(token, secretKey, (err, user) => { if (err) { return res.sendStatus(403); } req.user = user; next(); }); } else { res.sendStatus(401); } }; // Ruta protegida app.get('/protected', authenticateJWT, (req, res) => { res.send('Això és una ruta protegida'); }); app.listen(port, () => { console.log(`Servidor en funcionament a http://localhost:${port}`); });
Exemple d'Autorització amb RBAC
A continuació es mostra un exemple bàsic d'autorització basada en rols (RBAC) utilitzant Node.js i Express.
Codi d'Exemple
const roles = { admin: ['read', 'write', 'delete'], user: ['read'] }; const authorize = (role, action) => { return (req, res, next) => { const userRole = req.user.role; if (roles[userRole] && roles[userRole].includes(action)) { next(); } else { res.status(403).send('Accés denegat'); } }; }; // Ruta protegida amb autorització basada en rols app.get('/admin', authenticateJWT, authorize('admin', 'read'), (req, res) => { res.send('Això és una ruta protegida per a administradors'); });
Exercicis Pràctics
Exercici 1: Implementar Autenticació amb JWT
- Crea una aplicació Node.js que permeti als usuaris autenticar-se amb noms d'usuari i contrasenyes.
- Genera un token JWT per als usuaris autenticats.
- Crea una ruta protegida que només sigui accessible per als usuaris autenticats.
Solució
Segueix l'exemple proporcionat anteriorment per implementar aquest exercici.
Exercici 2: Implementar Autorització Basada en Rols
- Afegeix rols d'usuari a l'aplicació Node.js.
- Implementa una funció d'autorització que permeti o denegui l'accés a les rutes basades en els rols dels usuaris.
- Crea rutes protegides que només siguin accessibles per a certs rols.
Solució
Segueix l'exemple proporcionat anteriorment per implementar aquest exercici.
Conclusió
En aquest mòdul, hem après els conceptes bàsics d'autenticació i autorització, així com diferents mètodes per implementar-los en sistemes distribuïts. Hem vist exemples pràctics d'autenticació amb JWT i autorització basada en rols (RBAC). Aquests conceptes són fonamentals per garantir la seguretat en qualsevol sistema distribuït.
Resum
- Autenticació: Verificació de la identitat d'un usuari o servei.
- Autorització: Determinació dels permisos d'accés per a un usuari autenticat.
- Mètodes d'Autenticació: Contrasenyes, certificats digitals, 2FA, biometria.
- Mètodes d'Autorització: ACL, RBAC, ABAC.
- Exemples Pràctics: Implementació d'autenticació amb JWT i autorització basada en rols.
Amb aquests coneixements, estàs preparat per implementar mesures de seguretat efectives en sistemes distribuïts.
Curs d'Arquitectures Distribuïdes
Mòdul 1: Introducció als Sistemes Distribuïts
- Conceptes Bàsics de Sistemes Distribuïts
- Models de Sistemes Distribuïts
- Avantatges i Desafiaments dels Sistemes Distribuïts