StoreFront

Autenticación de Entra ID a través de OIDC e inicio de sesión único en VDA

Este artículo describe cómo configurar StoreFront y un NetScaler ADC para permitir a los usuarios autenticarse con Entra ID a través de OIDC y, a continuación, iniciar sesión único en un VDA unido a Entra.

IMPORTANTE:

La autenticación de Entra ID a través de OIDC y el inicio de sesión único en VDA se encuentra actualmente en versión preliminar. Esta función se proporciona sin soporte y aún no se recomienda para su uso en entornos de producción.

Requisitos previos

  • NetScaler ADC
  • StoreFront 2507 LTSR CU1 o superior
  • Experiencia moderna
  • Microsoft Entra ID y una cuenta con uno de los siguientes permisos:
    • Administrador de aplicaciones en la nube
    • Administrador de aplicaciones
    • Administrador global
  • Suscripción a DaaS con conectores. Esto no está disponible con CVAD.
  • Escritorios y/o aplicaciones publicados
  • Para los lanzamientos desde un navegador web a la aplicación Citrix Workspace, para habilitar el SSO en los VDA, extensión web de Citrix.

Problemas y limitaciones conocidos

  • Habilitar Federated Authentication Service en un almacén que utiliza la autenticación de Entra ID no es compatible y podría provocar errores de inicio.
  • Si un almacén incluye un sitio de Citrix Virtual Apps and Desktops y un usuario se autentica mediante Entra ID a través de OIDC, StoreFront no enumera ningún recurso de ese sitio. [WSP-30880]
  • El inicio de sesión único (SSO) de Entra ID en VDA solo es compatible cuando se utiliza la autenticación basada en OIDC. No es compatible con SAML.
  • StoreFront utiliza una gran cantidad de RAM cuando un usuario forma parte de muchos grupos de Entra. [WSP-29276]

Autenticación de Entra ID mediante OIDC

Esta sección describe cómo configurar NetScaler y StoreFront para que los usuarios puedan autenticarse mediante Entra ID. En esta configuración, los usuarios pueden tener una identidad híbrida o una identidad solo de Entra sin una cuenta de Active Directory.

Crear una aplicación de Microsoft Azure Entra ID

Un registro de aplicación en Microsoft Entra ID define su aplicación para que Entra ID la reconozca (en este caso, NetScaler OIDC). Este registro también gestiona las solicitudes de autenticación y autorización de la aplicación. Debido a que OAuth requiere un proveedor de identidades (IdP) de confianza para autenticar a los usuarios y emitir tokens, registrar su aplicación le dice a Entra ID: “Esta aplicación le utiliza a usted como su IdP para los flujos de OAuth”.

  1. Inicie sesión en el portal de Azure para el inquilino de Entra ID que utiliza para la autenticación de NetScaler o StoreFront.
  2. Vaya a Recurso de Microsoft Entra ID > Administrar > Registros de aplicaciones y, a continuación, seleccione Nuevo registro.
  3. Asigne un nombre a la aplicación, por ejemplo, Autenticación de NetScaler StoreFront.
  4. En Tipos de cuenta admitidos, seleccione Cuentas solo en este directorio organizativo.
  5. En URI de redirección, seleccione Web para el tipo de aplicación que desea crear. Introduzca el URI donde se envía el token de acceso. Utilice el formato <URL del servidor virtual de NetScaler>/oauth/login, por ejemplo https://netscalerentra.customer.com/oauth/login.

    ID de Azure

Crear secreto de cliente

Para crear el secreto de cliente:

  1. Después de registrar la aplicación, vaya a Administrar > Certificados y secretos.
  2. Seleccione Secretos de cliente y, a continuación, seleccione Nuevo secreto de cliente. Su aplicación utiliza estas credenciales para comunicarse de forma segura con el IdP y solicitar tokens.
  3. Proporcione una descripción del secreto y una duración.
  4. Después de crear el secreto, registre su valor, ya que lo necesitará más adelante en el proceso de configuración y solo es visible durante esta fase de creación.

Azure NetScaler

Configurar permisos de aplicación

Para configurar los permisos de la aplicación:

  1. Vaya a Administrar > Registros de aplicaciones y, a continuación, seleccione su aplicación.
  2. Seleccione Administrar > Permisos de API.
  3. El permiso User.Read ya está agregado de forma predeterminada.
  4. Agregue openid y profile.
  5. Seleccione Conceder consentimiento de administrador para <nombre de inquilino> y acepte.

«Conceder consentimiento de administrador para» en los permisos de API de Microsoft Entra ID significa que un administrador da su aprobación, en nombre de todos los usuarios de la organización, para que una aplicación acceda a recursos o API específicos con los permisos solicitados.

Permiso de concesión de Azure

Configurar Citrix DaaS para habilitar la confianza XML

De forma predeterminada, Citrix DaaS autentica las solicitudes utilizando las credenciales de Active Directory del usuario. Con la autenticación de Entra ID, StoreFront no tiene las credenciales. Por lo tanto, debe configurar DaaS para que confíe en StoreFront sin necesidad de autenticación. Se recomienda encarecidamente que habilite las claves de seguridad para proporcionar autenticación a nivel de servicio en su lugar.

  1. Inicie sesión en Citrix Cloud y vaya a la consola de DaaS.
  2. Vaya a Configuración.
  3. Active la confianza XML.

    Permiso de concesión de Azure

  4. (Paso opcional) Para mayor seguridad, puede habilitar las claves de seguridad entre DaaS y StoreFront. Para obtener más información, consulte Administrar claves de seguridad en la documentación de Citrix DaaS™.

Configurar el perfil de autenticación de NetScaler

Esta sección describe cómo configurar un perfil de autenticación de NetScaler que puede vincular a su servidor virtual VPN de puerta de enlace. Esta configuración le indica al ADC cómo redirigir a los usuarios a un IdP de OAuth externo (como Microsoft Entra ID) para iniciar sesión y cómo manejar los tokens de OAuth recibidos después de la autenticación. Especifica los puntos finales, las credenciales de cliente, los ámbitos y cómo el ADC extrae la información del usuario de los tokens.

Necesita el secreto de cliente de los pasos anteriores y los puntos finales de autenticación de Microsoft Entra ID. Puede encontrar los puntos finales de autenticación en el portal de Azure yendo a la Descripción general del registro de su aplicación y haciendo clic en la pestaña Puntos finales.

Crear servidor virtual de autenticación

El servidor virtual de autenticación gestiona la autenticación de usuarios.

add authentication vserver EntraId_Authentication_VirtualServer SSL 0.0.0.0 443 \
  -state ENABLED \
  -authentication ON \
  -td 0 -appflowLog ENABLED \
  -noDefaultBindings NO
bind ssl vserver EntraId_Authentication_VirtualServer \
  -certkeyName <Certificate Key Name>
<!--NeedCopy-->

Crear política y acción de OAuth

La acción de OAuth especifica cómo NetScaler ADC interactúa con un IdP de OAuth, como Microsoft Entra ID. Esta acción permite que Citrix Gateway redirija a los usuarios al IdP para iniciar sesión y gestione el token de OAuth devuelto. Establece userNameField en oid, lo que hace que la puerta de enlace pase el OID como nombre de usuario al autenticarse en StoreFront. StoreFront valida que el OID coincida con los detalles que obtiene al buscar el token de acceso de Entra ID; de lo contrario, la autenticación falla.

Necesita el ID de cliente y el secreto de cliente de los pasos anteriores.

add authentication OAuthAction EntraId_Oauth_Server \
  -authorizationEndpoint "https://login.microsoftonline.com/<TenantId>/oauth2/v2.0/authorize\?prompt=login" \
  -tokenEndpoint "https://login.microsoftonline.com/<TenantId>/oauth2/v2.0/token" \
  -clientID <ClientId> \
  -clientSecret <ClientSecret> \
  -Attribute1 email \
  -Attribute2 family_name \
  -Attribute3 given_name \
  -Attribute4 upn \
  -CertEndpoint "https://login.microsoftonline.com/<TenantId>/discovery/v2.0/keys" \
  -userNameField oid \
  -allowedAlgorithms HS256 RS256 RS512 \
  -PKCE ENABLED \
  -tokenEndpointAuthMethod client_secret_post \
  -OAuthType GENERIC \
  -grantType CODE \
  -refreshInterval 1440
add authentication Policy EntraId_Authentication_Policy \
  -rule true \
  -action EntraId_Oauth_Server
<!--NeedCopy-->

El authorizationEndpoint incluye el parámetro de cadena de consulta prompt=login para que los usuarios se vean obligados a volver a autenticarse cuando intenten acceder a StoreFront a través de NetScaler.

Vincular la directiva de autenticación al servidor virtual

bind authentication vserver EntraId_Authentication_VirtualServer \
  -policy EntraId_Authentication_Policy \
  -priority 100 \
  -gotoPriorityExpression END
<!--NeedCopy-->

Crear perfil de autenticación

add authentication authnProfile EntraId_Auth_Profile \
  -authnVsName EntraId_Authentication_VirtualServer \
  -AuthenticationLevel 0
<!--NeedCopy-->

Crear servidor virtual VPN y vincular el perfil de autenticación

Complete los pasos 1, 2 y 4 de Integrar NetScaler Gateway con StoreFront, utilizando el perfil de autenticación creado en los pasos anteriores.

Alternativamente, si ya tiene un Citrix Gateway adecuado, puede vincularle el nuevo perfil de autenticación. La ejecución de este comando reemplaza el perfil de autenticación existente.

set vpn vserver <StoreFront ICA Proxy vServer> \
  -authentication ON \
  -authnProfile EntraId_Auth_Profile
<!--NeedCopy-->

Configuración de inyección de tokens de Entra ID para SSO en StoreFront

Después de que el Citrix Gateway autentique al usuario, debe pasar suficiente información a StoreFront para que este pueda validar que el usuario está autenticado y buscar la pertenencia a grupos. De forma predeterminada, el Citrix Gateway solo envía el nombre de usuario y la contraseña de Active Directory. En el caso de la autenticación de Entra ID, debe pasar el token de acceso de Entra ID para que StoreFront pueda buscar información del usuario mediante la API de Microsoft Graph. Para lograr esto, debe agregar una directiva de reescritura que añada el token de Entra ID a la llamada que realiza para autenticar al usuario en StoreFront. Si la directiva de reescritura del token de acceso de Entra ID no surte efecto, el inicio de sesión fallará. Si la función de directiva de reescritura está deshabilitada de forma predeterminada y no está ya habilitada, debe habilitarla primero.

enable ns feature Rewrite
add rewrite action EntraId_Oauth_Insert_AccessToken_Header insert_http_header X-Citrix-OIDC-Access-Token "AAA.USER.ATTRIBUTE(\"accesstoken\")" \
  -comment "A rewrite policy to add the OAUTH access_token to subsequent user authentication requests"
add rewrite policy EntraId_Oauth_Insert_AccessToken_Policy "HTTP.REQ.URL.TO_LOWER.ENDSWITH(\"gatewayauth/login\") || HTTP.REQ.URL.TO_LOWER.ENDSWITH(\"citrixagbasic/authenticate\")" EntraId_Oauth_Insert_AccessToken_Header \
  -comment "A rewrite policy to add the OAUTH access_token to subsequent user authentication requests"
bind vpn vserver <StoreFront ICA Proxy vServer> \
  -policy EntraId_Oauth_Insert_AccessToken_Policy \
  -priority 100 \
  -gotoPriorityExpression END \
  -type REQUEST
<!--NeedCopy-->

Configurar Citrix Gateway en StoreFront

  1. Agregar una instancia de NetScaler Gateway en StoreFront.

  2. Configurar los Citrix Gateways.

    • Establezca el tipo de inicio de sesión en Dominio.

    • Especifique una URL de devolución de llamada válida. Esto es necesario para la autenticación de Entra ID con StoreFront.

  3. Configurar el gateway para acceso remoto para el almacén que agrega los recursos de Citrix DaaS.

  4. Habilite y configure la autenticación de Entra ID desde NetScaler Gateway. Ejecute el siguiente PowerShell, reemplazando el ID de inquilino con el ID de su inquilino de Entra ID y /Citrix/EntraStore con la ruta del almacén.

  $store = Get-STFStoreService /Citrix/EntraStore
  $authenticationService = Get-STFAuthenticationService -Store $store
  Set-STFEntraIdSettings -AuthenticationService $authenticationService -TenantId "<Your tenant id>" -Enabled $true
  <!--NeedCopy-->

Configurar el inicio de sesión único de Entra ID en los VDA

Una vez que haya configurado StoreFront y su puerta de enlace de Citrix para autenticar usuarios mediante Entra ID, puede habilitar el inicio de sesión único de Entra ID en los VDA sin necesidad de FAS. Habilite esto solo una vez que haya completado la configuración de DaaS. Para obtener más información, consulte Inicio de sesión único de Microsoft Entra. Esto requiere la siguiente configuración adicional para StoreFront y NetScaler ADC.

Configurar el cambio de contenido de NetScaler ADC

Normalmente, todas las solicitudes a StoreFront pasan por el VServer de la puerta de enlace y, por lo tanto, requieren autenticación. Cuando el usuario inicia un VDA unido a Entra ID, la aplicación Citrix Workspace debe autenticarse de nuevo en Azure (SSO si la sesión de Entra ID sigue siendo válida) y recuperar un token de acceso. Como parte de este flujo, StoreFront genera un token que debe ser validado por un servicio que se ejecuta en Citrix Cloud. Este servicio debe poder volver a llamar al punto final de StoreFront /Citrix/<StoreWeb>/Tickets/RedeemStoreTicket para validar el token. Dado que este servicio no tiene acceso a la sesión de NetScaler, es necesario omitir el servicio virtual VPN para las llamadas destinadas a canjear el ticket. Para lograr esto, puede usar un conmutador de contenido.

Diagrama que muestra el flujo de solicitudes utilizando el conmutador de contenido

Las llamadas a /Citrix/<StoreWeb>/Tickets/RedeemStoreTicket se dirigen a un equilibrador de carga que reenvía las solicitudes a StoreFront, omitiendo la puerta de enlace. Tenga en cuenta que el equilibrador de carga es necesario, ya que el conmutador de contenido no se puede configurar para dirigir el tráfico directamente a una URL y requiere un servidor virtual como destino. El equilibrador de carga no realiza ningún equilibrio de carga y simplemente reenvía el tráfico a StoreFront. Si ya tiene un equilibrador de carga de StoreFront adecuado en la misma máquina, puede usarlo en su lugar.

Todas las demás llamadas se dirigen al servidor virtual VPN de la puerta de enlace.

Crear un equilibrador de carga para pasar del conmutador de contenido a StoreFront

Si ya tiene un servidor virtual de equilibrador de carga que precede a su grupo de servidores de StoreFront y se ejecuta en la misma máquina que la puerta de enlace, puede omitir este paso y configurar el conmutador de contenido para enviar el tráfico directamente a ese servidor virtual. De lo contrario, debe crear un equilibrador de carga para pasar el tráfico a los servidores de StoreFront. Esto se debe a que las acciones del conmutador de contenido deben hacer referencia a un servidor virtual.

Los pasos son ligeramente diferentes según si StoreFront está configurado para HTTPS (recomendado) o HTTP.

StoreFront está configurado para HTTPS

Cree un servicio stf_srv que represente a StoreFront utilizando su dirección IP y vincúlelo a un equilibrador de carga SSL sin persistencia.

add service stf_srv <StoreFront Ip Address> SSL 443
add lb vserver lb_vs SSL <lb_vs Ip Address> 443 -persistenceType NONE -cltTimeout 180
bind lb vserver lb_vs stf_srv
<!--NeedCopy-->
StoreFront está configurado para HTTP

Cree un servicio stf_srv que represente a StoreFront utilizando su FQDN y vincúlelo a un equilibrador de carga HTTP sin persistencia.

add server storefront1 <storefront fqdn>
add service stf_srv storefront1 HTTP 80
add lb vserver lb_vs HTTP 0.0.0.0 0 -persistenceType NONE -cltTimeout 180
bind lb vserver lb_vs stf_srv
<!--NeedCopy-->

Crear servidor virtual de conmutación de contenido SSL

Cree un servidor virtual de conmutación de contenido SSL para gestionar las solicitudes de los clientes. Este servidor virtual de conmutación de contenido escucha el tráfico HTTPS en el puerto 443 y enruta las solicitudes al servidor virtual VPN de la puerta de enlace o las pasa a StoreFront a través del equilibrador de carga.

De forma predeterminada, la conmutación de contenido está deshabilitada, por lo que debe habilitarla si no lo ha hecho antes.

enable feature CS
add cs vserver cs_vs SSL <cs_vs Ip Address> 443 -cltTimeout 180 -persistenceType NONE
bind ssl vserver cs_vs -certkeyName <Certificate Name>
<!--NeedCopy-->

Crear política de conmutación de contenido para el canje de tickets

Cree una política de conmutación de contenido para el equilibrio de carga basada en una URL que contenga una ruta de canje de tickets de StoreFront.

Esta política coincide con las solicitudes cuando la URL contiene /Citrix/<StoreWeb>/Tickets/RedeemStoreTicket y las enruta al equilibrador de carga sin pasar por el servidor virtual VPN.

Sustituya StoreEntraWeb por el nombre del sitio web de StoreFront de la política web del servidor virtual de StoreFront. Puede utilizar el equilibrador de carga lb_vs creado en el paso anterior, o un servidor virtual de equilibrador de carga existente que esté delante de sus servidores StoreFront.

add cs action cs_lb_vs -targetLBVserver lb_vs
add cs policy cs_lb_vs_pol -rule "HTTP.REQ.URL.CONTAINS(\"/Citrix/<StoreWeb>/Tickets/RedeemStoreTicket\")" -action cs_lb_vs
bind cs vserver cs_vs -policyName cs_lb_vs_pol -priority 100
<!--NeedCopy-->

Crear política de conmutación de contenido para todo el demás tráfico

Cree una política de conmutación de contenido general para enviar todo el demás tráfico de StoreFront a través del servidor virtual VPN para la autenticación.

add cs action cs_vpn_vs -targetVserver <VPN vServer>
add cs policy cs_vpn_pol -rule TRUE -action cs_vpn_vs
bind cs vserver cs_vs -policyName cs_vpn_pol -priority 110
<!--NeedCopy-->

Configurar el inicio de sesión único de VDA Entra ID

El inicio de sesión único permite a los usuarios autenticarse una vez cuando inician sesión en Citrix Gateway y, a continuación, acceder a sus escritorios y aplicaciones virtuales sin tener que volver a introducir sus credenciales en el VDA.

$store = Get-STFStoreService /Citrix/EntraStore
Set-STFStoreLaunchOptions -StoreService $store -EntraIdSsoEnabled $true
<!--NeedCopy-->

Consideraciones para habilitar o deshabilitar el SSO de Entra ID

  1. Habilite el inicio de sesión único de Entra ID solo una vez que haya completado toda la configuración descrita en Inicio de sesión único de Microsoft Entra. De lo contrario, el inicio de sesión único fallará y los usuarios podrían experimentar retrasos o errores en el lanzamiento.
Autenticación de Entra ID a través de OIDC e inicio de sesión único en VDA