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
-
Autenticació bàsica (Basic Authentication)
- Utilitza un nom d'usuari i una contrasenya codificats en Base64.
- Exemple d'encapçalament HTTP:
Authorization: Basic dXNlcjpwYXNzd29yZA==
-
Tokens d'API
- Utilitza un token únic generat per identificar l'usuari.
- Exemple d'encapçalament HTTP:
Authorization: Bearer <token>
-
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.
-
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
-
Llistes de control d'accés (ACL)
- Defineixen quins usuaris o grups d'usuaris tenen accés a certs recursos.
-
Roles i permisos
- Assignen permisos específics a diferents rols, i els usuaris són assignats a aquests rols.
-
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
- Crea una funció que verifiqui un nom d'usuari i una contrasenya codificats en Base64.
- 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
- Defineix un conjunt de rols i permisos.
- 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.
Curs de REST API: Principis de Disseny i Desenvolupament d'APIs RESTful
Mòdul 1: Introducció a les APIs RESTful
Mòdul 2: Disseny d'APIs RESTful
- Principis de disseny d'APIs RESTful
- Recursos i URIs
- Mètodes HTTP
- Codis d'estat HTTP
- Versionat d'APIs
- Documentació d'APIs
Mòdul 3: Desenvolupament d'APIs RESTful
- Configuració de l'entorn de desenvolupament
- Creació d'un servidor bàsic
- Gestió de peticions i respostes
- Autenticació i autorització
- Gestió d'errors
- Proves i validació
Mòdul 4: Bones Pràctiques i Seguretat
- Bones pràctiques en el disseny d'APIs
- Seguretat en APIs RESTful
- Rate limiting i throttling
- CORS i polítiques de seguretat
Mòdul 5: Eines i Frameworks
- Postman per a proves d'APIs
- Swagger per a documentació
- Frameworks populars per a APIs RESTful
- Integració contínua i desplegament