Conceptos avanzados

Citrix Gateway y la autenticación multifactor de Microsoft Azure

Citrix Gateway presenta todas las aplicaciones alojadas, SaaS, web, empresariales y móviles a los usuarios en cualquier dispositivo y navegador. Utiliza la autenticación nFactor para autenticar a los usuarios con Microsoft AD local y aprovecha Microsoft AD FS para la autenticación multifactor (MFA) de Azure.

Citrix Gateway

Citrix Gateway proporciona a los usuarios un único punto de acceso e inicio de sesión único (SSO) a las aplicaciones empresariales y los datos implementados en un centro de datos y en la nube. Se entrega como SaaS en una variedad de dispositivos: portátiles, equipos de escritorio, clientes ligeros, tabletas y teléfonos inteligentes. Citrix Gateway proporciona consolidación, ayuda a reducir la huella de la infraestructura de acceso remoto, reduce los costos y facilita la administración y una mejor experiencia para el usuario final. Citrix Gateway ayuda a la TI a la transición a entornos de nube híbrida y SaaS.

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

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

  • Directorio de usuarios local

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

  • Autenticación multifactor (nFactor)

Citrix Gateway proporciona mecanismos de autenticación 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. Admite todos los mecanismos de autenticación como RADIUS, TACACS, NTLM, Diameter, SAML 2.0, OAuth 2.0 y OpenID 2.0.

  • Directivas de control de acceso contextual

Citrix Gateway permite un control de acceso granular a las aplicaciones empresariales basado en el 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 aplicación. 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 de extremo a extremo para todas las aplicaciones a las que se accede a través de Citrix Gateway. Proporciona información a los equipos de soporte de aplicaciones para solucionar problemas relacionados con errores de autenticación, incluidos errores de comprobación de EPA y errores de inicio de sesión único.

Aplicaciones

Aplicaciones compatibles

Microsoft Azure MFA

Las personas se conectan a los recursos de la organización en escenarios cada vez más complicados. Las personas se conectan desde dispositivos propiedad de la organización, personales y públicos, dentro y fuera de la red corporativa, utilizando teléfonos inteligentes, tabletas, PC y ordenadores portátiles, a menudo en múltiples 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, sin importar su complejidad, utilizadas en diferentes 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 en varias cuentas. Los ataques sofisticados de phishing y otras técnicas de ingeniería social pueden provocar que los nombres de usuario y las contraseñas se publiquen y vendan en la dark web.

La seguridad del proceso de verificación en dos pasos reside en su enfoque por capas. Comprometer múltiples factores de autenticación representa un desafío significativo para los atacantes. Incluso si un atacante logra averiguar la contraseña del usuario, esta es inútil sin tener también la 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 tienes (un dispositivo de confianza que no se duplica fácilmente, como un teléfono)
  • Algo que eres (datos biométricos)

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

Métodos de implementación de Microsoft Azure MFA

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

Servidor Azure MFA

El servidor de autenticación multifactor de Microsoft Azure fue el método original y va a ser obsoleto. No debe considerarse para ninguna nueva implementación, ya que

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

Extensión de Network Policy Server (NPS) de Azure MFA

La extensión de 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/fuera de la regla MFA o activada/desactivada.
  • No es compatible con las directivas de acceso condicional de Azure AD, de forma similar al método de integración SAML. Las directivas de acceso condicional ofrecen experiencias de usuario mucho más completas y mejores.
  • Los usuarios deben estar registrados en MFA antes de usar el adaptador NPS. A diferencia de Azure MFA basado en la nube y el acceso condicional, si el usuario no está registrado, la extensión NPS no puede autenticar al usuario, lo que genera más llamadas al servicio de asistencia.
  • Cuando el adaptador NPS invoca MFA, utiliza la opción predeterminada registrada por el usuario. No hay ninguna notificación visual para el usuario de que se requiere MFA y está en curso. No hay interfaz de usuario para que el usuario cambie los métodos de MFA durante un proceso controlado. Si el usuario no tiene su dispositivo predeterminado consigo, 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 los hashes de contraseñas no están sincronizados con Azure AD, puede usar AD local para Lightweight Directory Access Protocol (LDAP) y habilitar Azure MFA como parte de las directivas de acceso en las partes de confianza de AD FS. A partir de Windows Server 2016, ahora puede configurar Azure MFA para la autenticación principal.

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

Azure AD y Azure MFA

Si su organización está sincronizando los hashes de contraseñas en Azure AD, Azure MFA se puede aprovechar a través de directivas de acceso condicional para solicitar a los usuarios una autenticación de segundo factor.

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

Autenticación de paso de Azure AD y Azure MFA

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

  • Azure AD PTA requiere la instalación de un agente ligero en las instalaciones.
  • Azure AD PTA protege las cuentas de usuario al funcionar sin problemas con las políticas de acceso condicional de Azure AD, incluida Azure MFA.
  • 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 dentro de su 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 características requiere aprovechar Azure MFA como segundo factor de autenticación:

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

Puntos de diseño

Estos son los puntos de diseño para la solución propuesta:

  • Se requiere acceder de forma segura a aplicaciones alojadas, SaaS, empresariales y web en un único portal.
  • Los usuarios solo deben introducir sus credenciales una vez durante el proceso de autenticación.
  • Se debe proporcionar inicio de sesión único 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:

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

Citrix Gateway aprovecha la función de autenticación, autorización y auditoría (Citrix ADC AAA) y los mecanismos de autenticación nFactor para autenticar al usuario con la política LDAP y aprovechar la política de acceso en la parte de retransmisión de AD FS para activar el proceso de validación de Azure MFA. Después de que Azure MFA valida al usuario, AD FS genera una aserción SAML (respuesta SAML) y redirige al usuario de vuelta a Citrix Gateway. En ese momento, el usuario está autenticado y Citrix Gateway presenta todas las aplicaciones que el usuario está autorizado a usar.

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 la entidad de certificación de Microsoft:

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 para la solución:

Diagrama de secuencia

Pasos de autenticación

Los pasos de autenticación son:

  1. El usuario navega a https://access.ctxdemos.com.
  2. Citrix Gateway redirige al usuario al primer VIP AAA de Citrix ADC (no direccionable).
  3. El primer VIP AAA de Citrix ADC utiliza un inicio de sesión sin esquema, que está configurado con un inicio de sesión único. Luego comienza a procesar las políticas de autenticación avanzadas.
  4. La primera política de autenticación es SAML SP a un VIP LB no direccionable para generar cookies de autenticación.
  5. El VIP LB auxiliar está configurado para usar el segundo VIP AAA de Citrix ADC (direccionable) para la autenticación. Por lo tanto, redirige al usuario al segundo VIP de autenticación, autorización y auditoría.
  6. El segundo VIP AAA de Citrix ADC utiliza el esquema de inicio de sesión Username Only, que solicita al usuario el nombre de usuario. Luego comienza a procesar las políticas de autenticación avanzadas.
  7. La primera política 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. Una vez que el resultado de la validación es exitoso, comienza a procesar el siguiente factor de autenticación, que es la política LDAP.
  8. La política LDAP utiliza el esquema de inicio de sesión UsernameAndPassword y un campo de nombre de usuario prellenado, y solicita al usuario la contraseña de AD.
  9. Cuando la autenticación en el segundo VIP AAA de Citrix ADC se completa con éxito, vuelve al VIP LB auxiliar que genera una respuesta SAML para el primer VIP de autenticación, autorización y auditoría.
  10. El primer VIP AAA de Citrix ADC comienza a procesar el siguiente factor, que es una Extracción de grupo para garantizar que los grupos del usuario se extraigan de AD y se almacenen en la variable de autenticación, autorización y auditoría para ser utilizada más adelante en el proceso.
  11. El primer VIP AAA de Citrix ADC comienza a procesar el siguiente factor, que es un SAML SP a un VIP de proxy de AD FS en Citrix ADC.

    Nota:

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

  12. El VIP de proxy de AD FS valida que las cookies de autenticación (NSC_TMAA y NSC_TMAS) estén configuradas. Luego envía la solicitud SAML a un servidor AD FS de back-end (los servidores AD FS de back-end deben estar equilibrados en un Citrix ADC interno para la alta disponibilidad y la resiliencia del servicio).
  13. El servidor AD FS procesa la solicitud SAML. Debido a que la política de acceso en la parte de confianza está configurada para “Permitir a todos los usuarios y requerir MFA para la autenticación”, se activa el proceso de autenticación de Azure MFA.
  14. Azure MFA procesa el nombre de usuario. Si ya está registrado, desafía al usuario con el método configurado. Si no, solicita al usuario que se registre y establezca los métodos de autenticación primario y secundario.
  15. Una vez que el proceso de autenticación de Azure MFA se completa con éxito, AD FS genera una respuesta SAML para Citrix Gateway (primer VIP AAA de Citrix ADC).
  16. El primer VIP AAA de Citrix ADC recibe una respuesta SAML y confirma que el proceso de autenticación del usuario se ha completado.
  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 usar. Además, procesa la pertenencia a grupos del usuario para presentar marcadores publicados en Citrix Gateway.

Pantallas de autenticación

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

![Nombre de usuario de la página de inicio de sesión de Citrix Gateway]](/es-es/advanced-concepts/media/citrix-unified-gateway-logon-page-username-only.png) Nombre de usuario y contraseña de la página de inicio de sesión de Citrix Gateway Código de verificación

Implementación

Microsoft AD FS

Requisitos de certificado

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

Tipo de certificado Descripción Qué se debe saber antes de la implementación
Certificado Secure Sockets Layer (SSL) Este es un certificado estándar de Secure Sockets Layer (SSL) que se utiliza para proteger las comunicaciones entre los servidores de federación y los clientes. Este certificado debe estar vinculado al sitio web predeterminado en Internet Information Services (IIS) para un servidor de federación o un proxy de servidor de federación. Para un proxy de servidor de federación, la vinculación debe configurarse en IIS antes de ejecutar correctamente el Asistente para la configuración del proxy de servidor de federación. Recomendación: Dado que este certificado debe ser de confianza para los clientes de AD FS, utilice un certificado de autenticación de servidor emitido por una autoridad de certificación (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 esta razón, es posible que desee considerar la posibilidad de elegir un nombre de sujeto en cualquier certificado nuevo emitido por CA que represente mejor el nombre de su empresa u organización ante los socios.
Certificado de comunicación de servicio Este certificado habilita la seguridad de mensajes WCF para proteger las comunicaciones entre los 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 tokens 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 más tarde a un certificado emitido por una CA mediante el complemento de administración de AD FS, según las necesidades de su organización.
Certificado de descifrado de tokens Este es un certificado SSL estándar que se utiliza para descifrar cualquier token entrante que esté cifrado por un servidor de federación asociado. También se publica en los metadatos de federación. De forma predeterminada, AD FS crea un certificado autofirmado. Sin embargo, puede cambiarlo más tarde a un certificado emitido por una CA mediante el complemento de administración de AD FS, según las necesidades de su organización.

Configuración del entorno de demostración

Tipo de certificado Configuración del entorno de demostración
Certificado Secure Sockets Layer (SSL) Certificado interno emitido por una CA emisora interna en el servidor AD FS. Certificado público de confianza en Citrix ADC.
Certificado de comunicación de servicio Certificado interno emitido por la autoridad de certificación emisora interna de AHS.
Certificado de firma de tokens 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.

Autoridad de certificación

Requisitos de la cuenta de servicio

Puede crear una cuenta de servicio o aprovechar las cuentas de servicio administradas de grupo (gMSA). Para usar 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 administrada de grupo (gMSA) como la cuenta de servicio de AD FS que creará más adelante. Ejecute este comando con derechos de administrador de dominio.

Clave raíz

Requisitos de registro DNS

Necesita un registro DNS A para su nombre de 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 Interno A 22.22.22.6
sts.ctxdemox.com Externo A 40.85.225.175

Agregar el rol de AD FS y configurar la granja 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 granja 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 granja de servidores de federación y, a continuación, haga clic en Siguiente.

Crear el primer servidor de federación

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

Conectarse a los servicios de dominio de Active Directory

En la página Especificar propiedades del servicio, complete los siguientes pasos 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 asunto del certificado.
  • Introduzca el nombre para mostrar del servicio de federación. Por ejemplo, CTXDEMOS STS.

Especificar propiedades del servicio

En la página Especificar cuenta de servicio, seleccione Crear una cuenta de servicio administrada de grupo e introduzca un nombre único para esta cuenta. Las cuentas de servicio administradas de 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 administrada de grupo

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

Especificar base de datos de configuración

En la página Revisar opciones, verifique las selecciones de configuración y, a continuación, haga clic en Siguiente.

Revisar opciones(/es-es/advanced-concepts/media/adfs-post-deployment-configuration-review-options.png)

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

Comprobaciones de requisitos previos(/es-es/advanced-concepts/media/adfs-post-deployment-configuration-pre-requisite-checks.png)

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

Resultados de la configuración posterior a la implementación(/es-es/advanced-concepts/media/adfs-post-deployment-configuration-results.png)

Nota:

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

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

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

Configurar la granja de AD FS - automatizado

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 AD FS

En cada uno de sus servidores 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 granja 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 de 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 en la intranet y la extranet.

Método de autenticación principal(/es-es/advanced-concepts/media/adfs-configuration-with-azuremfa-primary-authentication-method.png)

Método de autenticación multifactor(/es-es/advanced-concepts/media/adfs-configuration-with-azuremfa-multi-factor-authentication-method.png)

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 la parte que confía y seleccione Agregar confianza de la parte que confía.

Agregar una confianza de la parte que confía(/es-es/advanced-concepts/media/adfs-add-relying-party-trust-start.png)

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

Introducir datos sobre la parte que confía(/es-es/advanced-concepts/media/adfs-add-relying-party-trust-enter-data-about-the-relying-party-manually.png)

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

Notas opcionales(/es-es/advanced-concepts/media/adfs-add-relying-party-trust-display-name-and-optional-notes.png)

Haga clic en Siguiente.

Configurar un certificado(/es-es/advanced-concepts/media/adfs-add-relying-party-trust-configure-certificate.png)

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

Configurar una URL

Introduzca una cadena de identificador único para la confianza de la parte que confía. En el entorno de demostración, 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 la 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 la regla de notificació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 use Enviar reclamaciones mediante una regla personalizada como Plantilla de regla de reclamación. Introduzca un nombre descriptivo para Nombre de regla de reclamació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 usuario de confianza > Citrix ADC y seleccione Propiedades. Seleccione Puntos finales y agregue un punto final haciendo clic en Agregar SAML para cierre de sesión. En la lista Tipo de punto final, seleccione Cierre de sesión SAML. Para Enlace, seleccione POST, y para URL de confianza, introduzca https://sts.ctxdemos.com/adfs/ls/?wa=wsignout1.0. Esto actuará como URL de cierre de sesión al cerrar sesión en Citrix ADC. Haga clic en Aceptar.

Cierre de sesión SAML

Haga clic con el botón derecho en Confianza de usuario de confianza > Citrix ADC y seleccione Propiedades. Seleccione Cifrado y agregue el certificado SSL público que está 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 la página de inicio de sesión iniciada por IdP

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

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

Probar la granja de AD FS

Abra un navegador web y vaya a:

Citrix ADC y Citrix Gateway

Configurar Citrix Gateway

Puede configurar Citrix Gateway a través del asistente. Inicie sesión en la GUI de administración de Citrix ADC, vaya a Unified Gateway y haga clic en Create New Gateway. Luego haga clic en Continue.

Acceso público único

Introduzca el nombre, la IP y el FQDN para Unified Gateway y haga clic en Continue.

Configuración de Citrix Gateway

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

Certificado de servidor

Cree una política LDAP básica y vincúlela a Unified Gateway. Haga clic en Continue.

Autenticación

Cree un tema de portal basado en RfWebUI y vincúlelo 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 & XenDesktop® y, de la lista Choose Integration Point, seleccione StoreFront. Haga clic en Continue.

Seleccionar varias configuraciones

Introduzca una URL de StoreFront y haga clic en Recuperar almacenes. A continuación, introduzca la Default Active Directory Domain y la Secure Ticket Authority URL. Haga clic en Probar conectividad STA y, a continuación, en Continuar.

Probar conectividad

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

Continuar

Configurar Citrix Gateway e integrar 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 la CLI de Citrix ADC para configurar Citrix ADC como proxy de aplicación web (WAP) de AD FS:

# 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 en 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/

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

Implementación de una granja de servidores de federación. (2017). Recuperado de https://docs.microsoft.com/es-es/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/es-es/citrix-virtual-apps-desktops/secure/federated-authentication-service/fas-architectures/fas-adfs.html

Guía para implementar NetScaler como proxy de Active Directory Federation Services. (s.f.). 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/es-es/azure/active-directory/authentication/concept-mfa-howitworks

Planificación de una implementación de autenticación multifactor de Azure basada en la nube. (2019). Recuperado de https://docs.microsoft.com/es-es/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. (s.f.). Recuperado de https://www.citrix.com/products/citrix-gateway/resources/netscaler-unified-gateway.html

Inicio de sesión de usuario con autenticación de paso a través de Azure Active Directory. (2018). Recuperado de https://docs.microsoft.com/es-es/azure/active-directory/hybrid/how-to-connect-pta

Escrito por Saman Salehian, ingeniero de ventas líder en redes.

Citrix Gateway y la autenticación multifactor de Microsoft Azure