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

  1. Comprendre els conceptes d'autenticació i autorització.
  2. Conèixer els diferents mètodes d'autenticació.
  3. Aprendre sobre els mecanismes d'autorització.
  4. 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ó

  1. Contrasenyes: El mètode més comú, però també el més vulnerable si no es gestiona correctament.
  2. Certificats Digitals: Utilitzen criptografia per verificar la identitat.
  3. Autenticació de Dos Factors (2FA): Combina dos mètodes diferents per augmentar la seguretat.
  4. 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ó

  1. Llistes de Control d'Accés (ACL): Defineixen permisos específics per a cada usuari o grup.
  2. Rols Basats en l'Accés (RBAC): Assignen permisos basats en rols predefinits.
  3. 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

npm install express jsonwebtoken body-parser

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

  1. Crea una aplicació Node.js que permeti als usuaris autenticar-se amb noms d'usuari i contrasenyes.
  2. Genera un token JWT per als usuaris autenticats.
  3. 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

  1. Afegeix rols d'usuari a l'aplicació Node.js.
  2. Implementa una funció d'autorització que permeti o denegui l'accés a les rutes basades en els rols dels usuaris.
  3. 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

  1. Autenticació: Verificació de la identitat d'un usuari o servei.
  2. Autorització: Determinació dels permisos d'accés per a un usuari autenticat.
  3. Mètodes d'Autenticació: Contrasenyes, certificats digitals, 2FA, biometria.
  4. Mètodes d'Autorització: ACL, RBAC, ABAC.
  5. 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.

© Copyright 2024. Tots els drets reservats