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
