# ✅ Verificar Configuración de Microsoft en Keycloak

## Paso 1: Verificar si Microsoft está configurado

Abre tu navegador y ve a:

```
http://localhost:8080/admin/master/console/#/master/identity-providers
```

Login: `admin` / `admin`

### ¿Qué deberías ver?

Si Microsoft está configurado, verás en la lista de Identity Providers:

- ✅ **microsoft** (o el alias que hayas usado)
- Con estado: **Enabled** ✅

### Si NO ves "microsoft" en la lista:

**¡Necesitas configurarlo!** Sigue estos pasos:

---

## Paso 2: Configurar Microsoft en Keycloak (SI NO ESTÁ CONFIGURADO)

### 2.1 Crear App en Azure AD PRIMERO

Antes de configurar Keycloak, necesitas una aplicación en Azure:

1. Ve a [Azure Portal](https://portal.azure.com)
2. Busca **Azure Active Directory** o **Microsoft Entra ID**
3. **App registrations** → **New registration**
4. Configura:

   - **Name**: `Anexo76`
   - **Supported account types**: `Accounts in any organizational directory (Any Azure AD - Multitenant)`
   - **Redirect URI**:
     - Platform: `Web`
     - URI: `http://localhost:8080/realms/master/broker/microsoft/endpoint`
   - Click **Register**
5. **Copia el Application (client) ID** - lo necesitarás
6. Ve a **Certificates & secrets** → **New client secret**

   - Descripción: `keycloak`
   - Expira: 24 meses
   - Click **Add**
   - **¡COPIA EL SECRET VALUE AHORA!** (solo se muestra una vez)

### 2.2 Agregar Microsoft a Keycloak

1. En Keycloak Admin Console: http://localhost:8080
2. Login: `admin` / `admin`
3. Menú lateral: **Identity providers**
4. Dropdown: **Add provider** → Selecciona **Microsoft**
5. Configura:

```
Alias: microsoft
Display name: Microsoft
Enabled: ON ✅
Store tokens: ON ✅
Trust email: ON ✅
First login flow: first broker login

Client ID: [PEGA TU APPLICATION ID DE AZURE]
Client Secret: [PEGA TU SECRET DE AZURE]
```

6. Click **Save**
7. Ve a la pestaña **Mappers** y agrega estos 4 mappers:

**Mapper 1: email**

```
Name: email
Mapper type: Attribute Importer
Social profile JSON field path: email
User attribute name: email
```

**Mapper 2: firstName**

```
Name: firstName
Mapper type: Attribute Importer
Social profile JSON field path: given_name
User attribute name: firstName
```

**Mapper 3: lastName**

```
Name: lastName
Mapper type: Attribute Importer
Social profile JSON field path: family_name
User attribute name: lastName
```

**Mapper 4: username**

```
Name: username
Mapper type: Username Template Importer
Template: ${CLAIM.email}
Target: BROKER_USERNAME
```

---

## Paso 4: Verificar en tu App

1. Asegúrate de que el frontend esté corriendo: `http://localhost:5173`
2. Ve a la página de login: `http://localhost:5173/login`
3. Ingresa un tenant (ej: `aduanasoft`)
4. Click en el botón **"Iniciar sesión con Microsoft"**

### ¿Qué debería pasar?

✅ **Correcto:**

- Te redirige a Microsoft login
- Ves la página de Microsoft pidiendo tu email/contraseña
- Después de autenticarte, vuelves a tu app

❌ **Incorrecto (lo que te está pasando ahora):**

- Te lleva a la página de login de Keycloak
- Ves el usuario "admin" ya logueado

---

## Troubleshooting Común

### Error: "Identity provider not found"

- El alias en Keycloak debe ser exactamente `microsoft` (minúsculas)
- O cambia el código: `loginWithProvider('TU_ALIAS_EXACTO')`

### Error: redirect_uri_mismatch en Azure

- La URI en Azure debe ser EXACTAMENTE:
  ```
  http://localhost:8080/realms/master/broker/microsoft/endpoint
  ```
- Nota el `/endpoint` al final

### Error: Unexpected error when authenticating with identity provider

```bash
docker cp azure.crt anexo76-keycloak:/
docker exec -it -u root anexo76-keycloak /bin/bash

keytool -importcert -trustcacerts -file /azure.crt \
-keystore /etc/java/java-21-openjdk/java-21-openjdk-21.0.8.0.9-1.el9.x86_64/lib/security/cacerts \
-alias azure-root -storepass changeit -noprompt

```

### Me redirige pero muestra error en Microsoft

- Verifica que el Client ID y Secret en Keycloak sean correctos
- Verifica que la app en Azure esté habilitada

### Funciona pero el usuario no tiene tenant_id

- Esto es normal en el primer login
- Puedes configurar un mapper adicional o manejarlo en tu backend

---

## Comando Rápido de Verificación

Ejecuta esto en una terminal:

```bash
# Verificar si el endpoint del broker existe
curl -s -o /dev/null -w "%{http_code}" "http://localhost:8080/realms/master/broker/microsoft/login?client_id=test&redirect_uri=http://localhost"
```

**Resultados:**

- `302` = ✅ Microsoft está configurado (redirige a Microsoft)
- `404` = ❌ Microsoft NO está configurado en Keycloak
- `500` = ⚠️ Hay un error de configuración

---

## Resumen Rápido

**Para que funcione necesitas:**

1. ✅ App Registration en Azure AD con Client ID y Secret
2. ✅ Identity Provider "microsoft" configurado en Keycloak
3. ✅ Redirect URI en Azure: `http://localhost:8080/realms/master/broker/microsoft/endpoint`
4. ✅ Variables de entorno en frontend (.env):
   ```
   VITE_KEYCLOAK_URL=http://localhost:8080
   VITE_KEYCLOAK_REALM=master
   VITE_KEYCLOAK_CLIENT_ID=anexo76-frontend
   ```

**El flujo correcto es:**

```
Tu App → Keycloak Broker → Microsoft Login → Keycloak → Tu App
```

**Lo que está pasando ahora:**

```
Tu App → Keycloak Login (porque no encuentra el provider)
```

---

¿Necesitas ayuda con la configuración? Primero verifica en Keycloak Admin Console si existe el Identity Provider "microsoft".
