Acceso condicional: protección de tokens (versión preliminar)
La protección de tokens (a veces denominada enlace de tokens en el sector) intenta reducir los ataques de robo de tokens asegurándose de que un token solo se puede usar desde el dispositivo previsto. Cuando un atacante puede robar un token, secuestrando o reproduciendo, puede suplantar a su víctima hasta que expire o se revoque el token. Se cree que el robo de tokens es un suceso relativamente raro, pero los daños que ocasiona pueden ser importantes.
La protección de tokens crea un vínculo criptográficomente seguro entre el token y el dispositivo (secreto de cliente) al que se emite. Sin el secreto de cliente, el token enlazado es inútil. Cuando un usuario registra un dispositivo Windows 10 o posterior en Microsoft Entra ID, su identidad principal se vincula al dispositivo. Esto significa que una directiva puede asegurarse de que solo las aplicaciones usan tokens de sesión de inicio de sesión enlazados (o de actualización), lo que se conoce como Tokens de actualización principal (PRT), al solicitar acceso a un recurso.
Importante
La protección de token se encuentra actualmente en versión preliminar pública. Para obtener más información sobre las vistas previas, consulte Términos de la licencia universal para servicios en línea. Con esta vista previa, le ofrecemos la posibilidad de crear una directiva de acceso condicional para exigir la protección de tokens de inicio de sesión (tokens de actualización) para servicios específicos. Admitimos la protección de tokens para tokens de inicio de sesión en acceso condicional para las aplicaciones de escritorio que acceden a Exchange Online y SharePoint Online en dispositivos Windows.
Importante
Se han realizado los siguientes cambios en la protección de tokens desde la versión preliminar pública inicial:
- Salida de los registros de inicio de sesión: el valor de la cadena usada en "enforcedSessionControls" y "sessionControlsNotSatisfied" cambió de "Binding" a "SignInTokenProtection" a finales de junio de 2023. Las consultas en los datos del registro de inicio de sesión deben actualizarse para reflejar este cambio.
Nota:
Podemos intercambiar tokens de inicio de sesión y tokens de actualización en este contenido. Si desea proporcionar protección para los tokens de acceso de Microsoft 365 y las cookies de sesión de aplicación, considere la posibilidad de probar el cumplimiento de las comprobaciones de red compatibles.
Requisitos
Esta versión preliminar admite las siguientes configuraciones para el acceso a los recursos con directivas de acceso condicional de protección de tokens aplicadas:
- Dispositivos Windows 10 o más recientes que están unidos a Microsoft Entra, híbridos unidos a Microsoft Entra o registrados de Microsoft Entra.
- Cliente de sincronización OneDrive versión 22.217 o posterior
- Cliente nativo de Teams versión 1.6.00.1331 o posterior
- Power BI Desktop versión 2.117.841.0 (mayo de 2023) o posterior
- Visual Studio 2022 o posterior cuando se usa la opción de inicio de sesión "agente de autenticación de Windows"
- Los clientes de licencia perpetua de Office no se admiten
Limitaciones conocidas
- No se admiten usuarios externos (Microsoft Entra B2B) y no deben incluirse en la directiva de acceso condicional.
- Las siguientes aplicaciones no admiten el inicio de sesión con flujos de token protegidos y los usuarios se bloquean al acceder a Exchange y SharePoint:
- Módulos PowerShell que acceden a ámbitos de Exchange, SharePoint o Microsoft Graph servidos por Exchange o SharePoint
- Extensión de PowerQuery para Excel
- Extensiones para Visual Studio Code a las que se accede a Exchange o SharePoint
- El nuevo cliente de la versión preliminar de Teams 2.1 se bloquea después de cerrar la sesión debido a un error. Este error debe corregirse en una actualización futura del servicio.
- Los siguientes dispositivos cliente Windows no son compatibles:
- Windows Server
- Surface Hub
- Sistemas de Salas de Microsoft Teams basados en Windows (MTR)
Requisitos de licencia
El uso de esta característica requiere licencias de Microsoft Entra ID P2. Para encontrar la licencia que más se ajuste a sus requisitos, consulte la Comparación de las características de disponibilidad general de Microsoft Entra ID.
Nota:
La aplicación de protección de tokens forma parte de Protección de id. de Microsoft Entra y formará parte de la licencia P2 en disponibilidad general.
Implementación
Para los usuarios, la implementación de una directiva de acceso condicional para aplicar la protección de tokens debe ser invisible al usar plataformas cliente compatibles en dispositivos registrados y aplicaciones compatibles.
Para minimizar la probabilidad de interrupción del usuario debido a la incompatibilidad de aplicaciones o dispositivos, se recomienda encarecidamente:
- Comience con un grupo piloto de usuarios y expándalo con el tiempo.
- Cree una directiva de acceso condicional en modo de solo informe antes de pasar a la aplicación de la protección de tokens.
- Capture los registros de inicio de sesión interactivos y no interactivos.
- Analice estos registros durante el tiempo suficiente para cubrir el uso normal de la aplicación.
- Agregue usuarios válidos conocidos a una directiva de cumplimiento.
Este proceso ayuda a evaluar la compatibilidad del cliente y la aplicación de sus usuarios para la aplicación de la protección de token.
Creación de una directiva de acceso condicional
Los usuarios que desempeñan roles especializados como los descritos en Niveles de seguridad de acceso privilegiado son posibles objetivos de esta funcionalidad. Se recomienda realizar una prueba piloto con un pequeño subconjunto para comenzar.
Los siguientes pasos ayudan a crear una directiva de acceso condicional para requerir protección de token para Exchange Online y SharePoint Online en dispositivos Windows.
- Inicie sesión en el Centro de administración de Microsoft Entra al menos como Administrador de acceso condicional.
- Vaya a Protección>Acceso condicional>Directivas.
- Seleccione Nueva directiva.
- Asigna un nombre a la directiva. Se recomienda que las organizaciones creen un estándar significativo para los nombres de sus directivas.
- En Assignments (Asignaciones), seleccione Users or workload identities (Identidades de usuario o de carga de trabajo).
- En Incluir, seleccione los usuarios o grupos que están probando esta directiva.
- En Excluir, seleccione Usuarios y grupos y, luego, elija las cuentas de acceso de emergencia de la organización.
- En Recursos de destino>Recursos (anteriormente aplicaciones en la nube)>Incluir>Seleccionar recursos
En Seleccionar, seleccione las siguientes aplicaciones compatibles con la versión preliminar:
- Office 365 Exchange Online
- Office 365 SharePoint Online
Advertencia
La directiva de acceso condicional solo debe configurarse para estas aplicaciones. La selección del grupo de aplicaciones Office 365 puede provocar errores no deseados. Esta es una excepción a la regla general de que el grupo de aplicaciones de Office 365 debe seleccionarse en una directiva de acceso condicional.
Elija Seleccionar.
- En Condiciones:
- En Plataformas de dispositivo:
- Establezca Configurar en Sí.
- Incluír>Selección de plataformas de dispositivos>Windows.
- Seleccione Listo.
- En Aplicaciones cliente:
- Establezca Configurar en Sí.
Advertencia
No configurar la condición Aplicaciones cliente o dejar seleccionado Explorador puede hacer que las aplicaciones que usen MSAL.js, como Teams Web, se bloqueen.
- En Clientes de autenticación modernos, seleccione únicamente Aplicaciones móviles y clientes de escritorio. Deje los demás elementos sin marcar.
- Seleccione Listo.
- Establezca Configurar en Sí.
- En Plataformas de dispositivo:
- En Controles de acceso>Sesión, seleccione Requerir protección de token para sesiones de inicio de sesión y seleccione Seleccionar.
- Confirme la configuración y establezca Habilitar directiva en Solo informe.
- Seleccione Crear para crear la directiva.
Después de que los administradores confirmen la configuración mediante el modo de solo informe, podrán pasar el botón de alternancia Habilitar directiva de Solo informe a Activar.
Captura de registros y análisis
Supervisión del cumplimiento del acceso condicional de la protección de tokens antes y después de la aplicación.
Registros de inicio de sesión
Use el registro de inicio de sesión de Microsoft Entra para verificar el resultado de una directiva de aplicación de protección de token en modo de solo informe o en modo activado.
- Inicie sesión en el Centro de administración de Microsoft Entra al menos como Administrador de acceso condicional.
- Vaya a Identidad>Supervisión y estado>Registros de inicio de sesión.
- Seleccione una solicitud específica para determinar si la directiva se aplica o no.
- Vaya al panel Acceso condicional o Solo informes en función de su estado y seleccione el nombre de la directiva que requiere la protección de tokens.
- En Controles de sesión, compruebe si se han cumplido o no los requisitos de la directiva.
Log Analytics
También puede utilizar Log Analytics para consultar los registros de inicio de sesión (interactivos y no interactivos) en busca de solicitudes bloqueadas debido a un fallo en la aplicación de la protección mediante token.
Esta es una consulta de Log Analytics de ejemplo en la que se buscan los registros de inicio de sesión no interactivos durante los últimos siete días, donde se resaltan las solicitudes Bloqueadas frente a Permitidas por la Aplicación. Estas consultas son solo muestras y están sujetas a cambios.
Nota
Salida de los registros de inicio de sesión: el valor de la cadena usada en "enforcedSessionControls" y "sessionControlsNotSatisfied" cambió de "Binding" a "SignInTokenProtection" a finales de junio de 2023. Las consultas en los datos del registro de inicio de sesión deben actualizarse para reflejar este cambio. En los ejemplos se tratan ambos valores para incluir datos históricos.
//Per Apps query
// Select the log you want to query (SigninLogs or AADNonInteractiveUserSignInLogs )
//SigninLogs
AADNonInteractiveUserSignInLogs
// Adjust the time range below
| where TimeGenerated > ago(7d)
| project Id,ConditionalAccessPolicies, Status,UserPrincipalName, AppDisplayName, ResourceDisplayName
| where ConditionalAccessPolicies != "[]"
| where ResourceDisplayName == "Office 365 Exchange Online" or ResourceDisplayName =="Office 365 SharePoint Online"
//Add userPrinicpalName if you want to filter
// | where UserPrincipalName =="<user_principal_Name>"
| mv-expand todynamic(ConditionalAccessPolicies)
| where ConditionalAccessPolicies ["enforcedSessionControls"] contains '["Binding"]' or ConditionalAccessPolicies ["enforcedSessionControls"] contains '["SignInTokenProtection"]'
| where ConditionalAccessPolicies.result !="reportOnlyNotApplied" and ConditionalAccessPolicies.result !="notApplied"
| extend SessionNotSatisfyResult = ConditionalAccessPolicies["sessionControlsNotSatisfied"]
| extend Result = case (SessionNotSatisfyResult contains 'SignInTokenProtection' or SessionNotSatisfyResult contains 'SignInTokenProtection', 'Block','Allow')
| summarize by Id,UserPrincipalName, AppDisplayName, Result
| summarize Requests = count(), Users = dcount(UserPrincipalName), Block = countif(Result == "Block"), Allow = countif(Result == "Allow"), BlockedUsers = dcountif(UserPrincipalName, Result == "Block") by AppDisplayName
| extend PctAllowed = round(100.0 * Allow/(Allow+Block), 2)
| sort by Requests desc
El resultado de la consulta anterior debe ser similar a la siguiente captura de pantalla:
En el siguiente ejemplo de consulta se examina el registro de inicio de sesión no interactivo de los últimos siete días, en el que se resaltan las solicitudes Bloqueadas frente a Permitidas por el Usuario.
//Per users query
// Select the log you want to query (SigninLogs or AADNonInteractiveUserSignInLogs )
//SigninLogs
AADNonInteractiveUserSignInLogs
// Adjust the time range below
| where TimeGenerated > ago(7d)
| project Id,ConditionalAccessPolicies, UserPrincipalName, AppDisplayName, ResourceDisplayName
| where ConditionalAccessPolicies != "[]"
| where ResourceDisplayName == "Office 365 Exchange Online" or ResourceDisplayName =="Office 365 SharePoint Online"
//Add userPrincipalName if you want to filter
// | where UserPrincipalName =="<user_principal_Name>"
| mv-expand todynamic(ConditionalAccessPolicies)
| where ConditionalAccessPolicies ["enforcedSessionControls"] contains '["Binding"]' or ConditionalAccessPolicies ["enforcedSessionControls"] contains '["SignInTokenProtection"]'
| where ConditionalAccessPolicies.result !="reportOnlyNotApplied" and ConditionalAccessPolicies.result !="notApplied"
| extend SessionNotSatisfyResult = ConditionalAccessPolicies.sessionControlsNotSatisfied
| extend Result = case (SessionNotSatisfyResult contains 'SignInTokenProtection' or SessionNotSatisfyResult contains 'SignInTokenProtection', 'Block','Allow')
| summarize by Id, UserPrincipalName, AppDisplayName, ResourceDisplayName,Result
| summarize Requests = count(),Block = countif(Result == "Block"), Allow = countif(Result == "Allow") by UserPrincipalName, AppDisplayName,ResourceDisplayName
| extend PctAllowed = round(100.0 * Allow/(Allow+Block), 2)
| sort by UserPrincipalName asc