StoreFront

Autenticación de Entra ID mediante OIDC e inicio de sesión único en VDA

Este artículo describe cómo configurar StoreFront y un NetScaler ADC para permitir que los usuarios se autentiquen con Entra ID mediante OIDC y, a continuación, inicien sesión único en un VDA unido a Entra.

IMPORTANTE:

La autenticación de Entra ID mediante OIDC y el inicio de sesión único en VDA se encuentran 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 2511 o superior
  • 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 inicios desde un explorador web en la aplicación Citrix Workspace, para habilitar el SSO en los VDA, extensión web de Citrix.

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 tu 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 tu aplicación le dice a Entra ID: “Esta aplicación te usa como su IdP para los flujos de OAuth”.

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

    Azure ID

Crear secreto de cliente

Para crear un secreto de cliente:

  1. Después de registrar la aplicación, ve a Administrar > Certificados y secretos.
  2. Selecciona Secretos de cliente y, a continuación, selecciona Nuevo secreto de cliente. Tu aplicación usa estas credenciales para comunicarse de forma segura con el IdP y solicitar tokens.
  3. Proporciona una descripción del secreto y una duración.
  4. Después de crear el secreto, anota el valor del secreto porque lo necesitarás más adelante en el proceso de configuración y solo es visible durante esta etapa de creación.

Azure NetScaler

Configurar permisos de aplicación

Para configurar los permisos de la aplicación:

  1. Ve a Administrar > Registros de aplicaciones y, a continuación, selecciona tu aplicación.
  2. Selecciona Administrar > Permisos de API.
  3. El permiso User.Read ya está agregado de forma predeterminada.
  4. Agrega openid y profile.
  5. Selecciona Conceder consentimiento de administrador para <nombre del inquilino> y acepta.

“Conceder consentimiento de administrador para” en los permisos de API en 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.

Azure grant permission

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, debes configurar DaaS para que confíe en StoreFront sin requerir el uso de autenticación. Se recomienda encarecidamente que habilites las claves de seguridad para proporcionar autenticación a nivel de servicio.

  1. Inicia sesión en Citrix Cloud y ve a la consola de DaaS.
  2. Ve a Configuración.
  3. Activa la confianza XML.

    Azure grant permission

  4. (Paso opcional) Para mayor seguridad, puedes habilitar las claves de seguridad entre DaaS y StoreFront. Para obtener más información, consulta 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 puedes vincular a tu servidor virtual VPN de gateway. 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 de conexión, las credenciales de cliente, los ámbitos y cómo el ADC extrae la información del usuario de los tokens.

Necesitas el secreto de cliente de los pasos anteriores y los puntos de conexión de autenticación de Microsoft Entra ID. Puedes encontrar los puntos de conexión de autenticación en el portal de Azure yendo a la descripción general del registro de tu aplicación y haciendo clic en la ficha Puntos de conexión.

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
<!--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 a Citrix Gateway redirigir a los usuarios al IdP para iniciar sesión y manejar el token de OAuth devuelto. Establece el userNameField en oid, lo que hace que el gateway 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.

Necesitas 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 política 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

Completa 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 tienes un Citrix Gateway adecuado, puedes vincularle el nuevo perfil de autenticación. Ejecutar 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 Citrix Gateway autentica al usuario, debe pasar suficiente información a StoreFront para que pueda validar que el usuario está autenticado y buscar la pertenencia a grupos. De forma predeterminada, 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 utilizando la API de Microsoft Graph. Para lograr esto, debes agregar una política de reescritura que agregue el token de Entra ID a la llamada que realiza para autenticar al usuario en StoreFront. Si la política de reescritura del token de acceso de Entra ID no surte efecto, el inicio de sesión fallará. Si la función de política de reescritura está deshabilitada de forma predeterminada y aún no está habilitada, primero debes habilitarla.

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. Agrega una instancia de NetScaler Gateway en StoreFront.

  2. Configura los Citrix Gateways.

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

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

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

  4. Habilita y configura la autenticación de Entra ID desde NetScaler Gateway. Ejecuta el siguiente Powershell, reemplazando el ID de inquilino con el ID de tu 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 SSO de Entra ID en los VDA

Una vez que hayas configurado StoreFront y tu Citrix Gateway para autenticar a los usuarios mediante Entra ID, puedes habilitar el SSO de Entra ID en los VDA sin necesidad de FAS. Habilita esto solo una vez que hayas completado la configuración de DaaS. Para obtener más información, consulta 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 servidor virtual de gateway 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 de conexión de StoreFront /Citrix/<StoreWeb>/Tickets/RedeemStoreTicket para validar el token. Como este servicio no tiene acceso a la sesión de NetScaler, es necesario omitir el servicio virtual VPN para las llamadas para canjear el ticket. Para lograr esto, puedes 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 el gateway. Ten 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 tienes un equilibrador de carga de StoreFront adecuado en la misma máquina, puedes usarlo en su lugar.

Todas las demás llamadas se dirigen al servidor virtual VPN del gateway.

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

Si ya tienes un servidor virtual de equilibrador de carga que se encuentra delante de tu grupo de servidores StoreFront y se ejecuta en la misma máquina que el gateway, puedes omitir este paso y configurar el conmutador de contenido para enviar el tráfico directamente a ese servidor virtual. De lo contrario, debes 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

Crea un servicio stf_srv que represente a StoreFront utilizando su dirección IP y vincúlalo 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

Crea un servicio stf_srv que represente a StoreFront utilizando su FQDN y vincúlalo 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

Crea 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 del gateway 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 debes habilitarla si no lo has hecho anteriormente.

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

Crea 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/StoreEntraWeb/Tickets/RedeemStoreTicket y las enruta al equilibrador de carga sin pasar por el servidor virtual VPN.

Reemplaza StoreEntraWeb con el nombre del sitio web de StoreFront de la política web del servidor virtual de StoreFront. Puedes usar el equilibrador de carga lb_vs creado en el paso anterior o un servidor virtual de equilibrador de carga existente que se encuentre delante de tus servidores de StoreFront.

add cs action cs_lb_vs -targetLBVserver lb_vs
add cs policy cs_lb_vs_pol -rule "HTTP.REQ.URL.CONTAINS(\"/Citrix/StoreEntraWeb/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

Crea 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 Entra ID en los VDA

El inicio de sesión único permite a los usuarios autenticarse una vez al iniciar sesión en Citrix Gateway y luego 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. Habilita el inicio de sesión único solo si configuras la aplicación empresarial de Azure Entra ID y actualizas StoreFront con el inquilino. Si habilitas esta configuración para almacenes que actualmente usan Entra ID con SAML sin estas configuraciones, podría romper el inicio de sesión único existente si estás usando FAS.

  2. Si habilitas la configuración para almacenes existentes que usan Entra ID con SAML donde los VDA actualmente no tienen SSO, el inicio podría retrasarse o podrías ver errores relacionados con la configuración de autenticación de Entra ID.

Autenticación de Entra ID mediante OIDC e inicio de sesión único en VDA