En aquest tema, explorarem els conceptes d'autenticació i autorització en el context de les APIs RESTful. Aquests dos aspectes són fonamentals per garantir la seguretat i el control d'accés a les dades i funcionalitats de la teva API.

Què és l'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.

Mètodes d'autenticació comuns

  1. Autenticació bàsica (Basic Authentication)

    • Utilitza un nom d'usuari i una contrasenya codificats en Base64.
    • Exemple d'encapçalament HTTP:
      Authorization: Basic dXNlcjpwYXNzd29yZA==
      
  2. Tokens d'API

    • Utilitza un token únic generat per identificar l'usuari.
    • Exemple d'encapçalament HTTP:
      Authorization: Bearer <token>
      
  3. OAuth 2.0

    • Un dels estàndards més utilitzats per a l'autenticació i autorització.
    • Permet a les aplicacions obtenir accés limitat a comptes d'usuari en un servei HTTP.
  4. JSON Web Tokens (JWT)

    • Utilitza tokens JSON per transmetre informació entre les parts de manera segura.
    • Exemple d'encapçalament HTTP:
      Authorization: Bearer <jwt>
      

Exemple pràctic: Autenticació amb JWT

1. Generació del JWT

import jwt
import datetime

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

2. Verificació del JWT

def verify_jwt(token):
    try:
        payload = jwt.decode(token, 'secret_key', algorithms=['HS256'])
        return payload['user_id']
    except jwt.ExpiredSignatureError:
        return 'Token has expired'
    except jwt.InvalidTokenError:
        return 'Invalid token'

Què és l'autorització?

L'autorització és el procés de determinar si un usuari autenticat té permís per accedir a un recurs o realitzar una acció específica.

Mètodes d'autorització comuns

  1. Llistes de control d'accés (ACL)

    • Defineixen quins usuaris o grups d'usuaris tenen accés a certs recursos.
  2. Roles i permisos

    • Assignen permisos específics a diferents rols, i els usuaris són assignats a aquests rols.
  3. Polítiques basades en atributs (ABAC)

    • Utilitzen atributs d'usuari, recursos i entorn per determinar l'accés.

Exemple pràctic: Autorització basada en rols

1. Definició de rols i permisos

roles_permissions = {
    'admin': ['read', 'write', 'delete'],
    'user': ['read', 'write'],
    'guest': ['read']
}

2. Verificació de permisos

def check_permission(role, action):
    if action in roles_permissions.get(role, []):
        return True
    return False

Exercicis pràctics

Exercici 1: Implementar autenticació bàsica

  1. Crea una funció que verifiqui un nom d'usuari i una contrasenya codificats en Base64.
  2. Retorna un missatge d'èxit si les credencials són correctes, o un missatge d'error si no ho són.

Exercici 2: Implementar autorització basada en rols

  1. Defineix un conjunt de rols i permisos.
  2. Crea una funció que verifiqui si un usuari amb un rol específic té permís per realitzar una acció determinada.

Solucions

Solució a l'exercici 1

import base64

def basic_auth(encoded_credentials):
    decoded_credentials = base64.b64decode(encoded_credentials).decode('utf-8')
    username, password = decoded_credentials.split(':')
    if username == 'user' and password == 'password':
        return 'Authentication successful'
    return 'Authentication failed'

Solució a l'exercici 2

roles_permissions = {
    'admin': ['read', 'write', 'delete'],
    'user': ['read', 'write'],
    'guest': ['read']
}

def check_permission(role, action):
    if action in roles_permissions.get(role, []):
        return 'Permission granted'
    return 'Permission denied'

Resum

En aquesta secció, hem après sobre els conceptes d'autenticació i autorització, així com els mètodes comuns per implementar-los en APIs RESTful. Hem vist exemples pràctics d'autenticació amb JWT i autorització basada en rols, i hem practicat amb exercicis per reforçar aquests conceptes. Aquests coneixements són essencials per garantir la seguretat i el control d'accés a les teves APIs.

© Copyright 2024. Tots els drets reservats