Authentification Entra ID via OIDC et authentification unique au VDA
Cet article décrit comment configurer StoreFront et un NetScaler ADC pour permettre aux utilisateurs de s’authentifier avec Entra ID via OIDC, puis de s’authentifier de manière unique à un VDA joint à Entra.
IMPORTANT :
L’authentification Entra ID via OIDC et l’authentification unique au VDA sont actuellement en préversion. Cette fonctionnalité est fournie sans support et n’est pas encore recommandée pour une utilisation dans des environnements de production.
-
Prérequis
- NetScaler ADC
- StoreFront 2507 LTSR CU1 ou version ultérieure
- Microsoft Entra ID et compte avec l’une des autorisations suivantes :
- Administrateur d’applications cloud
- Administrateur d’applications
- Administrateur général
- Abonnement DaaS avec connecteurs. Ceci n’est pas disponible avec CVAD.
- Bureaux et/ou applications publiés
- Pour les lancements depuis un navigateur web vers l’application Citrix Workspace, afin d’activer l’authentification unique aux VDA, extension web Citrix.
Authentification Entra ID à l’aide d’OIDC
Cette section décrit comment configurer NetScaler et StoreFront afin que les utilisateurs puissent s’authentifier à l’aide d’Entra ID. Dans cette configuration, les utilisateurs peuvent avoir une identité hybride ou une identité Entra uniquement sans compte Active Directory.
Créer une application Microsoft Azure Entra ID
Un enregistrement d’application dans Microsoft Entra ID définit votre application afin qu’Entra ID la reconnaisse, dans ce cas, NetScaler OIDC. Cet enregistrement gère également les demandes d’authentification et d’autorisation de l’application. Étant donné qu’OAuth nécessite un fournisseur d’identité (IdP) fiable pour authentifier les utilisateurs et émettre des jetons, l’enregistrement de votre application indique à Entra ID : « Cette application vous utilise comme IdP pour les flux OAuth. »
- Connectez-vous au portail Azure pour le locataire Entra ID que vous utilisez pour l’authentification NetScaler ou StoreFront.
- Accédez à Ressource Microsoft Entra ID > Gérer > Enregistrements d’applications, puis sélectionnez Nouvel enregistrement.
- Nommez l’application, par exemple, NetScaler StoreFront Authentication.
- Sous Types de comptes pris en charge, sélectionnez Comptes dans ce répertoire organisationnel uniquement.
-
Sous URI de redirection, sélectionnez Web pour le type d’application que vous souhaitez créer. Entrez l’URI où le jeton d’accès est envoyé. Utilisez le format <URL du serveur virtuel NetScaler>/oauth/login, par exemple
https://netscalerentra.customer.com/oauth/login.
Créer un secret client
Pour créer un secret client :
- Après avoir enregistré l’application, accédez à Gérer > Certificats et secrets.
- Sélectionnez Secrets client, puis sélectionnez Nouveau secret client. Votre application utilise ces informations d’identification pour communiquer en toute sécurité avec l’IdP et demander des jetons.
- Fournissez une description du secret et une durée.
- Après avoir créé le secret, enregistrez la valeur du secret, car vous en aurez besoin plus tard dans le processus de configuration et elle n’est visible qu’à ce stade de la création.

Configurer les autorisations d’application
Pour configurer les autorisations d’application :
- Accédez à Gérer > Enregistrements d’applications, puis sélectionnez votre application.
- Sélectionnez Gérer > Autorisations d’API.
- L’autorisation User.Read est déjà ajoutée par défaut.
- Ajoutez openid et profile.
- Sélectionnez Accorder le consentement administrateur pour <nom du locataire> et acceptez.
« Accorder le consentement administrateur pour » dans les autorisations d’API dans Microsoft Entra ID signifie qu’un administrateur donne son approbation, au nom de tous les utilisateurs de l’organisation, pour qu’une application accède à des ressources ou des API spécifiques avec les autorisations demandées.

Configurer Citrix DaaS pour activer la confiance XML
Par défaut, Citrix DaaS authentifie les requêtes à l’aide des informations d’identification Active Directory de l’utilisateur. Avec l’authentification Entra ID, StoreFront ne dispose pas des informations d’identification. Par conséquent, vous devez configurer DaaS pour faire confiance à StoreFront sans exiger l’utilisation de l’authentification. Il est fortement recommandé d’activer les clés de sécurité pour fournir une authentification au niveau du service à la place.
- Connectez-vous à Citrix Cloud et accédez à la console DaaS.
- Accédez à Paramètres.
-
Activez la confiance XML.

- (Étape facultative) Pour une sécurité accrue, vous pouvez activer les clés de sécurité entre DaaS et StoreFront. Pour plus d’informations, consultez Gérer les clés de sécurité dans la documentation Citrix DaaS™.
Configurer le profil d’authentification NetScaler
Cette section décrit comment configurer un profil d’authentification NetScaler que vous pouvez lier à votre serveur virtuel VPN de passerelle. Cette configuration indique à l’ADC comment rediriger les utilisateurs vers un IdP OAuth externe (comme Microsoft Entra ID) pour la connexion et comment gérer les jetons OAuth reçus après l’authentification. Elle spécifie les points de terminaison, les informations d’identification client, les étendues et la manière dont l’ADC extrait les informations utilisateur des jetons.
Vous avez besoin du secret client des étapes précédentes et des points de terminaison d’authentification Microsoft Entra ID. Vous pouvez trouver les points de terminaison d’authentification dans le portail Azure en accédant à la vue d’ensemble de votre enregistrement d’application et en cliquant sur l’onglet Points de terminaison.
Créer un serveur virtuel d’authentification
Le serveur virtuel d’authentification gère l’authentification des utilisateurs.
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-->
Créer une stratégie et une action OAuth
L’action OAuth spécifie comment NetScaler ADC interagit avec un IdP OAuth tel que Microsoft Entra ID. Cette action permet à Citrix Gateway de rediriger les utilisateurs vers l’IdP pour la connexion et de gérer le jeton OAuth renvoyé. Elle définit le userNameField sur oid, ce qui fait que la passerelle transmet l’OID comme nom d’utilisateur lors de l’authentification à StoreFront. StoreFront valide que l’OID correspond aux détails qu’il obtient en recherchant le jeton d’accès Entra ID, sinon l’authentification échoue.
Vous avez besoin de l’ID client et du secret client des étapes précédentes.
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-->
L’authorizationEndpoint inclut le paramètre de chaîne de requête prompt=login afin que les utilisateurs soient forcés de se réauthentifier lorsqu’ils tentent d’accéder à StoreFront via le NetScaler.
Lier la stratégie d’authentification au serveur virtuel
bind authentication vserver EntraId_Authentication_VirtualServer \
-policy EntraId_Authentication_Policy \
-priority 100 \
-gotoPriorityExpression END
<!--NeedCopy-->
Créer un profil d’authentification
add authentication authnProfile EntraId_Auth_Profile \
-authnVsName EntraId_Authentication_VirtualServer \
-AuthenticationLevel 0
<!--NeedCopy-->
Créer un serveur virtuel VPN et lier le profil d’authentification
Suivez les étapes 1, 2 et 4 de Intégrer NetScaler Gateway à StoreFront, en utilisant le profil d’authentification créé aux étapes précédentes.
Alternativement, si vous avez déjà un Citrix Gateway approprié, vous pouvez lui lier le nouveau profil d’authentification. L’exécution de cette commande remplace le profil d’authentification existant.
set vpn vserver <StoreFront ICA Proxy vServer> \
-authentication ON \
-authnProfile EntraId_Auth_Profile
<!--NeedCopy-->
Configuration de l’injection de jetons Entra ID pour l’authentification unique à StoreFront
Après que la passerelle Citrix a authentifié l’utilisateur, elle doit transmettre des informations suffisantes à StoreFront afin que celui-ci puisse valider l’authentification de l’utilisateur et rechercher son appartenance à un groupe. Par défaut, la passerelle Citrix envoie uniquement le nom d’utilisateur et le mot de passe Active Directory. Dans le cas de l’authentification Entra ID, elle doit transmettre le jeton d’accès Entra ID afin que StoreFront puisse rechercher les informations de l’utilisateur à l’aide de l’API Microsoft Graph. Pour ce faire, vous devez ajouter une stratégie de réécriture qui ajoute le jeton Entra ID à l’appel qu’elle effectue pour authentifier l’utilisateur auprès de StoreFront. Si la stratégie de réécriture du jeton d’accès Entra ID ne prend pas effet, la connexion échouera. Si la fonctionnalité de stratégie de réécriture est désactivée par défaut et n’est pas déjà activée, vous devez l’activer en premier.
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-->
Configurer Citrix Gateway dans StoreFront
-
Configurez les passerelles Citrix.
-
Définissez le type de connexion sur Domaine.
-
Spécifiez une URL de rappel valide. Ceci est requis pour l’authentification Entra ID avec StoreFront.
-
-
Configurez la passerelle pour l’accès à distance pour le Store qui agrège les ressources Citrix DaaS.
-
Activez et configurez l’authentification Entra ID depuis NetScaler Gateway. Exécutez le script Powershell suivant, en remplaçant l’ID de locataire par l’ID de votre locataire Entra ID et
/Citrix/EntraStorepar le chemin du Store.
$store = Get-STFStoreService /Citrix/EntraStore
$authenticationService = Get-STFAuthenticationService -Store $store
Set-STFEntraIdSettings -AuthenticationService $authenticationService -TenantId "<Your tenant id>" -Enabled $true
<!--NeedCopy-->
Configurer l’authentification unique Entra ID pour les VDA
Une fois que vous avez configuré StoreFront et votre passerelle Citrix pour authentifier les utilisateurs à l’aide d’Entra ID, vous pouvez activer l’authentification unique Entra ID pour les VDA sans avoir besoin de FAS. N’activez cette option qu’une fois la configuration DaaS terminée. Pour plus d’informations, consultez Authentification unique Microsoft Entra. Cela nécessite la configuration supplémentaire suivante pour StoreFront et le NetScaler ADC.
Configurer la commutation de contenu NetScaler ADC
Normalement, toutes les requêtes vers StoreFront passent par le VServer de la passerelle et nécessitent donc une authentification. Lorsque l’utilisateur lance un VDA joint à Entra ID, l’application Citrix Workspace doit à nouveau s’authentifier auprès d’Azure (authentification unique si la session Entra ID est toujours valide) et récupérer un jeton d’accès. Dans le cadre de ce flux, StoreFront génère un jeton qui doit être validé par un service exécuté dans Citrix Cloud. Ce service doit pouvoir rappeler le point de terminaison StoreFront /Citrix/<StoreWeb>/Tickets/RedeemStoreTicket pour valider le jeton. Comme ce service n’a pas accès à la session NetScaler, il est nécessaire de contourner le service virtuel VPN pour les appels de validation de ticket. Pour ce faire, vous pouvez utiliser un commutateur de contenu.

Les appels à /Citrix/<StoreWeb>/Tickets/RedeemStoreTicket sont dirigés vers un équilibreur de charge qui transmet les requêtes à StoreFront, en contournant la passerelle. Notez que l’équilibreur de charge est requis car le commutateur de contenu ne peut pas être configuré pour diriger le trafic directement vers une URL et nécessite un serveur virtuel comme cible. L’équilibreur de charge n’effectue aucune répartition de charge et se contente de transmettre le trafic à StoreFront. Si vous disposez déjà d’un équilibreur de charge StoreFront approprié sur la même machine, vous pouvez l’utiliser à la place.
Tous les autres appels sont dirigés vers le serveur virtuel VPN de la passerelle.
Créer un équilibreur de charge pour le passage du commutateur de contenu à StoreFront
Si vous disposez déjà d’un serveur virtuel d’équilibrage de charge en amont de votre groupe de serveurs StoreFront et exécuté sur la même machine que la passerelle, vous pouvez ignorer cette étape et configurer le commutateur de contenu pour envoyer le trafic directement à ce serveur virtuel. Sinon, vous devez créer un équilibreur de charge pour transmettre le trafic aux serveurs StoreFront. En effet, les actions du commutateur de contenu doivent faire référence à un serveur virtuel.
Les étapes sont légèrement différentes selon que StoreFront est configuré pour HTTPS (recommandé) ou HTTP.
StoreFront est configuré pour HTTPS
Créez un service stf_srv représentant StoreFront à l’aide de son adresse IP et liez-le à un équilibreur de charge SSL sans persistance.
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 configuré pour HTTP
Créez un service stf_srv représentant StoreFront à l’aide de son nom de domaine complet (FQDN) et liez-le à un équilibreur de charge HTTP sans persistance.
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-->
Créer un serveur virtuel de commutation de contenu SSL
Créez un serveur virtuel de commutation de contenu SSL pour gérer les requêtes des clients. Ce serveur virtuel de commutation de contenu écoute le trafic HTTPS sur le port 443 et achemine les requêtes soit vers le serveur virtuel VPN de la passerelle, soit directement vers StoreFront via l’équilibreur de charge.
Par défaut, la commutation de contenu est désactivée, vous devez donc l’activer si vous ne l’avez pas déjà fait.
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-->
Créer une stratégie de commutation de contenu pour la validation des tickets
Créez une stratégie de commutation de contenu pour l’équilibrage de charge basée sur une URL contenant un chemin de validation de ticket StoreFront.
Cette stratégie correspond aux requêtes lorsque l’URL contient /Citrix/StoreEntraWeb/Tickets/RedeemStoreTicket et les achemine vers l’équilibreur de charge sans passer par le serveur virtuel VPN.
Remplacez StoreEntraWeb par le nom du site web StoreFront de la stratégie web du serveur virtuel StoreFront. Vous pouvez utiliser l’équilibreur de charge lb_vs créé à l’étape précédente, ou un serveur virtuel d’équilibrage de charge existant en amont de vos serveurs 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-->
Créer une stratégie de commutation de contenu pour tout autre trafic
Créez une stratégie de commutation de contenu générique pour envoyer tout autre trafic StoreFront via le serveur virtuel VPN pour l’authentification.
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-->
Configurer l’authentification unique Entra ID VDA
L’authentification unique permet aux utilisateurs de s’authentifier une seule fois lorsqu’ils se connectent à Citrix Gateway, puis d’accéder à leurs bureaux virtuels et applications sans avoir à ressaisir leurs informations d’identification dans le VDA.
$store = Get-STFStoreService /Citrix/EntraStore
Set-STFStoreLaunchOptions -StoreService $store -EntraIdSsoEnabled $true
<!--NeedCopy-->
Considérations pour l’activation ou la désactivation de l’authentification unique Entra ID
-
N’activez l’authentification unique Entra ID qu’une fois que vous avez terminé toutes les configurations décrites dans Authentification unique Microsoft Entra. Sinon, l’authentification unique échouera et les utilisateurs pourraient subir des retards de lancement ou des erreurs.
-
L’authentification unique Entra ID vers les VDA n’est prise en charge qu’avec l’authentification basée sur OIDC. Elle n’est pas prise en charge avec SAML.
-
StoreFront ne prend pas en charge l’activation simultanée du service d’authentification fédérée et de l’authentification unique Entra ID sur le même Store.