Blog Azure GitHub

Migración de usuarios a Azure AD B2C: Guía técnica desde GitHub

Migración de usuarios a Azure AD B2C desde GitHub

Introducción

Migrar usuarios desde un proveedor de identidad existente hacia Azure AD B2C puede ser un desafío técnico, especialmente cuando se trata de preservar contraseñas y perfiles. El repositorio oficial en GitHub azure-ad-b2c/user-migration proporciona ejemplos prácticos para abordar este proceso de manera estructurada. En este artículo, exploraremos los aspectos técnicos más relevantes de esta solución y cómo implementarla en escenarios reales.

Note: Si deseas profundizar en cómo Microsoft utiliza tus datos en servicios como Azure AD B2C, revisa nuestro artículo sobre Actualizaciones en nuestra Declaración de Privacidad y Términos de Servicio.


Requisitos previos

Antes de comenzar, asegúrate de cumplir con los siguientes requisitos:

  1. Acceso a Azure AD B2C: Necesitarás una instancia configurada de Azure AD B2C.
  2. Conocimiento básico de REST APIs: Las operaciones de migración utilizan endpoints de API.
  3. Configuración de GitHub: Clona el repositorio azure-ad-b2c/user-migration para acceder a los ejemplos.
  4. Herramientas recomendadas:
    • Azure CLI
    • Postman o cualquier herramienta de prueba de APIs
    • Python 3.x (para ejecutar scripts de ejemplo)

Arquitectura de migración

El flujo de migración propuesto por el repositorio consta de tres pasos principales:

  1. Exportación de datos: Obtener los datos de usuario desde el proveedor de identidad actual.
  2. Transformación de datos: Convertir los datos al formato requerido por Azure AD B2C.
  3. Importación de datos: Crear usuarios en Azure AD B2C utilizando la API de Graph.

A continuación, detallamos cada paso con ejemplos prácticos.


Paso 1: Exportación de datos

El primer paso es extraer los datos de usuario desde tu proveedor de identidad actual. Supongamos que los datos están almacenados en una base de datos SQL. Puedes usar el siguiente script en Python para exportarlos:

import pyodbc
import csv

# Configuración de conexión a la base de datos
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=tu_servidor;DATABASE=tu_base_de_datos;UID=usuario;PWD=contraseña')
cursor = conn.cursor()

# Consulta para extraer usuarios
query = "SELECT username, email, password_hash FROM Users"
cursor.execute(query)

# Exportación a un archivo CSV
with open('usuarios_exportados.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['username', 'email', 'password_hash'])  # Encabezados
    for row in cursor.fetchall():
        writer.writerow(row)

print("Exportación completada. Archivo: usuarios_exportados.csv")

Warning: Asegúrate de que los datos sensibles, como hashes de contraseñas, estén protegidos durante el proceso de exportación.


Paso 2: Transformación de datos

Azure AD B2C requiere que los datos de usuario estén en un formato específico. Por ejemplo, los hashes de contraseñas deben ser compatibles con el algoritmo de tu política de identidad. Utiliza el siguiente script para transformar los datos exportados:

import csv

# Archivo de entrada y salida
input_file = 'usuarios_exportados.csv'
output_file = 'usuarios_transformados.csv'

def transformar_datos(row):
    # Ejemplo: Normalizar correos electrónicos y añadir un atributo adicional
    row['email'] = row['email'].lower()
    row['custom_attribute'] = 'valor_predeterminado'
    return row

# Transformación
with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', newline='', encoding='utf-8') as outfile:
    reader = csv.DictReader(infile)
    fieldnames = reader.fieldnames + ['custom_attribute']
    writer = csv.DictWriter(outfile, fieldnames=fieldnames)
    writer.writeheader()
    
    for row in reader:
        transformed_row = transformar_datos(row)
        writer.writerow(transformed_row)

print("Transformación completada. Archivo: usuarios_transformados.csv")

Paso 3: Importación de datos

Finalmente, utiliza la API de Microsoft Graph para crear usuarios en Azure AD B2C. Aquí tienes un ejemplo básico utilizando Python y la librería requests:

import requests
import csv

# Configuración de la API
tenant_id = 'tu_tenant_id'
client_id = 'tu_client_id'
client_secret = 'tu_client_secret'
graph_url = f'https://graph.microsoft.com/v1.0/{tenant_id}/users'

# Autenticación
def obtener_token():
    token_url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token'
    data = {
        'client_id': client_id,
        'client_secret': client_secret,
        'scope': 'https://graph.microsoft.com/.default',
        'grant_type': 'client_credentials'
    }
    response = requests.post(token_url, data=data)
    return response.json().get('access_token')

token = obtener_token()

# Importación de usuarios
with open('usuarios_transformados.csv', 'r', encoding='utf-8') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        user_data = {
            "accountEnabled": True,
            "displayName": row['username'],
            "mailNickname": row['username'],
            "userPrincipalName": row['email'],
            "passwordProfile": {
                "password": "ContraseñaTemporal123!",
                "forceChangePasswordNextSignIn": True
            }
        }
        headers = {
            'Authorization': f'Bearer {token}',
            'Content-Type': 'application/json'
        }
        response = requests.post(graph_url, json=user_data, headers=headers)
        if response.status_code == 201:
            print(f"Usuario {row['username']} creado exitosamente.")
        else:
            print(f"Error al crear usuario {row['username']}: {response.text}")

Note: Utiliza contraseñas temporales para los usuarios migrados y habilita la opción de cambio obligatorio en el próximo inicio de sesión.


Conclusión

La migración de usuarios a Azure AD B2C es un proceso técnico que requiere planificación y ejecución cuidadosa. El repositorio de GitHub azure-ad-b2c/user-migration proporciona ejemplos valiosos para simplificar esta tarea. Siguiendo los pasos descritos en este artículo, puedes realizar la migración de manera eficiente y segura.

Para explorar más sobre cómo GitHub impulsa la innovación en la nube, revisa los siguientes artículos relacionados:

Warning: Este artículo asume que ya tienes experiencia previa con Azure AD B2C y APIs REST. Si eres nuevo en estos temas, te recomendamos revisar la documentación oficial de Microsoft.