Conceptos avanzados

Autenticación multifactor de Citrix Gateway y Microsoft Azure

Citrix Gateway presenta todas las aplicaciones alojadas, SaaS, web, empresariales y móviles a los usuarios en cualquier dispositivo y explorador. Utiliza nFactor Authentication para autenticar usuarios con Microsoft AD local y aprovecha Microsoft AD FS para Azure Multi-Factor Authentication (MFA).

Citrix Gateway

Citrix Gateway proporciona a los usuarios un punto de acceso e inicio de sesión único (SSO) para aplicaciones empresariales y datos implementados en un centro de datos y en la nube. Se entrega como SaaS en una amplia gama de dispositivos: Portátiles, equipos de escritorio, clientes ligeros, tabletas y smartphones. Citrix Gateway proporciona consolidación, ayuda a reducir el espacio de la infraestructura de acceso remoto, reduce los costes y proporciona facilidad de administración y una mejor experiencia para el usuario final. Citrix Gateway ayuda a realizar la transición de TI a entornos de nube híbrida y SaaS.

  • Federación e inicio de sesión único

Citrix Gateway proporciona identidad federada y admite SAML 2.0, OAuth y OpenID para lograr el inicio de sesión único en todas las aplicaciones, ya sean aplicaciones web, VDI, empresariales o SaaS.

  • Directorio de usuario local

Citrix Gateway proporciona SSO a aplicaciones SaaS como Office 365 y Salesforce, y mantiene el directorio de usuario local. Se puede implementar como IdP o proxy para Servicios de federación de Microsoft Active Directory (AD FS).

  • Autenticación multifactor (nFactor)

Citrix Gateway proporciona mecanismos de autenticación de nFactor y permite un control granular sobre quién accede a la red, a qué se accede y cómo y cuándo se accede a ella. Soporta todos los mecanismos de autenticación como RADIUS, TACACS, NTLM, Diámetro, SAML 2.0, OAuth 2.0 y OpenID 2.0.

  • Directivas de control de acceso contextual

Citrix Gateway permite un control granular del acceso a las aplicaciones empresariales en función del estado del dispositivo del usuario final, el usuario, la ubicación del usuario y otros datos. Un administrador de TI puede crear, administrar y aplicar las directivas para acceder a los datos de forma segura en un entorno de aplicaciones. Estas directivas se pueden implementar para aplicaciones VDI, web, móviles, empresariales y SaaS.

  • Visibilidad y supervisión

Citrix Application Delivery Management incluye Gateway Insight, que proporciona visibilidad de la experiencia de usuario integral para todas las aplicaciones a las que se accede a través de Citrix Gateway. Proporciona información para que los equipos de soporte de aplicaciones solucionen problemas relacionados con fallos de autenticación, incluidos los errores de comprobación de EPA y los errores de inicio de sesión único.

Aplicaciones

Aplicaciones compatibles

MFA de Microsoft Azure

Las personas se están conectando a los recursos de la organización en casos cada vez más complicados. Las personas se conectan desde dispositivos públicos, personales y de propiedad de la organización dentro y fuera de la red corporativa mediante smartphones, tabletas, PC y portátiles, a menudo en varias plataformas. En este mundo siempre conectado, multidispositivo y multiplataforma, la seguridad de las cuentas de usuario es más importante que nunca. Las contraseñas, independientemente de su complejidad, utilizadas en dispositivos, redes y plataformas ya no son suficientes para garantizar la seguridad de la cuenta de usuario, especialmente cuando los usuarios tienden a reutilizar contraseñas entre cuentas. Los sofisticados ataques de phishing y otros ataques de ingeniería social pueden dar lugar a que nombres de usuario y contraseñas se publiquen y vendan en la web oscura.

La seguridad del proceso de verificación en dos etapas radica en su enfoque escalonado. Comprometer múltiples factores de autenticación representa un desafío importante para los atacantes. Incluso si un atacante logra aprender la contraseña del usuario, es inútil sin tener también posesión del método de autenticación adicional. Funciona al requerir dos o más de los siguientes métodos de autenticación:

  • Algo que sabes (normalmente una contraseña)
  • Algo que tiene (un dispositivo de confianza que no se duplica fácilmente, como un teléfono)
  • Algo que es (biometría)

La autenticación multifactor de Azure ayuda a proteger el acceso a los datos y las aplicaciones. Proporciona una capa adicional de seguridad mediante una segunda forma de autenticación. Las organizaciones pueden utilizar el acceso condicional para hacer que la solución se ajuste a sus necesidades específicas.

Métodos de implementación de MFA de Microsoft Azure

Existen diferentes métodos para aprovechar MFA de Azure como segundo factor de autenticación. Tales métodos se explican brevemente a continuación con sus pros y contras.

Servidor MFA de Azure

El servidor de autenticación multifactor de Microsoft Azure era el método original y se va a retirar. No debe tenerse en cuenta para ninguna nueva implementación como

  • No hay más inversión de Microsoft en el futuro en este método.
  • No hay integración con SSPR y Azure MFA basada en la nube.
  • No existe una herramienta de migración perfecta del servidor MFA a la solución basada en la nube de MFA.

Extensión del servidor de directivas de red MFA de Azure

La extensión Network Policy Server (NPS) para Azure MFA es una solución compatible que utiliza el adaptador NPS para conectarse con Azure MFA basado en la nube. Se puede utilizar como servidor RADIUS local.

  • El adaptador NPS (RADIUS) proporcionará una ubicación de red dentro o fuera de la regla MFA o encendido/apagado.
  • No es compatible con las directivas de acceso condicional de Azure AD similares al método de integración SAML. Las directivas de acceso condicional tienen experiencias de usuario mucho más ricas y mejores.
  • Los usuarios deben estar registrados en MFA antes de usar NPS Adapter. A diferencia del acceso condicional y basado en la nube de MFA de Azure, si el usuario no está registrado, la extensión NPS no puede autenticar al usuario, lo que genera más llamadas al servicio de ayuda.
  • Cuando NPS Adapter invoca MFA, llega a los usuarios registrados opción predeterminada. No hay ninguna notificación visual al usuario de que se requiere MFA y viene. No hay una interfaz de usuario para que el usuario cambie los métodos de MFA durante un proceso cerrado. Si el usuario no tiene su dispositivo predeterminado con ellos, fallará. El usuario debe volver al portal de autoservicio y restablecer la opción predeterminada, y luego intentar conectarse de nuevo.

Microsoft AD FS y Azure MFA

Si su organización está federada con Azure AD, pero el hash de contraseñas no está sincronizado con Azure AD, puede usar AD local para el Protocolo ligero de acceso a directorios (LDAP) y habilitar Azure MFA como parte de las directivas de acceso en partes de retransmisión de AD FS. A partir de Windows Server 2016, ahora puede configurar Azure MFA para la autenticación primaria.

  • El adaptador MFA de Azure está integrado en Windows Server 2016 y no es necesario realizar una instalación adicional.
  • El adaptador MFA de Azure se integra directamente con Azure AD y no requiere un servidor MFA de Azure local.
  • Si los usuarios no están registrados en MFA, se les guía a través del proceso en el próximo inicio de sesión. Garantiza menos llamadas al servicio de asistencia y un mejor proceso para los usuarios.
  • Los usuarios reciben una notificación visual de que MFA se requiere y viene. Los usuarios pueden cambiar la opción de puerta de enlace durante un proceso cerrado en la interfaz de usuario.

Azure AD y Azure MFA

Si su organización está sincronizando el Hash de contraseñas en Azure AD, se puede aprovechar MFA de Azure mediante directivas de acceso condicional para desafiar a los usuarios a una autenticación de segundo factor.

  • Este método no requiere ninguna instalación adicional local.
  • Si los usuarios no están registrados en MFA, se les guía a través del proceso en el siguiente inicio de sesión. Garantiza menos llamadas al servicio de asistencia y un mejor proceso para los usuarios.
  • Los usuarios reciben una notificación visual de que MFA se requiere y viene. Los usuarios pueden cambiar la opción de puerta de enlace durante un proceso cerrado en la interfaz de usuario.

Autenticación PassThrough de Azure AD y Azure MFA

La autenticación PTA (PTA) de Azure AD permite a los usuarios iniciar sesión en aplicaciones locales y basadas en la nube con las mismas contraseñas. Cuando los usuarios inician sesión con Azure AD, esta función valida las contraseñas de los usuarios directamente en Active Directory local. Azure AD PTA es una alternativa a la sincronización hash de contraseñas de Azure AD, que proporciona el mismo beneficio de la autenticación en la nube a las organizaciones.

  • Azure AD PTA requiere que se instale un agente ligero local.
  • Azure AD PTA protege las cuentas de usuario trabajando sin problemas con las directivas de acceso condicional de Azure AD, incluida la MFA de Azure.
  • Los usuarios pueden completar tareas de administración de contraseñas de autoservicio en la nube.
  • Las contraseñas locales nunca se almacenan en la nube de ninguna forma.
  • El agente solo realiza conexiones salientes desde la red. Por lo tanto, no es necesario instalar el agente en una red perimetral, también conocida como DMZ.

Situación actual

Un entorno con las siguientes funciones requiere aprovechar Azure MFA como segundo factor de autenticación:

  • AD local con sincronización de Azure AD está configurado.
  • La sincronización hash de contraseña de Azure AD está inhabilitada.
  • Se requiere acceso a las aplicaciones de O365.
  • Se requiere acceso a Citrix Virtual Apps and Desktops en las instalaciones.
  • Se requiere acceso a aplicaciones con un método de autenticación moderno (SAML, OAuth).
  • Se requiere acceso a las aplicaciones con el método de autenticación heredado.

Puntos de diseño

Aquí están los puntos de diseño para la solución propuesta:

  • Acceda a aplicaciones alojadas, SaaS, empresariales y web en un único portal y se requiere de forma segura.
  • Solo se debe exigir a los usuarios que introduzcan sus credenciales una vez durante el proceso de autenticación.
  • El inicio de sesión único debe proporcionarse para todas las aplicaciones alojadas, SaaS, empresariales y web.

Solución propuesta

Información general

La solución propuesta se basa en los siguientes componentes:

  • Dispositivo Citrix Gateway local
  • Microsoft AD local
  • Microsoft AD FS local
  • Citrix ADC local como proxy AD FS
  • MFA de Microsoft Azure

Citrix Gateway está aprovechando la función de autenticación, autorización y auditoría (Citrix ADC AAA) y los mecanismos de autenticación de nFactor para autenticar al usuario con la directiva LDAP y aprovechar la directiva de acceso en AD FS Relay Party para desencadenar el proceso de validación de MFA de Azure. Después de que Azure MFA valida al usuario, AD FS genera ASERCIÓN SAML (respuesta SAML) y redirige al usuario de nuevo a Citrix Gateway. En ese momento, el usuario se autentica y Citrix Gateway presenta todas las aplicaciones que el usuario está autorizado a utilizar.

La solución requiere dos registros DNS públicos y dos direcciones IP públicas:

Descripción Valor
FQDN de Citrix Gateway access.ctxdemos.com
FQDN de autenticación, autorización y auditoría de Citrix aaa.ctxdemos.com

La solución utiliza un certificado SSL público:

Descripción Valor
Nombre común access.ctxdemos.com
Nombre alternativo del sujeto sts.ctxdemos.com
Nombre alternativo del sujeto aaa.ctxdemos.com

La solución también utiliza un certificado SSL comodín emitido por los Servicios internos de Microsoft Certificate Authority:

Descripción Valor
Nombre común *.ctxdemos.com

Flujo de autenticación

Diagrama de secuencia

El siguiente diagrama de secuencia muestra el flujo de autenticación de la solución:

Diagrama de secuencia

Pasos de autenticación

Los pasos de autenticación son:

  1. El usuario va a https://access.ctxdemos.com.
  2. Citrix Gateway redirige al usuario al primer VIP de Citrix ADC AAA (no direccionable).
  3. En primer lugar, Citrix ADC AAA VIP utiliza un inicio de sesión sin esquema, que se configura con un inicio de sesión único. A continuación, comienza a procesar las directivas de autenticación avanzadas.
  4. La primera directiva de autenticación es SAML SP a un LB VIP no direccionable para generar cookies de autenticación.
  5. El ayudante LB VIP está configurado para utilizar el segundo Citrix ADC AAA VIP (direccionable) para la autenticación. Por lo tanto, redirige al usuario al segundo VIP de autenticación, autorización y auditoría.
  6. En segundo lugar, Citrix ADC AAA VIP utiliza el esquema Username Only de inicio de sesión, que solicita al usuario el nombre de usuario. A continuación, comienza a procesar las directivas de autenticación avanzadas.
  7. La primera directiva de autenticación es una Extracción de grupo, que consulta el nombre de usuario en un AD local y valida si el usuario pertenece al grupo de seguridad AzureMFACAUsers. Cuando el resultado de la validación es correcto, comienza a procesar el siguiente factor de autenticación, que es la directiva LDAP.
  8. La directiva LDAP utiliza el esquema UsernameAndPassword de inicio de sesión y un campo de nombre de usuario rellenado previamente, y solicita al usuario la contraseña de AD.
  9. Cuando la autenticación en el segundo Citrix ADC AAA VIP se completa correctamente, vuelve al asistente LB VIP, que genera una respuesta SAML para el primer VIP de autenticación, autorización y auditoría.
  10. El primer Citrix ADC AAA VIP comienza a procesar el siguiente factor, que es una extracción de grupo para garantizar que los grupos de usuarios se extraen de AD y se almacenen en la variable de autenticación, autorización y auditoría que se utilizará más adelante en el proceso.
  11. En primer lugar, Citrix ADC AAA VIP comienza a procesar el siguiente factor, que es un SP SAML a AD FS Proxy VIP en Citrix ADC.

    Nota:

    Citrix ADC está federado con la comunidad de servidores de AD FS. Los pasos detallados se explican en secciones posteriores.

  12. El VIP del proxy de AD FS valida que se hayan establecido las cookies de autenticación (NSC_TMAA y NSC_TMAS). A continuación, envía la solicitud SAML a un servidor AD FS back-end (los servidores de AD FS back-end deben equilibrarse la carga en el ADC interno de Citrix para obtener una alta disponibilidad y resistencia del servicio).
  13. El servidor AD FS procesa la solicitud SAML. Dado que la directiva de acceso en el grupo de retransmisión está establecida en “Permitir todos los usuarios y requieren MFA para la autenticación”, desencadena el proceso de autenticación MFA de Azure.
  14. Azure MFA procesa el nombre de usuario. Si ya está registrado, desafía al usuario con el método configurado. De lo contrario, se solicita al usuario que se registre y establezca los métodos de autenticación principal y secundaria.
  15. Una vez que el proceso de autenticación MFA de Azure se ha completado correctamente, AD FS genera una respuesta SAML para Citrix Gateway (First Citrix ADC AAA VIP).
  16. En primer lugar, Citrix ADC AAA VIP recibe una respuesta SAML y confirma que se ha completado el proceso de autenticación del usuario.
  17. Citrix Gateway envía información de autenticación a Citrix StoreFront, que enumera todas las aplicaciones y escritorios que el usuario está autorizado a utilizar. Además, procesa la pertenencia al grupo del usuario para presentar marcadores publicados en Citrix Gateway.

Pantallas de autenticación

La mayoría de los pasos mencionados anteriormente son perfectos para los usuarios, ya que ocurren internamente entre varios VIP en Citrix ADC. La experiencia del usuario se muestra a continuación:

Página de inicio desesión de Citrix Gateway nombre de usuario página de inicio de sesión de Citrix Gateway nombre de usuario y contraseña Código de verificación

Implementación

Microsoft AD FS

Requisitos del certificado

Los servidores de federación requieren los certificados de la tabla siguiente:

Tipo de certificado Descripción Lo que hay que saber antes de la implementación
Certificado de Secure Sockets Layer (SSL) Se trata de un certificado estándar de Secure Sockets Layer (SSL) que se utiliza para proteger las comunicaciones entre servidores de federación y clientes. Este certificado debe estar enlazado al sitio web predeterminado de los Servicios de Internet Information Server (IIS) para un servidor de federación o un proxy de servidor de federación. Para un proxy de servidor de federación, el enlace debe configurarse en IIS antes de ejecutar correctamente el Asistente para configuración del proxy del servidor de federación. Recomendación: Dado que los clientes de AD FS deben confiar en este certificado, utilice un certificado de autenticación de servidor emitido por una entidad emisora de certificados (CA) pública (de terceros). Por ejemplo, Verisign. Sugerencia: El nombre del sujeto de este certificado se utiliza para representar el nombre del Servicio de federación para cada instancia de AD FS que implemente. Por este motivo, es posible que quiera considerar la posibilidad de elegir un nombre de Asunto en los nuevos certificados emitidos por CA que represente mejor el nombre de su empresa u organización para los socios.
Certificado de comunicación de Este certificado habilita la seguridad de mensajes WCF para proteger las comunicaciones entre servidores de federación. De forma predeterminada, el certificado SSL se utiliza como certificado de comunicaciones de servicio. Esto se puede cambiar mediante la consola de administración de AD FS.
Certificado de firma de token Este es un certificado X509 estándar que se utiliza para firmar de forma segura todos los tokens que emite el servidor de federación. El certificado de firma de tokens debe contener una clave privada y debe encadenarse a una raíz de confianza en el Servicio de federación. De forma predeterminada, AD FS crea un certificado autofirmado. Sin embargo, puede cambiarlo posteriormente a un certificado emitido por una entidad emisora de certificados mediante el complemento Administración de AD FS, en función de las necesidades de su organización.
Certificado de descifrado de tokens Se trata de un certificado SSL estándar que se utiliza para descifrar los tokens entrantes cifrados por un servidor de federación asociado. También se publica en los metadatos de la federación. De forma predeterminada, AD FS crea un certificado autofirmado. Sin embargo, puede cambiarlo posteriormente a un certificado emitido por una entidad emisora de certificados mediante el complemento Administración de AD FS, en función de las necesidades de su organización.

Configuración del entorno de demostración

Tipo de certificado Configuración del entorno de demostración
Certificado de Secure Sockets Layer (SSL) Certificado interno emitido por la CA emisora interna en el servidor AD FS. Certificado público de confianza en Citrix ADC.
Certificado de comunicación de Certificado interno expedido por la entidad de certificación interna de AHS.
Certificado de firma de token Generado automáticamente por el servicio AD FS.
Certificado de descifrado de tokens Generado automáticamente por el servicio AD FS.

En el entorno de demostración, se inscribe e instala un certificado comodín en el servidor.

Entidad de certificación

Requisitos de cuenta de servicio

Puede crear una cuenta de servicio o aprovechar las cuentas de servicio gestionadas por grupos (gMSA). Para utilizar gMSA, debe crear una clave raíz del servicio de distribución de claves. Por lo tanto, inicie PowerShell y ejecute el siguiente comando:

Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))
<!--NeedCopy-->

Este comando crea una clave raíz del servicio de distribución de claves, almacenada en Active Directory, y le permite crear una cuenta de servicio administrado (gMSA) de grupo como la cuenta de servicio de AD FS que cree posteriormente. Ejecute este comando con derechos de administrador de dominio.

Clave raíz

Requisitos de registro DNS

Necesita un registro DNS A para el nombre del servicio de federación de AD FS interna y externamente. En el entorno de demostración, el registro DNS interno apunta a la IP del servidor AD FS y el registro DNS externo apunta a la IP pública de Citrix Gateway.

Nombre del registro Ámbito Tipo Dirección IP
sts.ctxdemox.com Interna A 22.22.22.6
sts.ctxdemox.com Externa A 40.85.225.175

Agregar la función de AD FS y configurar la comunidad de servidores de AD FS

Agregar el rol de AD FS

Para agregar el rol de AD FS a Windows Server 2016, inicie PowerShell y ejecute el siguiente comando:

Install-WindowsFeature AD FS-Federation -IncludeManagementTools
<!--NeedCopy-->

Comando de PowerShell

Configurar la comunidad de servidores de AD FS

Ahora puede comenzar la configuración posterior a la implementación de AD FS desde el Administrador del servidor. Haga clic en Configurar el servicio de federación en este servidor.

Configuración posterior a la implementación

En la página de bienvenida, seleccione Crear el primer servidor de federación en una comunidad de servidores de federación y, a continuación, haga clic en Siguiente.

Crear el primer servidor de federación

En la página Conectar a los servicios de dominio de Active Directory, asegúrese de que la cuenta Administrador de dominio está especificada y, a continuación, haga clic en Siguiente.

Conectarse a servicios de dominio de Active Directory

En la página Especificar propiedades de servicio, siga los pasos siguientes y, a continuación, haga clic en Siguiente:

  • Elija el certificado que se instaló en el servidor en los pasos anteriores.
  • El nombre del servicio de federación se rellenará automáticamente en función del nombre del sujeto del certificado.
  • Coloque el nombre para mostrar del servicio de federación. Por ejemplo, CTXDEMOS STS.

Especificar propiedades de servicio

En la página Especificar cuenta de servicio, seleccione Crear una cuenta de servicio administrado por grupoe introduzca un nombre único para esta cuenta. Las cuentas de servicio administrado por grupo son compatibles con Windows Server 2012 en adelante y vienen con contraseñas estrictas y complejas que se cambian automáticamente cada 30 días. Haga clic en Siguiente.

Crear una cuenta de servicio administrado por grupo

En la página Especificar Base de Datos de Configuración, seleccione especificar la ubicación de una base de datos de SQL Server. Haga clic en Siguiente.

Especificar la base de datos

En la página Opciones de revisión, compruebe las selecciones de configuración y, a continuación, haga clic en Siguiente.

Opciones de revisión

En la página Comprobaciones previas a requisitos, compruebe que todas las comprobaciones de requisitos previos se han completado correctamente y, a continuación, haga clic en Configurar.

Verificaciones de requisitos previos

En la página Resultados, asegúrese de que la instalación se realiza correctamente. Haga clic en Cerrar para salir del asistente.

Resultados de la configuración posterior a la implementación

Nota:

Para completar los pasos siguientes, necesitará su ID de arrendatario de Azure.

Puede obtener el ID de arrendatario de Azure siguiendo los pasos del artículo de documentación de Microsoft, Obtener detalles de arrendatarios de AzureID.

La documentación de Microsoft también proporciona información sobre el GUID del cliente de Azure MFA en Configure AD FS 2016 y Azure MFA.

Configurar comunidad de AD FS: Automatizada

Puede ejecutar el siguiente script de PowerShell:

#
# Windows PowerShell script for AD FS Deployment
#
Import-Module ADFS
Install-AdfsFarm `
-CertificateThumbprint:"BD02F30D90A96EEE4A5934F2EA979E7A052584AE" `
-FederationServiceDisplayName:"CTXDEMOS STS" `
-FederationServiceName:"adfs.ctxdemos.com" `
-GroupServiceAccountIdentifier:"C
<!--NeedCopy-->

Configurar AD FS con Azure MFA

Configurar servidores de AD FS

En cada uno de los servidores de AD FS, inicie PowerShell y ejecute los siguientes comandos:

# Install Windows PowerShell MSOnline Module
Install-Module MSOnline

# Import Windows PowerShell MSOnline Module
Import-Module MSOnline

# Get the Azure Global Administrator credential
$credential = Get-Credential

# Sign in to your Azure Active Directory environment
Connect-MsolService -Credential $credential

# Set a variable for the Azure Tenant name
$azureTenantID = "ctxdemos.onmicrosoft.com"

# Set a variable for the Azure MFA Client GUID
$azureMFAClientGUID = "981f26a1-7f43-403b-a875-f8b09b8cd720"

# Generate a certificate for the Azure MFA on AD FS server
$azureMFACertificate = New-AdfsAzureMfaTenantCertificate -TenantId $azureTenantID

# Add the new credentials to the Azure MFA Client Service Principal
New-MsolServicePrincipalCredential -AppPrincipalId $azureMFAClientGUID -Type asymmetric -Usage verify -
Value $azureMFACertificate
<!--NeedCopy-->

Configurar comunidad de servidores de AD FS

Solo en uno de los servidores de AD FS, ejecute el siguiente comando:

Set-AdfsAzureMfaTenant -TenantId $azureTenantID -ClientId $azureMFAClientGUID
<!--NeedCopy-->

Reinicie el servicio AD FS en cada uno de sus servidores. A continuación, verá que Azure MFA está disponible como método de autenticación principal y multifactor para el uso de intranet y extranet.

Método de autenticación principal

Método de autenticación multifactor

Configurar AD FS con Citrix ADC

Debe crear una confianza de federación entre AD FS y Citrix ADC. En la Consola de administración de AD FS, vaya a Confianza de parte de confianza y seleccione Agregar confianza de parte de confianza.

Agregar una confianza de parte que confía

Seleccione Introducir datos sobre la parte que confía manualmente y haga clic en Siguiente.

Introducir datos sobre la parte que confía

Introduzca un nombre descriptivo para mostrar y notas opcionales. Haga clic en Siguiente.

Notas opcionales

Haga clic en Siguiente.

Configurar un certificado

Seleccione Habilitar compatibilidad con el protocolo SAML 2.0 WebSSO e introduzca https://CitrixGatewayFQDN/cgi/samlauth. En el entorno de demostración, lo es https://access.ctxdemos.com/cgi/samlauth. Haga clic en Siguiente.

Configurar una dirección URL

Introduzca una cadena de identificador único para la confianza de la parte que confía. En el entorno de demostración, lo es https://access.ctxdemos.com. Este identificador se utilizará como URL de emisor en el perfil SAML de Citrix ADC. Haga clic en Siguiente.

Configurar un identificador

En la página Elegir directiva de control de acceso, seleccione Permitir a todos y requerir MFA. Haga clic en Siguiente.

Directiva de control de acceso

Haga clic en Siguiente.

Agregar confianza

En la página Finalizar, seleccione Configurar directiva de emisión de notificaciones para esta aplicación. Haga clic en Cerrar.

Finalizar

En la página Reglas de transformación de emisión, haga clic en Agregar regla.

Agregar una regla

Haga clic en Siguiente.

Seleccionar una plantilla

Introduzca un nombre descriptivo en el campo Nombre de regla de reclamación. En Almacén de atributos, seleccione Active Directory. A continuación, seleccione lo siguiente: Atributos LDAP y Tipos de notificación salientes.

Configurar una regla

Cree una nueva regla y utilice Enviar notificaciones mediante una regla personalizada como plantilla de regla de notificación. Introduzca un nombre descriptivo para Nombre de regla de notificación e introduzca la siguiente cadena para Regla personalizada:

=> issue(Type = "logoutURL", Value = "https://access.ctxdemos.com/cgi/tmlogout", Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/attributename"] = "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified");
<!--NeedCopy-->

Configurar una regla

Cuando se creen las directivas de emisión de reclamaciones, haga clic en Aceptar.

Haga clic con el botón derecho en Confianza de parte confianza> Citrix ADC y seleccione Propiedades. Seleccione Dispositivos de punto final y agregue un dispositivo de punto final haciendo clic en Agregar SAML para el cierre de sesión. En la lista Tipo de punto final, seleccione Cierre de sesión SAML. En Enlace, seleccione POST y, para Dirección URL de confianza, escriba https://sts.ctxdemos.com/adfs/ls/?wa=wsignout1.0. Esto actuará como una URL de cierre de sesión cuando cierre sesión en Citrix ADC. Haga clic en Aceptar.

Cierre de sesión SAML

Haga clic con el botón derecho en Confianza de parte confianza> Citrix ADC y seleccione Propiedades. Seleccione Cifrado y agregue un certificado SSL público instalado en Citrix Gateway. Este certificado se utilizará para descifrar una solicitud SML entrante de Citrix ADC. Repita lo mismo en la ficha Firma. Este certificado se utilizará para comprobar la firma de una solicitud SAML entrante. Haga clic en Aceptar.

Habilitar página de inicio de sesión iniciado por el IdP

Puede habilitar la página de inicio de sesión iniciada por el IdP de AD FS. Utilizará el inicio de sesión iniciado por el IdP para presentar una página de error personalizada a los usuarios de MFA no registrados. Para habilitar, ejecute el siguiente comando:

Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
<!--NeedCopy-->

Probar comunidad de AD FS

Abra un explorador web y navegue hasta:

Citrix ADC y Citrix Gateway

Configurar Citrix Gateway

Puede configurar Citrix Gateway a través del asistente. Inicie sesión en la interfaz gráfica de usuario de Citrix ADC Management, vaya a Unified Gateway y haga clic en Crear nueva puerta de enlace. Luego haga clic en Continuar.

Acceso público único

Introduzca el nombre, la IP y el FQDN para la puerta de Unified Gateway y haga clic en Continuar.

Configurar Citrix Gateway

Seleccione el certificado SSL público y haga clic en Continuar.

Certificado de servidor

Cree una directiva LDAP básica y enlazarla a Unified Gateway. Haga clic en Continue.

Autenticación

Cree un tema de portal basado en RFWebUI y enlazarlo a Unified Gateway. Haga clic en Continue.

Tema del portal

Seleccione el signo más (+) delante de las aplicaciones para integrar Citrix Gateway con StoreFront.

Integrar Gateway con StoreFront

Integrar Citrix StoreFront en Citrix Gateway

En la página Aplicación, seleccione XenApp y XenDesktop y, en la lista Elegir punto de integración, seleccione StoreFront. Haga clic en Continue.

Seleccionar varios ajustes

Introduzca una URL de StoreFront y haga clic en Recuperar almacenes. A continuación, introduzca la configuración predeterminada del dominio de Active Directory y la dirección URL de la autoridad de tíquet seguro. Haga clic en Probar conectividad STA y luego haga clic en Continuar.

Probar conectividad

Haga clic en Listo y, a continuación, en Continuar.

Continuar

Configuración de Citrix Gateway e integración con StoreFront: CLI

# Create Session Policy and Action for Citrix Receiver
add vpn sessionAction AC_OS_22.22.44.50 -transparentInterception OFF -defaultAuthorizationAction ALLOW -SSO ON -icaProxy ON -wihome "https://access.ctxdemos.com/Citrix/ExternalWeb" -ClientChoices OFF -ntDomain CTXDEMOS -clientlessVpnMode OFF -storefronturl "https://access.ctxdemos.com"
add vpn sessionPolicy PL_OS_22.22.44.50 "HTTP.REQ.HEADER("User-Agent").CONTAINS("CitrixReceiver") && HTTP.REQ.HEADER("User-Agent").CONTAINS("CitrixVPN").NOT && HTTP.REQ.HEADER("User-Agent").CONTAINS("NSGiOSplugin").NOT" AC_OS_22.22.44.50

# Create Session Policy and Action for Citrix Web Client
add vpn sessionAction AC_WB_22.22.44.50 -transparentInterception ON -defaultAuthorizationAction ALLOW -forceCleanup cookie -SSO ON -ssoCredential PRIMARY -icaProxy OFF -wihome "https://storefront.ctxdemos.com/Citrix/ExternalWeb" -wiPortalMode COMPACT -ClientChoices OFF -ntDomain CTXDEMOS -clientlessVpnMode ON -clientlessPersistentCookie ALLOW
add vpn sessionPolicy PL_WB_22.22.44.50 "HTTP.REQ.HEADER("User-Agent").CONTAINS("CitrixReceiver").NOT" AC_WB_22.22.44.50

# Create Session Policy and Action for Citrix Gateway Client
add vpn sessionAction UG_VPN_SAct_22.22.44.50 -transparentInterception ON -defaultAuthorizationAction ALLOW -SSO ON -ClientChoices ON -clientlessVpnMode ON
add vpn sessionPolicy UG_VPN_SPol_22.22.44.50 true UG_VPN_SAct_22.22.44.50

# Create Responder Policy and Action for Gateway Logout
add responder action RESACT_GATEWAY_LOGOFF_REDIRECT redirect ""https://" + HTTP.REQ.HOSTNAME.HTTP_URL_SAFE" -responseStatusCode 302
add responder policy RESPOL_GATEWAY_LOGOFF_REDIRECT "HTTP.REQ.URL.CONTAINS("/cgi/logout")" RESACT_GATEWAY_LOGOFF_REDIRECT

# Create Citrix Gateway vServer
add vpn vserver UGVS_VPN_UGCTXDEMOS SSL 0.0.0.0 -loginOnce ON -Listenpolicy NONE -vserverFqdn access.ctxdemos.com
set ssl vserver UGVS_VPN_UGCTXDEMOS -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver UGVS_VPN_UGCTXDEMOS -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver UGVS_VPN_UGCTXDEMOS -cipherName CTXDEMOS_FRONTEND_APLUS
bind vpn vserver UGVS_VPN_UGCTXDEMOS -portaltheme CTXDEMOS_PORTAL
bind vpn vserver UGVS_VPN_UGCTXDEMOS -staServer "https://wsctxdc01.ctxdemos.com"
bind vpn vserver UGVS_VPN_UGCTXDEMOS -policy RESPOL_GATEWAY_LOGOFF_REDIRECT -priority 100 -gotoPriorityExpression END -type REQUEST
bind vpn vserver UGVS_VPN_UGCTXDEMOS -policy PL_OS_22.22.44.50 -priority 100 -gotoPriorityExpression NEXT -type REQUEST
bind vpn vserver UGVS_VPN_UGCTXDEMOS -policy PL_WB_22.22.44.50 -priority 110 -gotoPriorityExpression NEXT -type REQUEST
bind vpn vserver UGVS_VPN_UGCTXDEMOS -policy UG_VPN_SPol_22.22.44.50 -priority 58000 -gotoPriorityExpression NEXT -type REQUEST

# Create Content Switching Policy and Action for Citrix Gateway
add cs action CSACT_UGCTXDEMOS -targetVserver UGVS_VPN_UGCTXDEMOS
add cs policy CSPOL_UGCTXDEMOS -rule "is_vpn_url  ||  HTTP.REQ.URL.PATH.SET_TEXT_MODE(IGNORECASE).STARTSWITH("/Citrix/External")" -action CSACT_UGCTXDEMOS

# Create Content Switching vServer for Citrix Gateway
add cs vserver CSVS_UGCTXDEMOS SSL 22.22.44.50 443 -cltTimeout 180
set ssl vserver CSVS_UGCTXDEMOS -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver CSVS_UGCTXDEMOS -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver CSVS_UGCTXDEMOS -cipherName CTXDEMOS_FRONTEND_APLUS
bind cs vserver CSVS_UGCTXDEMOS -policyName CSPOL_UGCTXDEMOS -priority 63000

# Create Responder Policy and Action for HTTP to HTTPS Redirection
add responder action RESACT_HTTP_TO_HTTPS redirect ""https://" + HTTP.REQ.HOSTNAME.HTTP_URL_SAFE + HTTP.REQ.URL.PATH_AND_QUERY.HTTP_URL_SAFE" -responseStatusCode 301
add responder policy RESPOL_HTTP_TO_HTTPS HTTP.REQ.IS_VALID RESACT_HTTP_TO_HTTPS

# Create Always On Server and Service
add server LBSRV_ALWAYS_UP 127.0.0.1
add service LBSVC_ALWAYS_UP LBSRV_ALWAYS_UP HTTP 80 -gslb NONE -maxClient 0 -maxReq 0 -cip ENABLED cip-header -usip YES -useproxyport YES -sp OFF -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO

# Create Always On vServer for Citrix Gateway
add lb vserver CSVS_UGCTXDEMOS_REDIRECT_HTTP_TO_HTTPS HTTP 22.22.44.50 80 -persistenceType NONE -cltTimeout 180
bind lb vserver CSVS_UGCTXDEMOS_REDIRECT_HTTP_TO_HTTPS LBSVC_ALWAYS_UP
bind lb vserver CSVS_UGCTXDEMOS_REDIRECT_HTTP_TO_HTTPS -policyName RESPOL_HTTP_TO_HTTPS -priority 100 -gotoPriorityExpression END -type REQUEST
<!--NeedCopy-->

Configurar el primer servidor de autenticación

# Create Initialization SAML SP Policy and Action and Bind it to Citrix ADC AAA Authentication vServer
add authentication samlAction AUTH_ACT_SAML_SP_VPN_TO_LB -samlIdPCertName CTXDEMOS_PUBLIC_CERT -samlSigningCertName CTXDEMOS_PUBLIC_CERT -samlRedirectUrl "https://access.ctxdemos.com/samltolb" -signatureAlg RSA-SHA256 -digestMethod SHA256 -samlBinding REDIRECT -groupNameField Groups
add authentication Policy AUTH_POL_SAMP_SP_VPN_TO_LB -rule TRUE -action AUTH_ACT_SAML_SP_VPN_TO_LB

# Create Authentication Policy and Action for SAML SP to ADFS
add authentication samlAction AUTH_ACT_SAML_SP_ADFS -samlIdPCertName CTXDEMOS_ADFS_TOKEN_SIGNING -samlSigningCertName CTXDEMOS_PUBLIC_CERT -samlRedirectUrl "https://sts.ctxdemos.com/adfs/ls/" -samlUserField "Name ID" -samlRejectUnsignedAssertion OFF -samlIssuerName "https://access.ctxdemos.com" -Attribute1 "E-Mail Address" -signatureAlg RSA-SHA256 -digestMethod SHA256 -logoutURL "https://sts.ctxdemos.com/adfs/ls/wa=wsignout1.0" -forceAuthn ON
add authentication Policy AUTH_POL_SAML_SP_ADFS -rule TRUE -action AUTH_ACT_SAML_SP_ADFS

# Create Authentication Policy Label for for SAML SP to ADFS
add authentication policylabel AUTH_POLLBL_ADFS_AZUREMFA -loginSchema LSCHEMA_INT
bind authentication policylabel AUTH_POLLBL_ADFS_AZUREMFA -policyName AUTH_POL_SAML_SP_ADFS -priority 100 -gotoPriorityExpression NEXT

# Create Authentication Policy and Action for Group Extraction
add authentication ldapAction AUTH_ACT_LDAP_GROUP_EXTRACTION_AZUREMFACA -serverIP 22.22.22.61 -serverPort 636 -ldapBase "DC=ctxdemos,DC=com" -ldapBindDn "CN=svc_ctxadc01,OU=Services,OU=Accounts,DC=ctxdemos,DC=com" -ldapBindDnPassword 0c4fe86d56a865ef514a15affd1429f3e079ce1089731d4a407772d21036f3c8 -encrypted -encryptmethod ENCMTHD_3 -ldapLoginName sAMAccountName -searchFilter "memberOf:1.2.840.113556.1.4.1941:=CN=AzureMFACAUsers,OU=Groups,OU=Authorizations,DC=ctxdemos,DC=com" -groupAttrName memberOf -subAttributeName cn -secType SSL -authentication DISABLED -nestedGroupExtraction ON -maxNestingLevel 5 -groupNameIdentifier sAMAccountName -groupSearchAttribute memberOf -groupSearchSubAttribute CN -Attribute1 mail -Attribute2 objectGUID
add authentication Policy AUTH_POL_LDAP_GROUP_EXTRACTION_AZURAMFACA -rule TRUE -action AUTH_ACT_LDAP_GROUP_EXTRACTION_AZUREMFACA

# Create Authentication Policy Label for Group Extraction
add authentication policylabel AUTH_POLLBL_LDAP_GROUP_EXTRACTION_AZURAMFACA -loginSchema LSCHEMA_INT
bind authentication policylabel AUTH_POLLBL_LDAP_GROUP_EXTRACTION_AZURAMFACA -policyName AUTH_POL_LDAP_GROUP_EXTRACTION_AZURAMFACA -priority 100 -gotoPriorityExpression NEXT -nextFactor AUTH_POLLBL_ADFS_AZUREMFA


# Create Login Schema Policy and Profile for First Citrix ADC AAA Authentication vServer
add authentication loginSchema LSCHEMA_PRF_NOSCHEMA -authenticationSchema noschema -SSOCredentials YES
add authentication loginSchemaPolicy LSCHEMA_POL_NOSCHEMA -rule TRUE -action LSCHEMA_PRF_NOSCHEMA

# Create First Citrix ADC AAA Authentication vServer
add authentication vserver AAAVS_CTXDEMOS_COM_FOR_VPN SSL 0.0.0.0
set ssl vserver AAAVS_CTXDEMOS_COM_FOR_VPN -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver AAAVS_CTXDEMOS_COM_FOR_VPN -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver AAAVS_CTXDEMOS_COM_FOR_VPN -cipherName CTXDEMOS_FRONTEND_APLUS
bind authentication vserver AAAVS_CTXDEMOS_COM_FOR_VPN -policy LSCHEMA_POL_NOSCHEMA -priority 100 -gotoPriorityExpression END
bind authentication vserver AAAVS_CTXDEMOS_COM_FOR_VPN -policy AUTH_POL_SAMP_SP_VPN_TO_LB -priority 100 -nextFactor AUTH_POLLBL_LDAP_GROUP_EXTRACTION_AZURAMFACA -gotoPriorityExpression NEXT

# Create First Citrix ADC AAA Authentication Profile
add authentication authnProfile AAA_AUTH_PRF_VPN -authnVsName AAAVS_CTXDEMOS_COM_FOR_VPN -AuthenticationHost aaa.ctxdemos.com

# Set Authentication Profile on Gateway vServer
set vpn vserver UGVS_VPN_UGCTXDEMOS -authnProfile AAA_AUTH_PRF_VPN
<!--NeedCopy-->

Configurar un segundo servidor de autenticación

# Create Authentication Policy and Action for LDAP
add authentication ldapAction AUTH_ACT_LDAP -serverIP 22.22.22.61 -serverPort 636 -authTimeout 60 -ldapBase "DC=ctxdemos,DC=com" -ldapBindDn "CN=svc_ctxadc01,OU=Services,OU=Accounts,DC=ctxdemos,DC=com" -ldapBindDnPassword 273881819af883e70c33d83c0546eac84e81d6eeba904f2d65bbebf2819c025a -encrypted -encryptmethod ENCMTHD_3 -ldapLoginName sAMAccountName -groupAttrName memberOf -subAttributeName cn -secType SSL -passwdChange ENABLED -nestedGroupExtraction ON -maxNestingLevel 5 -groupNameIdentifier sAMAccountName -groupSearchAttribute memberOf -groupSearchSubAttribute CN -Attribute1 userprincipalname -Attribute2 mail -Attribute3 userParameters
add authentication Policy AUTH_POL_LDAP_USER_NAME_PASSWORD -rule TRUE -action AUTH_ACT_LDAP

# Create Login Schema Policy and Profile for Second Citrix ADC AAA Authentication vServer - Username (Pre-filled ) and Password
add authentication loginSchema LSCHEMA_USER_NAME_PASSWORD -authenticationSchema "/nsconfig/loginschema/CTXDEMOS_USER_NAME_PASS.xml" -SSOCredentials YES
add authentication loginSchemaPolicy LSCHEMA_POL_USER_NAME_PASSWORD -rule TRUE -action LSCHEMA_USER_NAME_PASSWORD

# Create Authentication Policy Label for LDAP Username and Password
add authentication policylabel AUTH_POLLBL_LDAP_USER_NAME_PASSWORD -loginSchema LSCHEMA_USER_NAME_PASSWORD
bind authentication policylabel AUTH_POLLBL_LDAP_USER_NAME_PASSWORD -policyName AUTH_POL_LDAP_USER_NAME_PASSWORD -priority 110 -gotoPriorityExpression NEXT

# Create Login Schema Policy and Profile for Second Citrix ADC AAA Authentication vServer - Username Only
add authentication loginSchema LSCHEMA_USER_NAME_ONLY -authenticationSchema "/nsconfig/loginschema/CTXDEMOS_USER_NAME_ONLY.xml"
add authentication loginSchemaPolicy LSCHEMA_POL_NOPASSWORD -rule TRUE -action LSCHEMA_USER_NAME_ONLY

# Create Citrix ADC AAA Session Policy and Profile
add tm sessionAction AAA_SESSION_PRF_CTXDEMOS -SSO ON -ssoDomain CTXDEMOS -persistentCookie ON -persistentCookieValidity 30
add tm sessionPolicy AAA_SESSION_POL_CTXDEMOS TRUE AAA_SESSION_PRF_CTXDEMOS

# Create Second Citrix ADC AAA Authentication vServer
add authentication vserver AAAVS_CTXDEMOS_COM SSL 22.22.44.51 443
set ssl vserver AAAVS_CTXDEMOS_COM -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver AAAVS_CTXDEMOS_COM -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver AAAVS_CTXDEMOS_COM -cipherName CTXDEMOS_FRONTEND_APLUS
bind authentication vserver AAAVS_CTXDEMOS_COM -portaltheme CTXDEMOS_PORTAL
bind authentication vserver AAAVS_CTXDEMOS_COM -policy AAA_SESSION_POL_CTXDEMOS -priority 100 -gotoPriorityExpression NEXT
bind authentication vserver AAAVS_CTXDEMOS_COM -policy LSCHEMA_POL_NOPASSWORD -priority 110 -gotoPriorityExpression END
bind authentication vserver AAAVS_CTXDEMOS_COM -policy AUTH_POL_LDAP_GROUP_EXTRACTION_AZURAMFACA -priority 140 -nextFactor AUTH_POLLBL_LDAP_USER_NAME_PASSWORD -gotoPriorityExpression NEXT

# Create Second Citrix ADC AAA Authentication Profile
add authentication authnProfile AAA_AUTH_PRF -authnVsName AAAVS_CTXDEMOS_COM -AuthenticationHost aaa.ctxdemos.com
<!--NeedCopy-->

Configurar Citrix ADC como AD FS WAP

Ejecute los siguientes comandos en Citrix ADC CLI para configurar Citrix ADC como AD FS Web Application Proxy (WAP):

# Pattern Set - ADFS Proxy Hostname
add policy patset PATSET_ADFS_HOSTNAME
bind policy patset PATSET_ADFS_HOSTNAME sts.ctxdemos.com -index 1 -charset ASCII
# Policy Expression - ADFS Proxy Hostname
add policy expression is_ADFS_HOSTNAME "HTTP.REQ.HEADER("Host").TO_LOWER.CONTAINS_ANY("PATSET_ADFS_HOSTNAME")"

# Pattern Set - ADFS Proxy Path for NoAuth
add policy patset PATSET_ADFS_PATH_NOAUTH
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/services/trust" -index 1 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/federationmetadata/2007-06/federationmetadata.xml" -index 2 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/fs/federationserverservice.asmx" -index 3 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/ls/FormsSignIn.aspx" -index 4 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/services/trust/2005/usernamemixed" -index 5 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/services/trust/mex" -index 6 -charset ASCII

# Policy Expression - ADFS Proxy Path for NoAuth
add policy expression is_ADFS_PROXY_NOAUTH "HTTP.REQ.URL.PATH.TO_LOWER.CONTAINS_ANY("PATSET_ADFS_PATH_NOAUTH")"

# Pattern Set - ADFS Proxy Path for Passive Client
add policy patset PATSET_ADFS_PATH_ACTIVE_PASSIVE
bind policy patset PATSET_ADFS_PATH_ACTIVE_PASSIVE "/adfs" -index 1 -charset ASCII
bind policy patset PATSET_ADFS_PATH_ACTIVE_PASSIVE "/cgi/selfauth" -index 2 -charset ASCII

# Policy Expression - ADFS Proxy Path for Passive Client
add policy expression is_ADFS_PROXY_ACTIVE_PASSIVE "(HTTP.REQ.HEADER("Host").TO_LOWER.CONTAINS_ANY("PATSET_ADFS_HOSTNAME") && HTTP.REQ.URL.PATH.TO_LOWER.STARTSWITH_ANY("PATSET_ADFS_PATH_ACTIVE_PASSIVE"))"

# Rewrite Policies for ADFS PIP
add rewrite action RWACT_X_MS_Proxy insert_http_header X-MS-Proxy ""NETSCALER""
add rewrite policy RWPOL_X_MS_Proxy true RWACT_X_MS_Proxy

add rewrite action RWACT_X_MS_Forwarded_Client_IP insert_http_header X-MS-Forwarded-Client-IP CLIENT.IP.SRC
add rewrite policy RWPOL_X_MS_Forwarded_Client_IP true RWACT_X_MS_Forwarded_Client_IP

add rewrite action RWACT_X_MS_Endpoint_Absolute_Path insert_http_header X-MS-Endpoint-Absolute-Path HTTP.REQ.URL
add rewrite policy RWPOL_X_MS_Endpoint_Absolute_Path true RWACT_X_MS_Endpoint_Absolute_Path

add rewrite action RWACT_X_MS_Target_Role insert_http_header X-MS-Target-Role ""PrimaryComputer""
add rewrite policy RWPOL_X_MS_Target_Role true RWACT_X_MS_Target_Role

add rewrite action RWACT_X_MS_ADFS_Proxy_Client_IP insert_http_header X-MS-ADFS-Proxy-Client-IP CLIENT.IP.SRC
add rewrite policy RWPOL_X_MS_ADFS_Proxy_Client_IP true RWACT_X_MS_ADFS_Proxy_Client_IP

add rewrite action RWACT_X_MS_Client_User_Agent insert_http_header X-MS-Client-User-Agent "HTTP.REQ.HEADER("User-Agent")"
add rewrite policy RWPOL_X_MS_Client_User_Agent true RWACT_X_MS_Client_User_Agent

add rewrite action RWACT_ADFS_PROXYMEX replace HTTP.REQ.URL.PATH_AND_QUERY ""/adfs/services/trust/proxymex" + HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).PATH_AND_QUERY.STRIP_START_CHARS("/adfs/services/trust/mex").HTTP_URL_SAFE"
add rewrite policy RWPOL_ADFS_PROXYMEX "is_ADFS_HOSTNAME && HTTP.REQ.URL.TO_LOWER.STARTSWITH("/adfs/services/trust/mex")" RWACT_ADFS_PROXYMEX

add rewrite policy RWPOL_ADFS_PROXY_HEADERS-NOACT TRUE NOREWRITE

add rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS http_req
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Proxy 100 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Forwarded_Client_IP 110 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Endpoint_Absolute_Path 120 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Target_Role 130 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_ADFS_Proxy_Client_IP 140 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Client_User_Agent 150 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_ADFS_PROXYMEX 160 NEXT

# Create ADFS Server and Service Group
add server LBSRV_ADFS wsadfs01.ctxdemos.com
add serviceGroup LBSVCGRP_ADFS_443 SSL -maxClient 0 -maxReq 0 -cip ENABLED X-MS-Forwarded-Client-IP -usip NO -useproxyport YES -sp ON -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP YES
bind ssl serviceGroup LBSVCGRP_ADFS_443 -cipherName CTXDEMO_BACKEND
set ssl serviceGroup LBSVCGRP_ADFS_443 -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED
bind serviceGroup LBSVCGRP_ADFS_443 LBSRV_ADFS 443

# Create ADFS Proxy NoAuth Load Balancing vServer
add lb vserver LBVS_ADFS_PROXY_NOAUTH SSL 0.0.0.0 0 -persistenceType NONE -cltTimeout 180
set ssl vserver LBVS_ADFS_PROXY_NOAUTH -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver LBVS_ADFS_PROXY_NOAUTH -certkeyName CTXDEMOS-PUBLIC
bind ssl vserver LBVS_ADFS_PROXY_NOAUTH -cipherName CTXDEMO_BACKEND
bind lb vserver LBVS_ADFS_PROXY_NOAUTH LBSVCGRP_ADFS_443
bind lb vserver LBVS_ADFS_PROXY_NOAUTH -policyName RWPOL_ADFS_PROXY_HEADERS-NOACT -priority 100 -gotoPriorityExpression NEXT -type REQUEST -invoke policylabel RWPOLLBL_ADFS_PROXY_HEADERS

# Create ADFS Proxy NoAuth Content Switching Policy and Action
add cs action CSACT_ADFS_PROXY_NOAUTH -targetLBVserver LBVS_ADFS_PROXY_NOAUTH
add cs policy CSPOL_ADFS_PROXY_NOAUTH -rule is_ADFS_PROXY_NOAUTH -action CSACT_ADFS_PROXY_NOAUTH

# Create ADFS Proxy Active-Passive Load Balancing vServer
add lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE SSL 0.0.0.0 0 -persistenceType NONE -cltTimeout 180 -Authentication ON -authnProfile AAA_AUTH_PRF
set ssl vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE LBSVCGRP_ADFS_443
bind ssl vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -certkeyName CTXDEMOS-PUBLIC
bind ssl vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -cipherName CTXDEMO_FRONTEND_APLUS
bind lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -policyName RWPOL_ADFS_PROXY_HEADERS-NOACT -priority 100 -gotoPriorityExpression NEXT -type REQUEST -invoke policylabel RWPOLLBL_ADFS_PROXY_HEADERS

# Create ADFS Proxy Active-Passive Content Switching Policy and Action
add cs action CSACT_ADFS_PROXY_ACTIVE_PASSIVE -targetLBVserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE
add cs policy CSPOL_ADFS_PROXY_ACTIVE_PASSIVE -rule is_ADFS_PROXY_ACTIVE_PASSIVE -action CSACT_ADFS_PROXY_ACTIVE_PASSIVE

# Bind Content Switching Policies to Citrix Gateway Content Switching vServer
bind cs vserver CSVS_UGCTXDEMOS -policyName CSPOL_ADFS_PROXY_NOAUTH -priority 100
bind cs vserver CSVS_UGCTXDEMOS -policyName CSPOL_ADFS_PROXY_ACTIVE_PASSIVE -priority 300

# Create Citrix ADC AAA Traffic Policies and Bind them to ADFS Proxy Active-Passive Load Balancing vServer
add tm formSSOAction AAATM_SSOPRF_ADFS_LOGIN -actionURL "/adfs/ls" -userField UserName -passwdField Password -ssoSuccessRule true -nameValuePair AuthMethod=FormsAuthentication -responsesize 15000 -submitMethod POST
add tm trafficAction AAATM_PRF_ADFS_LOGIN -appTimeout 1 -SSO ON -formSSOAction AAATM_SSOPRF_ADFS_LOGIN -persistentCookie OFF -InitiateLogout OFF -kcdAccount NONE -userExpression "HTTP.REQ.USER.ATTRIBUTE(3)" -passwdExpression "HTTP.REQ.USER.ATTRIBUTE(2)"
add tm trafficPolicy AAATM_POL_ADFS_LOGIN "HTTP.REQ.URL.TO_LOWER.STARTSWITH("/adfs/ls")" AAATM_PRF_ADFS_LOGIN
add tm trafficAction AAATM_PRF_ADFS_LOGOUT -appTimeout 1 -persistentCookie OFF -InitiateLogout ON -kcdAccount NONE
add tm trafficPolicy AAATM_POL_ADFS_LOGOUT "HTTP.REQ.URL.TO_LOWER.STARTSWITH("/adfs/ls") && HTTP.REQ.URL.QUERY.VALUE("wa").EQ("wsignout1.0")" AAATM_PRF_ADFS_LOGOUT
bind lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -policyName AAATM_POL_ADFS_LOGIN -priority 100 -gotoPriorityExpression END -type REQUEST
bind lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -policyName AAATM_POL_ADFS_LOGOUT -priority 110 -gotoPriorityExpression END -type REQUEST
<!--NeedCopy-->

Configurar un flujo de autenticación inicial

# Pattern Set - Gateway and AAA Hostname
add policy patset PATSET_GATEWAY_HOSTHEADER
bind policy patset PATSET_GATEWAY_HOSTHEADER access.ctxdemos.com -index 1 -charset ASCII
bind policy patset PATSET_GATEWAY_HOSTHEADER aaa.ctxdemos.com -index 2 -charset ASCII
# Policy Expression - Gateway and AAA Hostname
add policy expression is_GATEWAY_HOSTNAME "HTTP.REQ.HEADER("Host").TO_LOWER.CONTAINS_ANY("PATSET_GATEWAY_HOSTHEADER")"

# Create Initialization Load Balancing vServer
add lb vserver LBVS_SAML_SP_INITIALIZATION SSL 0.0.0.0 0 -persistenceType NONE -cltTimeout 180 -Authentication ON -authnProfile AAA_AUTH_PRF
set ssl vserver LBVS_SAML_SP_INITIALIZATION -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind lb vserver LBVS_SAML_SP_INITIALIZATION LBSVC_ALWAYS_UP
bind ssl vserver LBVS_SAML_SP_INITIALIZATION -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver LBVS_SAML_SP_INITIALIZATION -cipherName CTXDEMOS_FRONTEND_APLUS

# Create Initialization Content Switching Policy and Action
add cs action CSACT_SAML_SP_INITIALIZATION -targetLBVserver LBVS_SAML_SP_INITIALIZATION
add cs policy CSPOL_SAML_SP_INITIALIZATION -rule "is_GATEWAY_HOSTNAME && HTTP.REQ.URL.PATH.TO_LOWER.STARTSWITH("/samltolb")" -action CSACT_SAML_SP_INITIALIZATION

# Bind Content Switching Policies to Citrix Gateway Content Switching vServer
bind cs vserver CSVS_UGCTXDEMOS -policyName CSPOL_SAML_SP_INITIALIZATION -priority 500

# Create Initialization Citrix ADC AAA Traffic Policy and Action and Bind it to Load Balancing vServer
add tm samlSSOProfile AAATM_SAMLSSOPRF_VPN_TO_LB -samlSigningCertName CTXDEMOS_PUBLIC_CERT -assertionConsumerServiceURL "https://access.ctxdemos.com/cgi/samlauth" -relaystateRule "HTTP.REQ.URL.QUERY.VALUE("RelayState")" -signatureAlg RSA-SHA256 -digestMethod SHA256 -Attribute1 Password -Attribute1Expr AAA.USER.PASSWD -Attribute2 Groups -Attribute2Expr AAA.USER.GROUPS -encryptAssertion ON -samlSPCertName CTXDEMOS_PUBLIC_CERT
add tm trafficAction AAATM_PRF_VPN_TO_LB -SSO ON -persistentCookie OFF -InitiateLogout OFF -kcdAccount NONE -samlSSOProfile AAATM_SAMLSSOPRF_VPN_TO_LB
add tm trafficPolicy AAATM_POL_VPN_TO_LB "HTTP.REQ.URL.STARTSWITH("/samltolb")" AAATM_PRF_VPN_TO_LB
bind lb vserver LBVS_SAML_SP_INITIALIZATION -policyName AAATM_POL_VPN_TO_LB -priority 100 -gotoPriorityExpression END -type REQUEST
<!--NeedCopy-->

Grupos de cifrado

# Create Cipher Group for Backend vServers
add ssl cipher CTXDEMOS_BACKEND
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.3-AES256-GCM-SHA384 -cipherPriority 1
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.3-CHACHA20-POLY1305-SHA256 -cipherPriority 2
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.3-AES128-GCM-SHA256 -cipherPriority 3
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.2-ECDHE-RSA-AES256-GCM-SHA384 -cipherPriority 4
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.2-ECDHE-RSA-AES128-GCM-SHA256 -cipherPriority 5
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.2-ECDHE-ECDSA-AES256-GCM-SHA384 -cipherPriority 6
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.2-ECDHE-ECDSA-AES128-GCM-SHA256 -cipherPriority 7

# Create Cipher Group for Frondend vServers
add ssl cipher CTXDEMOS_FRONTEND
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.3-AES256-GCM-SHA384 -cipherPriority 1
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.3-CHACHA20-POLY1305-SHA256 -cipherPriority 2
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.3-AES128-GCM-SHA256 -cipherPriority 3
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-ECDSA-AES128-GCM-SHA256 -cipherPriority 4
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-ECDSA-AES256-GCM-SHA384 -cipherPriority 5
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-ECDSA-AES128-SHA256 -cipherPriority 6
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-ECDSA-AES256-SHA384 -cipherPriority 7
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-ECDHE-ECDSA-AES128-SHA -cipherPriority 8
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-ECDHE-ECDSA-AES256-SHA -cipherPriority 9
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-RSA-AES128-GCM-SHA256 -cipherPriority 10
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-RSA-AES256-GCM-SHA384 -cipherPriority 11
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-RSA-AES-128-SHA256 -cipherPriority 12
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-RSA-AES-256-SHA384 -cipherPriority 13
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-ECDHE-RSA-AES128-SHA -cipherPriority 15
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-ECDHE-RSA-AES256-SHA -cipherPriority 16
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-DHE-RSA-AES128-GCM-SHA256 -cipherPriority 17
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-DHE-RSA-AES256-GCM-SHA384 -cipherPriority 18
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-DHE-RSA-AES-128-CBC-SHA -cipherPriority 19
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-DHE-RSA-AES-256-CBC-SHA -cipherPriority 20

# Create Cipher Group for Frondend vServers - A+
add ssl cipher CTXDEMOS_FRONTEND_APLUS
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.3-AES256-GCM-SHA384 -cipherPriority 1
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.3-CHACHA20-POLY1305-SHA256 -cipherPriority 2
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.3-AES128-GCM-SHA256 -cipherPriority 3
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-AES256-GCM-SHA384 -cipherPriority 4
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-AES128-GCM-SHA256 -cipherPriority 5
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-CHACHA20-POLY1305 -cipherPriority 6
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-AES256-SHA384 -cipherPriority 7
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-AES128-SHA256 -cipherPriority 8
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-AES256-GCM-SHA384 -cipherPriority 9
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-AES128-GCM-SHA256 -cipherPriority 13
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-CHACHA20-POLY1305 -cipherPriority 14
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-AES-256-SHA384 -cipherPriority 15
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-AES-128-SHA256 -cipherPriority 16
<!--NeedCopy-->

Archivo XML de esquema de inicio de sesión

CTXDEMOS_USER_NAME_PASS.XML

<?xml version="1.0" encoding="utf-8"?>
<AuthenticateResponse xmlns="http://citrix.com/authentication/response/1">
    <Status>success</Status>
    <Result>more-info</Result>
    <StateContext/>
    <AuthenticationRequirements>
        <PostBack>/nf/auth/doAuthentication.do</PostBack>
        <CancelPostBack>/Citrix/Authentication/ExplicitForms/CancelAuthenticate</CancelPostBack>
        <CancelButtonText>Cancel</CancelButtonText>
        <Requirements>
            <Requirement>
                <Credential>
                    <ID>login</ID>
                    <SaveID>ExplicitForms-Username</SaveID>
                    <Type>username</Type>
                </Credential>
                <Label>
                    <Text>User name</Text>
                    <Type>plain</Type>
                </Label>
                <Input>
                    <AssistiveText>Please supply username</AssistiveText>
                    <Text>
                        <Secret>false</Secret>
                        <ReadOnly>false</ReadOnly>
                        <InitialValue>${AAA.USER.NAME}</InitialValue>
                        <Constraint>.+</Constraint>
                    </Text>
                </Input>
            </Requirement>
            <Requirement>
                <Credential>
                    <ID>passwd</ID>
                    <SaveID>ExplicitForms-Password</SaveID>
                    <Type>password</Type>
                </Credential>
                <Label>
                    <Text>Password:</Text>
                    <Type>plain</Type>
                </Label>
                <Input>
                    <Text>
                        <Secret>true</Secret>
                        <ReadOnly>false</ReadOnly>
                        <InitialValue/>
                        <Constraint>.+</Constraint>
                    </Text>
                </Input>
            </Requirement>
            <Requirement>
                <Credential>
                    <ID>saveCredentials</ID>
                    <Type>savecredentials</Type>
                </Credential>
                <Label>
                    <Text>Remember my password</Text>
                    <Type>plain</Type>
                </Label>
                <Input>
                    <CheckBox>
                        <InitialValue>false</InitialValue>
                    </CheckBox>
                </Input>
            </Requirement>
            <Requirement>
                <Credential>
                    <ID>loginBtn</ID>
                    <Type>none</Type>
                </Credential>
                <Label>
                    <Type>none</Type>
                </Label>
                <Input>
                    <Button>Log On</Button>
                </Input>
            </Requirement>
        </Requirements>
    </AuthenticationRequirements>
</AuthenticateResponse>
<!--NeedCopy-->

CTXDEMOS_USER_NAME_ONLY.XML

<?xml version="1.0" encoding="utf-8"?>
<AuthenticateResponse xmlns="http://citrix.com/authentication/response/1">
    <Status>success</Status>
    <Result>more-info</Result>
    <StateContext/>
    <AuthenticationRequirements>
        <PostBack>/nf/auth/doAuthentication.do</PostBack>
        <CancelPostBack>/Citrix/Authentication/ExplicitForms/CancelAuthenticate</CancelPostBack>
        <CancelButtonText>Cancel</CancelButtonText>
        <Requirements>
            <Requirement>
                <Credential>
                    <ID>login</ID>
                    <SaveID>ExplicitForms-Username</SaveID>
                    <Type>username</Type>
                </Credential>
                <Label>
                    <Text>User name</Text>
                    <Type>plain</Type>
                </Label>
                <Input>
                    <AssistiveText>Please supply username</AssistiveText>
                    <Text>
                        <Secret>false</Secret>
                        <ReadOnly>false</ReadOnly>
                        <InitialValue/>
                        <Constraint>.+</Constraint>
                    </Text>
                </Input>
            </Requirement>
            <Requirement>
                <Credential>
                    <Type>none</Type>
                </Credential>
                <Label>
                    <Text> Please submit credentials to continue Login ...</Text>
                    <Type>confirmation</Type>
                </Label>
                <Input/>
            </Requirement>
            <Requirement>
                <Credential>
                    <ID>saveCredentials</ID>
                    <Type>savecredentials</Type>
                </Credential>
                <Label>
                    <Text>Remember my password</Text>
                    <Type>plain</Type>
                </Label>
                <Input>
                    <CheckBox>
                        <InitialValue>false</InitialValue>
                    </CheckBox>
                </Input>
            </Requirement>
            <Requirement>
                <Credential>
                    <ID>loginBtn</ID>
                    <Type>none</Type>
                </Credential>
                <Label>
                    <Type>none</Type>
                </Label>
                <Input>
                    <Button>Log On</Button>
                </Input>
            </Requirement>
        </Requirements>
    </AuthenticationRequirements>
</AuthenticateResponse>
<!--NeedCopy-->

Referencias

Autenticación a NetScaler mediante AD FS 4.0 en Server 2016, Citrix FAS y Azure MFA en Azure Cloud (2018). Recuperado de https://www.jgspiers.com/authentication-to-netscaler-using-ad-fs-4-0-server-2016-citrix-fas-azure-mfa-azure-cloud/

Configure Azure MFA como proveedor de autenticación con AD FS. (2019). Recuperado de https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-ad-fs-and-azure-mfa

Implementación de una comunidad de servidores de federación. (2017). Recuperado de https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/deployment/deploying-a-federation-server-farm

Implementación de ADFS del Servicio de autenticación federada. (2018). Recuperado de https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/secure/federated-authentication-service/fas-architectures/fas-adfs.html

Guía para implementar NetScaler como proxy de Servicios de federación de Active Directory. (n.d.). Recuperado de https://www.citrix.com/content/dam/citrix/en_us/documents/products-solutions/guide-to-deploying-netscaler-as-an-active-directory-federation-services-proxy.pdf

Cómo funciona: Autenticación multifactor de Azure (2018). Recuperado de https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks

Planificación de una implementación de Azure Multi-Factor Authentication basada en la nube (2019). Recuperado de https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-getstarted

Tijl Van den Broeck. (7 de diciembre de 2017). ADFS v3 en Windows Server 2012 R2 con NetScaler. Recuperado de https://www.citrix.com/blogs/2015/05/29/adfs-v3-on-windows-server-2012-r2-with-netscaler/

Transición a la nube híbrida y SaaS con Citrix Gateway. (n.d.). Recuperado de https://www.citrix.com/products/citrix-gateway/resources/netscaler-unified-gateway.html

Inicio de sesión de usuario con la autenticación PassThrough de Azure Active Directory. (2018). Recuperado de https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta

Escrito por Saman Salehian, Ingeniero de Ventas de Networking Lead.

Autenticación multifactor de Citrix Gateway y Microsoft Azure