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:

  1. Configurar un servei d'enviament de SMS (ex. Twilio).
  2. Modificar el procés d'autenticació per incloure l'enviament d'un codi de verificació.
  3. 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.

© Copyright 2024. Tots els drets reservats