Error “Invalid JWT access token” en Azure Runbooks: la solución al fallo con Microsoft Graph

¿Te has encontrado con el frustrante error Invalid JWT access token. Authentication needed. Please call Connect-MgGraph mientras trabajas con PowerShell y Microsoft Graph? No estás solo. Este problema afecta a miles de administradores de sistemas y desarrolladores que intentan automatizar tareas con Azure Automation y runbooks.

En este artículo te explico paso a paso cómo diagnosticar y resolver el error Invalid JWT access token Connect-MgGraph, compartiendo las soluciones que realmente funcionan basadas en casos reales.

¿Qué significa el error «Invalid JWT Access Token?

El error Invalid JWT access token Connect-MgGraph aparece cuando PowerShell no puede validar correctamente el token de autenticación que estás usando para conectarte a Microsoft Graph API. Aunque el mensaje es claro, las causas pueden ser múltiples y no siempre evidentes.

Este problema es especialmente común en:

  • Azure Automation runbooks
  • Scripts de PowerShell ejecutados en servidores remotos
  • Automatizaciones programadas con Application Registrations
  • Entornos con versiones específicas del módulo Microsoft.Graph
Invalid JWT access token Connect-MgGraph

Principales causas del error Invalid JWT Access Token

1. Client Secret Expirado o Incorrecto

La causa más frecuente del Invalid JWT access token Connect-MgGraph es un Client Secret que ha expirado o se ha copiado incorrectamente. Los Client Secrets tienen una duración limitada (típicamente 1-2 años) y Azure no envía notificaciones automáticas cuando están por vencer.

Cómo verificarlo:

  • Accede a Azure Portal → Azure Active Directory → App registrations
  • Selecciona tu aplicación → Certificates & secrets
  • Revisa la fecha de expiración en «Client secrets»

2. Problemas de Versión del Módulo Microsoft.Graph

Uno de los problemas menos conocidos pero más frustrantes ocurre con versiones específicas del módulo Microsoft.Graph, especialmente la 2.30.0 que se instala frecuentemente en Azure Automation. Esta versión tiene bugs documentados que causan el error Invalid JWT access token Connect-MgGraph incluso con credenciales correctas.

Según la documentación oficial de Microsoft en docs.microsoft.com, existen incompatibilidades conocidas entre ciertas versiones del módulo y diferentes entornos de ejecución.

3. Configuración incorrecta de permisos

Tu Application Registration necesita permisos específicos de Microsoft Graph API. Sin los permisos correctos (como User.Read.All o Directory.Read.All), obtendrás el Invalid JWT access token Connect-MgGraph error.

4. Problemas de sintaxis en Connect-MgGraph

La sintaxis de Connect-MgGraph ha cambiado en diferentes versiones. Parámetros que funcionaban en versiones anteriores pueden causar el error en versiones más recientes.

Diagnóstico paso a paso del error

Paso 1: Verificar la obtención manual del token

Antes de diagnosticar Connect-MgGraph, verifica que puedes obtener un token OAuth2 válido:

$tokenUrl = "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token"
$body = @{
    client_id = "tu-client-id"
    client_secret = "tu-client-secret"
    scope = "https://graph.microsoft.com/.default"
    grant_type = "client_credentials"
}

$response = Invoke-RestMethod -Uri $tokenUrl -Method Post -Body $body -ContentType "application/x-www-form-urlencoded"

Si este paso falla, el problema está en tus credenciales. Si funciona pero Connect-MgGraph no, entonces es un problema del módulo.

Paso 2: Comprobar versión del módulo

Get-Module -ListAvailable -Name "Microsoft.Graph*" | Select-Object Name, Version

Si tienes la versión 2.30.0, es muy probable que ese sea el origen del Invalid JWT access token Connect-MgGraph.

Paso 3: Verificar permisos en Azure AD

En el portal de Azure, confirma que tu App Registration tiene:

  • Permisos de Microsoft Graph asignados
  • «Grant admin consent» aplicado
  • El tipo correcto de permisos (Application vs Delegated)

Soluciones Que realmente funcionan

Solución 1: Actualizar o degradar el módulo Microsoft.Graph

Si estás usando Azure Automation, intenta instalar una versión más reciente o más estable:

En Azure Automation, ve a Modules → Browse Gallery.

Busca «Microsoft.Graph» e instala versión 2.25.0 o superior a 2.31.0

Si no la encuentras disponible, puedes descargarlas desde PowerShell Gallery.

Solución 2: Usar Managed Identity (Recomendado)

En lugar de Client Secrets, usa Managed Identity que elimina completamente el problema de tokens:

Connect-MgGraph -Identity

Para configurarlo:

  1. Habilita System-assigned managed identity en tu Automation Account
  2. Asigna permisos de Microsoft Graph a la identidad
  3. Usa el código anterior

Solución 3: Llamadas directas a Microsoft Graph API

Si Connect-MgGraph sigue fallando, puedes saltártelo completamente usando llamadas REST directas:

# Obtener token
$tokenResponse = Invoke-RestMethod -Uri $tokenUrl -Method Post -Body $body -ContentType "application/x-www-form-urlencoded"

# Configurar headers
$headers = @{
    'Authorization' = "Bearer $($tokenResponse.access_token)"
    'Content-Type' = 'application/json'
}

# Llamar directamente a Graph API
$users = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users" -Headers $headers -Method Get

Esta solución evita completamente los bugs de Connect-MgGraph y te da control total sobre la autenticación.

Prevención y mejores prácticas

Gestión proactiva de Client Secrets

  • Configura alertas para Client Secrets que expiren en 30 días
  • Usa Managed Identity siempre que sea posible
  • Rota los secrets regularmente antes de que expiren

Versionado de módulos en Azure Automation

  • Mantén un inventario de las versiones de módulos instaladas
  • Prueba en entornos de desarrollo antes de actualizar producción
  • Documenta qué versiones funcionan en tu entorno

Monitoreo y Logging

Implementa logging detallado en tus scripts para identificar rápidamente dónde ocurre el invalid JWT access token connect-mggraph:

try {
    Connect-MgGraph -ClientSecretCredential $credential -TenantId $tenantId
    Write-Output "Conexión exitosa"
} catch {
    Write-Error "Error de conexión: $($_.Exception.Message)"
    # Logging adicional para diagnóstico
}

Casos Especiales y Consideraciones Adicionales

Azure Automation vs PowerShell Local

Invalid JWT access token Connect-MgGraph puede aparecer en Azure Automation pero no en tu máquina local debido a:

  • Diferentes versiones de PowerShell (5.1 vs 7.x)
  • Módulos con versiones distintas
  • Configuraciones de proxy y red diferentes

Integración con Power Automate

Si tu runbook alimenta a Power Automate, asegúrate de que la salida sea limpia. Errores de autenticación pueden generar salidas que rompan tus flujos de automatización.

Recursos adicionales y referencias

Si aún no tienes muy claro qué es Microsoft Graph y cómo funciona su autenticación, puedes leer este artículo complementario: ¿Qué es y por qué debe interesarte Microsoft Graph?. Esto te ayudará a entender mejor por qué el error Invalid JWT access token Connect-MgGraph viene aparejado con los cambios en el módulo y los tokens.

Referencias y lecturas recomendadas

  • Información oficial de Microsoft Q&A: el error ocurre con Microsoft.Graph.Authentication versión 2.26.1 y PowerShell 7.2; la solución temporal es volver a la versión 2.25.0. Microsoft Learn
  • Análisis detallado en Office 365 IT Pros sobre el fallo del SDK V2.26.x en runbooks y que solo se resuelve usando PowerShell 7.4 o quedándose en 2.25. Office 365 for IT Pros
  • Reporte en GitHub que documenta fallo por dependencia en System.Runtime 8.0.0.0 en Azure Automation y confirma que la versión 2.25.0 funciona correctamente. GitHub

Conclusión

El error Invalid JWT access token Connect-MgGraph puede ser frustrante, pero con el diagnóstico correcto y las soluciones adecuadas, es completamente solucionable. La clave está en identificar si el problema es de credenciales, versiones de módulos, o configuración de permisos.

Recuerda que las llamadas directas a Microsoft Graph API son a menudo más fiables que usar Connect-MgGraph, especialmente en entornos automatizados como Azure Automation. Y siempre que sea posible, migra a Managed Identity para eliminar la gestión manual de secrets.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio