Introducció
La gestió d'identitats és un component crític en la seguretat dels sistemes distribuïts. Es refereix al conjunt de processos i tecnologies utilitzades per gestionar la identitat digital dels usuaris i controlar l'accés als recursos del sistema. Aquest tema cobreix els conceptes bàsics, les tecnologies clau i les millors pràctiques per implementar una gestió d'identitats efectiva.
Conceptes Bàsics
Identitat Digital
- Definició: Una identitat digital és una representació electrònica de la informació d'un individu o entitat dins d'un sistema.
- Components:
- Credencials: Informació utilitzada per autenticar la identitat (ex. nom d'usuari i contrasenya).
- Atributs: Informació associada a la identitat (ex. nom complet, adreça de correu electrònic).
Cicle de Vida de la Identitat
- Creació: Procés d'assignació d'una nova identitat digital.
- Gestió: Actualització i manteniment de les identitats existents.
- Eliminació: Retirada d'una identitat quan ja no és necessària.
Tecnologies Clau
Directori d'Usuaris
- LDAP (Lightweight Directory Access Protocol): Protocol utilitzat per accedir i mantenir serveis de directori distribuïts.
- Active Directory: Servei de directori desenvolupat per Microsoft per a la gestió d'identitats i recursos en xarxes Windows.
Single Sign-On (SSO)
- Definició: Mecanisme que permet als usuaris autenticar-se una sola vegada per accedir a múltiples aplicacions.
- Avantatges:
- Reducció de la fatiga de contrasenyes.
- Millora de l'experiència de l'usuari.
- Simplificació de la gestió de credencials.
Federació d'Identitats
- Definició: Procés de compartir identitats entre diferents sistemes o organitzacions.
- Protocols:
- SAML (Security Assertion Markup Language): Estàndard per a l'intercanvi d'informació d'autenticació i autorització.
- OAuth: Protocol per a l'autorització segura entre aplicacions.
Millors Pràctiques
Autenticació Multifactor (MFA)
- Definició: Mètode d'autenticació que requereix més d'un factor per verificar la identitat de l'usuari.
- Factors:
- Coneixement: Alguna cosa que l'usuari sap (ex. contrasenya).
- Posseïment: Alguna cosa que l'usuari té (ex. telèfon mòbil).
- Inherència: Alguna cosa que l'usuari és (ex. empremta digital).
Gestió de Contrasenyes
- Polítiques de Contrasenyes: Establir requisits per a la creació de contrasenyes segures (ex. longitud mínima, complexitat).
- Emmagatzematge Segur: Utilitzar tècniques de hash i sal per emmagatzemar contrasenyes de manera segura.
Monitoratge i Auditoria
- Registre d'Activitats: Mantenir registres detallats de les activitats d'autenticació i autorització.
- Auditoria Regular: Realitzar auditories periòdiques per assegurar-se que les polítiques de seguretat es compleixen.
Exemples Pràctics
Implementació de SSO amb OAuth
from flask import Flask, redirect, url_for, session from authlib.integrations.flask_client import OAuth app = Flask(__name__) app.secret_key = 'random_secret_key' oauth = OAuth(app) # Configuració del proveïdor OAuth (ex. Google) google = oauth.register( name='google', client_id='your_client_id', client_secret='your_client_secret', access_token_url='https://accounts.google.com/o/oauth2/token', authorize_url='https://accounts.google.com/o/oauth2/auth', client_kwargs={'scope': 'openid profile email'} ) @app.route('/') def home(): return 'Benvingut a l'aplicació!' @app.route('/login') def login(): redirect_uri = url_for('authorize', _external=True) return google.authorize_redirect(redirect_uri) @app.route('/authorize') def authorize(): token = google.authorize_access_token() user_info = google.parse_id_token(token) session['user'] = user_info return redirect('/') if __name__ == '__main__': app.run()
Exercici Pràctic
Objectiu: Implementar un sistema d'autenticació multifactor (MFA) utilitzant contrasenyes i codis de verificació enviats per SMS.
Passos:
- Configurar un servei d'enviament de SMS (ex. Twilio).
- Modificar el procés d'autenticació per incloure l'enviament d'un codi de verificació.
- Verificar el codi introduït per l'usuari abans de permetre l'accés.
Solució:
from flask import Flask, request, redirect, url_for, session from twilio.rest import Client import random app = Flask(__name__) app.secret_key = 'random_secret_key' # Configuració de Twilio account_sid = 'your_account_sid' auth_token = 'your_auth_token' twilio_client = Client(account_sid, auth_token) @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # Verificar les credencials de l'usuari (ex. consultar una base de dades) if username == 'user' and password == 'pass': verification_code = random.randint(100000, 999999) session['verification_code'] = verification_code # Enviar el codi de verificació per SMS twilio_client.messages.create( body=f'El teu codi de verificació és {verification_code}', from_='+1234567890', to='+0987654321' ) return redirect(url_for('verify')) return ''' <form method="post"> Nom d'usuari: <input type="text" name="username"><br> Contrasenya: <input type="password" name="password"><br> <input type="submit" value="Iniciar Sessió"> </form> ''' @app.route('/verify', methods=['GET', 'POST']) def verify(): if request.method == 'POST': code = request.form['code'] if int(code) == session.get('verification_code'): return 'Autenticació completada!' else: return 'Codi de verificació incorrecte.' return ''' <form method="post"> Codi de verificació: <input type="text" name="code"><br> <input type="submit" value="Verificar"> </form> ''' if __name__ == '__main__': app.run()
Resum
En aquesta secció, hem explorat els conceptes bàsics de la gestió d'identitats, les tecnologies clau com LDAP, SSO i federació d'identitats, així com les millors pràctiques per assegurar una gestió d'identitats efectiva. També hem vist exemples pràctics d'implementació de SSO amb OAuth i autenticació multifactor amb SMS. La gestió d'identitats és essencial per garantir la seguretat i l'eficiència en sistemes distribuïts, i seguir aquestes pràctiques ajudarà a protegir els recursos i la informació sensible.
Curs d'Arquitectures Distribuïdes
Mòdul 1: Introducció als Sistemes Distribuïts
- Conceptes Bàsics de Sistemes Distribuïts
- Models de Sistemes Distribuïts
- Avantatges i Desafiaments dels Sistemes Distribuïts