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
