7.0 KiB
Configuración de Login con Microsoft (Azure AD)
Esta guía te ayudará a configurar el login con Microsoft junto con el login tradicional.
Parte 1: Configurar Aplicación en Azure AD
1.1 Crear App Registration en Azure Portal
- Ve a Azure Portal
- Busca "Azure Active Directory" o "Microsoft Entra ID"
- En el menú lateral, selecciona App registrations
- Clic en New registration
- Configura:
- Name:
Anexo76 - Supported account types:
- "Accounts in any organizational directory (Any Azure AD directory - Multitenant)"
- O "Accounts in any organizational directory and personal Microsoft accounts" si quieres permitir cuentas @outlook.com, @hotmail.com
- Redirect URI:
- Platform:
Web - URI:
http://localhost:8080/realms/master/broker/microsoft/endpoint
- Platform:
- Clic en Register
- Name:
1.2 Obtener Client ID y crear Client Secret
- En la página de tu aplicación, copia el Application (client) ID
- Ve a Certificates & secrets en el menú lateral
- Clic en New client secret
- Descripción:
keycloak-integration - Expires: Selecciona el tiempo que prefieras (ej: 24 months)
- Clic en Add
- IMPORTANTE: Copia el Value del secret inmediatamente (solo se muestra una vez)
1.3 Configurar API Permissions (Opcional pero recomendado)
- Ve a API permissions
- Deberías ver
Microsoft Graph>User.Read(Delegated) - esto es suficiente - Si quieres más información del usuario, agrega:
emailprofileopenid
Parte 2: Configurar Identity Provider en Keycloak
2.1 Agregar Microsoft como Identity Provider
- Abre Keycloak Admin Console: http://localhost:8080
- Login como admin
- Asegúrate de estar en el realm correcto (probablemente
master) - En el menú lateral, ve a Identity providers
- En el dropdown "Add provider", selecciona Microsoft
- Configura:
- Alias:
microsoft(o cualquier nombre que prefieras) - Display name:
Microsoft(esto es lo que verá el usuario) - Enabled: ON
- Store tokens: ON (opcional, para poder usar tokens de Microsoft después)
- Stored tokens readable: OFF
- Trust email: ON
- First login flow:
first broker login - Client ID: Pega el Application (client) ID de Azure
- Client Secret: Pega el client secret que copiaste
- Clic en Save
- Alias:
2.2 Configurar Mappers (Mapeo de atributos)
Después de guardar, configura los mappers para traer información del usuario de Microsoft:
- En la misma página del Identity Provider, ve a la pestaña Mappers
- Clic en Add mapper
Mapper 1: Email
- Name:
email - Sync mode override:
inherit - Mapper type:
Attribute Importer - Social profile JSON field path:
email - User attribute name:
email - Clic en Save
Mapper 2: First Name
- Name:
firstName - Mapper type:
Attribute Importer - Social profile JSON field path:
given_name - User attribute name:
firstName - Clic en Save
Mapper 3: Last Name
- Name:
lastName - Mapper type:
Attribute Importer - Social profile JSON field path:
family_name - User attribute name:
lastName - Clic en Save
Mapper 4: Username
- Name:
username - Mapper type:
Username Template Importer - Template:
${CLAIM.email} - Target:
BROKER_USERNAME - Clic en Save
2.3 Configurar Redirect URI en Azure (si es necesario)
Si usas un realm diferente a master, actualiza la Redirect URI en Azure:
- Formato:
http://localhost:8080/realms/{REALM_NAME}/broker/microsoft/endpoint - Para producción:
https://tu-dominio.com/realms/{REALM_NAME}/broker/microsoft/endpoint
Parte 3: Actualizar Frontend
El frontend necesita detectar y mostrar el botón de Microsoft. Keycloak proporciona esta información automáticamente.
3.1 Obtener Identity Providers disponibles
Tu frontend puede consultar los Identity Providers disponibles:
Endpoint de Keycloak:
GET http://localhost:8080/realms/master/broker-login/identity-providers
Esto retorna algo como:
[
{
"alias": "microsoft",
"displayName": "Microsoft",
"providerId": "microsoft",
"enabled": true
}
]
3.2 URL para iniciar flujo de Microsoft
Para iniciar el login con Microsoft, redirige al usuario a:
http://localhost:8080/realms/master/broker/microsoft/login?client_id=anexo76-frontend&redirect_uri=http://localhost:5173/auth/callback
Parámetros:
client_id: Tu client ID de frontend en Keycloak (anexo76-frontend)redirect_uri: URL a la que Keycloak redirigirá después del login exitosoresponse_type:code(para authorization code flow)scope:openid profile email
3.3 Manejar el Callback
Después del login con Microsoft, Keycloak redirige a tu redirect_uri con un code:
http://localhost:5173/auth/callback?code=abc123...&session_state=xyz...
Tu frontend debe:
- Extraer el
codedel query string - Intercambiar el
codepor tokens llamando a tu backend - Tu backend llama a Keycloak para obtener los tokens
Parte 4: Testing
4.1 Verificar que Microsoft aparece en la página de login
Ve a:
http://localhost:8080/realms/master/protocol/openid-connect/auth?client_id=anexo76-frontend&redirect_uri=http://localhost:5173&response_type=code
Deberías ver:
- Formulario de login tradicional (usuario/contraseña)
- Botón o link de "Microsoft" para login social
4.2 Probar el flujo completo
- Haz clic en el botón de Microsoft
- Serás redirigido a Microsoft login
- Ingresa credenciales de Microsoft
- Microsoft redirige a Keycloak
- Keycloak crea/actualiza el usuario y redirige a tu app
- Tu app obtiene el token y autentica al usuario
Notas Importantes
Multi-tenant con Microsoft
Si tu app es multi-tenant y quieres que cada tenant use su propio Azure AD:
- Crea múltiples Identity Providers en Keycloak (uno por tenant)
- Usa aliases diferentes:
microsoft-tenant1,microsoft-tenant2 - En el frontend, muestra el botón correcto según el tenant
Asignación automática de tenant
Cuando un usuario se loguea por primera vez con Microsoft, puedes:
- Usar un mapper para asignar atributos basados en el dominio del email
- Configurar "Default Tenant" en tu backend si el email es de un dominio conocido
- Solicitar al usuario que seleccione su tenant en el primer login
Producción
Para producción, recuerda:
- Actualizar las Redirect URIs en Azure con tu dominio real
- Usar HTTPS
- Configurar correctamente los Web Origins en Keycloak
- Usar variables de entorno para las configuraciones
Troubleshooting
Error: redirect_uri_mismatch
- Verifica que la URI en Azure coincida exactamente con la de Keycloak
- Formato:
https://tu-dominio.com/realms/{realm}/broker/{alias}/endpoint
Usuario se crea pero no tiene tenant_id
- Configura un mapper en Keycloak para asignar tenant_id automáticamente
- O maneja esto en tu backend en el primer login
No aparece el botón de Microsoft
- Verifica que el Identity Provider esté habilitado en Keycloak
- Revisa que el Display Name esté configurado