Introducció

En aquest tema, explorarem els conceptes d'autenticació i autorització, que són fonamentals per garantir la seguretat en qualsevol arquitectura tecnològica. Aquests processos asseguren que només els usuaris legítims puguin accedir als recursos i que només puguin realitzar les accions permeses.

Conceptes Clau

Autenticació

L'autenticació és el procés de verificar la identitat d'un usuari o sistema. Això es fa mitjançant diverses tècniques, com ara contrasenyes, certificats digitals, biometria, etc.

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. Biometria: Empremtes dactilars, reconeixement facial, etc.
  4. Autenticació de Doble Factor (2FA): Combina dos mètodes diferents per augmentar la seguretat.

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.

Models d'Autorització:

  1. Control d'Accés Basat en Rols (RBAC): Assigna permisos a rols específics en lloc d'usuaris individuals.
  2. Control d'Accés Basat en Atributs (ABAC): Utilitza atributs d'usuaris, recursos i entorn per determinar els permisos.
  3. Listes de Control d'Accés (ACL): Defineixen permisos específics per a cada usuari o grup d'usuaris.

Implementació d'Autenticació i Autorització

Autenticació

Exemple de Codi: Autenticació amb JWT (JSON Web Tokens)

import jwt
import datetime

# Clau secreta per signar el token
SECRET_KEY = 'clau_secreta'

def generar_token(usuari):
    payload = {
        'usuari': usuari,
        'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
    }
    token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
    return token

def verificar_token(token):
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
        return payload['usuari']
    except jwt.ExpiredSignatureError:
        return 'Token expirat'
    except jwt.InvalidTokenError:
        return 'Token invàlid'

# Generar un token per a l'usuari 'johndoe'
token = generar_token('johndoe')
print(f'Token generat: {token}')

# Verificar el token
usuari = verificar_token(token)
print(f'Usuari autenticat: {usuari}')

Autorització

Exemple de Codi: Control d'Accés Basat en Rols (RBAC)

# Definició de rols i permisos
ROLS = {
    'admin': ['crear', 'llegir', 'actualitzar', 'eliminar'],
    'usuari': ['llegir']
}

# Assignació de rols a usuaris
USUARIS = {
    'johndoe': 'admin',
    'janedoe': 'usuari'
}

def comprovar_permís(usuari, acció):
    rol = USUARIS.get(usuari)
    if rol and acció in ROLS.get(rol, []):
        return True
    return False

# Comprovar si 'johndoe' pot 'crear'
if comprovar_permís('johndoe', 'crear'):
    print('Permís concedit')
else:
    print('Permís denegat')

# Comprovar si 'janedoe' pot 'crear'
if comprovar_permís('janedoe', 'crear'):
    print('Permís concedit')
else:
    print('Permís denegat')

Exercicis Pràctics

Exercici 1: Implementar Autenticació de Doble Factor (2FA)

Descripció: Implementa un sistema d'autenticació de doble factor que utilitzi contrasenyes i codis OTP (One-Time Password).

Pistes:

  • Utilitza una llibreria com pyotp per generar i verificar codis OTP.
  • Combina la verificació de contrasenyes amb la verificació de codis OTP.

Exercici 2: Ampliar el Model RBAC

Descripció: Ampliar l'exemple de RBAC per incloure més rols i permisos, i implementar una funció per afegir nous rols i permisos dinàmicament.

Pistes:

  • Defineix una funció per afegir nous rols i permisos.
  • Actualitza la funció comprovar_permís per gestionar els nous rols i permisos.

Errors Comuns i Consells

Errors Comuns

  1. No encriptar contrasenyes: Assegura't d'encriptar les contrasenyes abans de guardar-les a la base de dades.
  2. Tokens no segurs: Utilitza claus secretes fortes i mantingues-les segures.
  3. Permisos massa amplis: Assigna permisos mínims necessaris per reduir el risc de seguretat.

Consells

  1. Utilitza llibreries provades: Utilitza llibreries de seguretat provades i mantingudes per la comunitat.
  2. Revisa regularment els permisos: Realitza auditories periòdiques dels permisos assignats.
  3. Implementa logs de seguretat: Registra tots els intents d'autenticació i accés per detectar activitats sospitoses.

Conclusió

En aquesta secció, hem après els conceptes fonamentals d'autenticació i autorització, així com com implementar-los en una arquitectura tecnològica. Aquests processos són crucials per garantir la seguretat dels sistemes i protegir els recursos contra accessos no autoritzats. Amb els exercicis pràctics, podràs aplicar aquests conceptes i millorar la seguretat de les teves aplicacions.

© Copyright 2024. Tots els drets reservats