Introducció

En aquest tema, explorarem els conceptes d'autenticació i autorització en el context dels microserveis. Aquests dos aspectes són fonamentals per garantir la seguretat de les aplicacions distribuïdes. Aprendrem sobre els diferents mètodes d'autenticació, com gestionar les identitats dels usuaris i com assegurar que només els usuaris autoritzats puguin accedir a certs recursos.

Conceptes Bàsics

Autenticació

L'autenticació és el procés de verificar la identitat d'un usuari o sistema. En altres paraules, és el procés de confirmar que algú és qui diu ser. Alguns dels mètodes comuns d'autenticació inclouen:

  • Autenticació basada en contrasenya: L'usuari proporciona un nom d'usuari i una contrasenya.
  • Autenticació de dos factors (2FA): A més de la contrasenya, es requereix un segon factor, com un codi enviat al telèfon mòbil.
  • Autenticació basada en certificats: Utilitza certificats digitals per verificar la identitat.
  • OAuth: Un protocol que permet a les aplicacions obtenir accés limitat als comptes d'usuari en un servei HTTP.

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. Els mètodes comuns d'autorització inclouen:

  • Llistes de control d'accés (ACL): Defineixen quins usuaris o grups d'usuaris tenen permís per accedir a certs recursos.
  • Roles-Based Access Control (RBAC): Assigna permisos a rols específics, i els usuaris són assignats a aquests rols.
  • Attribute-Based Access Control (ABAC): Utilitza atributs dels usuaris, recursos i entorn per determinar els permisos.

Implementació en Microserveis

Autenticació en Microserveis

En una arquitectura de microserveis, l'autenticació pot ser gestionada de diverses maneres. Una de les més comunes és utilitzar un servei d'autenticació centralitzat. Aquest servei pot emetre tokens d'autenticació que els altres microserveis poden verificar. Alguns dels enfocaments inclouen:

  • JSON Web Tokens (JWT): Els tokens JWT són àmpliament utilitzats per a l'autenticació en microserveis. Són segurs, fàcils de verificar i poden contenir informació addicional sobre l'usuari.
  • OAuth 2.0: OAuth 2.0 és un protocol d'autorització que permet a les aplicacions obtenir accés limitat als comptes d'usuari en un servei HTTP.

Exemple de JWT

import jwt
import datetime

# Generar un token JWT
def generar_token(usuario_id):
    payload = {
        'usuario_id': usuario_id,
        'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
    }
    token = jwt.encode(payload, 'secret_key', algorithm='HS256')
    return token

# Verificar un token JWT
def verificar_token(token):
    try:
        payload = jwt.decode(token, 'secret_key', algorithms=['HS256'])
        return payload['usuario_id']
    except jwt.ExpiredSignatureError:
        return None
    except jwt.InvalidTokenError:
        return None

Autorització en Microserveis

L'autorització en microserveis pot ser gestionada de manera descentralitzada. Cada microservei pot tenir la seva pròpia lògica d'autorització, o es pot utilitzar un servei centralitzat per gestionar els permisos. Alguns enfocaments inclouen:

  • RBAC: Assignar rols als usuaris i definir permisos per a cada rol.
  • ABAC: Utilitzar atributs per determinar els permisos.

Exemple de RBAC

# Definir rols i permisos
roles_permisos = {
    'admin': ['crear', 'llegir', 'actualitzar', 'eliminar'],
    'usuari': ['llegir']
}

# Verificar permisos
def verificar_permis(usuario_rol, permis):
    if permis in roles_permisos.get(usuario_rol, []):
        return True
    return False

# Exemple d'ús
usuario_rol = 'admin'
permis = 'crear'
if verificar_permis(usuario_rol, permis):
    print("Permís concedit")
else:
    print("Permís denegat")

Exercicis Pràctics

Exercici 1: Implementar Autenticació amb JWT

  1. Implementa una funció per generar tokens JWT per a usuaris autenticats.
  2. Implementa una funció per verificar tokens JWT i extreure la informació de l'usuari.

Exercici 2: Implementar Autorització amb RBAC

  1. Defineix rols i permisos per a una aplicació fictícia.
  2. Implementa una funció per verificar si un usuari amb un rol específic té permís per realitzar una acció determinada.

Solucions

Solució Exercici 1

import jwt
import datetime

def generar_token(usuario_id):
    payload = {
        'usuario_id': usuario_id,
        '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['usuario_id']
    except jwt.ExpiredSignatureError:
        return None
    except jwt.InvalidTokenError:
        return None

Solució Exercici 2

roles_permisos = {
    'admin': ['crear', 'llegir', 'actualitzar', 'eliminar'],
    'usuari': ['llegir']
}

def verificar_permis(usuario_rol, permis):
    if permis in roles_permisos.get(usuario_rol, []):
        return True
    return False

# Exemple d'ús
usuario_rol = 'admin'
permis = 'crear'
if verificar_permis(usuario_rol, permis):
    print("Permís concedit")
else:
    print("Permís denegat")

Conclusió

En aquesta secció, hem après sobre els conceptes d'autenticació i autorització, així com les seves implementacions en una arquitectura de microserveis. Hem vist exemples pràctics d'ús de JWT per a l'autenticació i RBAC per a l'autorització. Aquests conceptes són fonamentals per garantir la seguretat de les aplicacions distribuïdes i assegurar que només els usuaris autoritzats puguin accedir als recursos adequats.

© Copyright 2024. Tots els drets reservats