Azure · Sitecore

Límite de grupos de seguridad de Azure AD y Sitecore Identity Server

Una de las cosas más interesantes – y fáciles – de realizar ahora con Sitecore Identity es la integración con Azure Active Directory (AD), que permite a tus usuarios autenticarse con las mismas credenciales que para su correo corporativo.

El pasado septiembre, tuve la oportunidad de configurar una integración siguiendo el blog de Derek Correia. Así que supongo que ya sabes cómo funciona el proceso de integración de Azure AD y Sitecore Identity Server.

La autenticación y autorización ocurre a través del Azure AD Security Group porque configuramos el App Registration Manifest para usar SecurityGroup en groupMembershipClaims, y para el flujo de reclamación de roles de Sitecore se basa en el Security Group Object ID configurado en el archivo Sitecore.Plugin.IdentityProvider.AzureAd.xml junto con el rol que debe solicitar.

Una vez que has configurado la integración, notarás que los usuarios ahora pueden acceder a Sitecore Content Management usando sus credenciales de Azure AD.

Hace un par de semanas recibí una solicitud diciendo que un usuario no podía iniciar sesión con sus credenciales de Azure AD y veía ya sea HTTP ERROR 431 o una página en blanco sin información adicional.

Sitecore Identity Server And Azure AD Security Groups Limit HTTP Error 431 Blog Vinicius Deschamps

Le pedí al usuario que probara

  1. En su teléfono móvil pero sin conectarse a la red inalámbrica de la empresa
  2. En la computadora de un compañero

Nada funcionó, así que empecé a pensar que podría haber algo con su perfil en Azure AD. Así que comparé nuestras cuentas y la mayor diferencia fue el número de grupos de Azure AD a los que pertenecemos.

El usuario es miembro de 180 grupos

Luego, para validar esto, me agregué a los mismos grupos y pude reproducir el error.

Decidí abrir un ticket con Sitecore, expliqué la situación, compartí logs y ellos propusieron una solución posible pero desafortunadamente no funcionó

Por favor, considera aplicar las correcciones sugeridas en el código de ejemplo a continuación a tu Identity Server y a toda la infraestructura de balanceo de carga/gateway/red que coloques delante de Identity Server:
<system.web>
…..

</system.web>

Mientras Sitecore investigaba, continué la investigación y traté de responder a las siguientes preguntas

  • ¿Sitecore busca solo los grupos listados en el archivo Sitecore.Plugin.IdentityProvider.AzureAd.xml?
  • ¿Importa si el grupo es un Security o un Distribution group?
  • ¿Cuál es el máximo de grupos de los que puedo ser miembro y firmar sin problemas?

¿Sitecore busca solo los grupos listados en el archivo Sitecore.Plugin.IdentityProvider.AzureAd.xml?

Siéntete libre de corregirme si me equivoco, pero en mi comprensión, durante el proceso de autenticación toda la pertenencia se transmite desde Azure AD a Sitecore, y se valida en el Sitecore.Plugin.IdentityProvider.AzureAd.xml. En resumen, no importa si tienes una reclamación única o 1000, lo que importa es cuántos grupos perteneces.

¿Importa si el grupo es un Security o un Distribution group?

Como se mencionó anteriormente, dado que el App Registration Manifest está configurado para usar SecurityGroup en groupMembershipClaims, el único tipo de grupo que se tiene en cuenta son los Security Groups

¿Cuál es el máximo de grupos de los que puedo ser miembro y firmar sin problemas?

La única forma que pude determinar fue haciéndolo por prueba y error

  1. Verificar el # de grupos a los que pertenezco
  2. Eliminar de los grupos individualmente
  3. Probar de nuevo

Hay una forma de verificar la membresía de grupo a través del Azure Portal, sin embargo, te da el total y no solo los Security Groups, así que tuve que usar Powershell

$FindUser = “[email protected]

(Get-AzureADUser -SearchString $FindUser | Get-AzureADUserMembership -All $true | ? {$_.ObjectType -ne “Role”} | % {Get-AzureADGroup -ObjectId $_.ObjectId | select DisplayName,ObjectType,MailEnabled,SecurityEnabled,ObjectId} | ? {$_.SecurityEnabled -eq $true}).count

Fuente: https://www.michev.info/Blog/Post/1655/quickly-list-all-groups-a-user-is-member-of-or-owner-of-in-office-365

Aquí está la salida esperada (nota: el tiempo puede variar dependiendo del # de grupos de los que formes parte)

Powershell Check Azure AD Group Membership Blog Vinicius Deschamps

Nota que el total de Security Groups es 175, y estoy recibiendo ya sea el HTTP Error 431 o una página en blanco, así que es hora de probar y encontrar el número mágico!

1ª prueba

Reducido a 150 Security Groups, y el error desapareció

2ª prueba

Aumentar 10 Security Groups, 160 en total y aún SIN ERRORES

3ª prueba

+10 Security Groups, y aún SIN ERRORES

Así que, cruzo los dedos, quizá ya tenga algo...

4ª prueba

Ahora, +1 Security Group y ¡BAM! EL ERROR VUELVE

170 es el número mágico que estábamos buscando

¿Por qué 170? ¿Qué está causando esta limitación?

Soporte de Sitecore pidió un Fiddler Trace para realizar un análisis adicional y respondieron lo siguiente

“Probé que el límite de las cookies es alrededor de 32KB y tu solicitud – al tener 175 grupos – tenía alrededor de 34KB”

Además de eso, el soporte de Sitecore dijo

Para sortear esta limitación de Azure podrías

  • Disminuir el número de grupos de los que forman parte tus usuarios
  • Mover tu Identity Provider del App Service a una máquina VM de Windows Server donde tengas acceso a esas claves de registro
    • aumentar el valor de MaxFieldLength y MaxRequestBytes en el registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters

Una vez más, un enorme agradecimiento al Soporte de Sitecore

Espero que te haya gustado, y nos vemos en mi próxima publicación!

AzureAzure ADSitecore
Límite de grupos de seguridad de Azure AD y Sitecore Identity Server — Vinicius Deschamps