Concepts avancés

Authentification multi-facteurs Microsoft Azure et Citrix Gateway

Citrix Gateway présente toutes les applications hébergées, SaaS, Web, d’entreprise et mobiles aux utilisateurs sur n’importe quel appareil et n’importe quel navigateur. Il utilise nFactor Authentication pour authentifier les utilisateurs par rapport à Microsoft AD local et utilise Microsoft AD FS pour Azure Multi-Factor Authentication (MFA).

Citrix Gateway

Citrix Gateway fournit aux utilisateurs un point d’accès unique et une authentification unique (SSO) aux applications professionnelles et aux données déployées dans un datacenter et le cloud. Il est livré sous forme de SaaS sur un large éventail d’appareils : ordinateurs portables, ordinateurs de bureau, clients légers, tablettes et téléphones intelligents. Citrix Gateway assure la consolidation, contribue à réduire l’encombrement de l’infrastructure d’accès à distance, réduit les coûts, facilite la gestion et offre une meilleure expérience utilisateur. Citrix Gateway facilite la transition informatique vers des environnements de cloud hybride et SaaS.

  • Fédération et authentification unique

Citrix Gateway fournit une identité fédérée et prend en charge SAML 2.0, OAuth et OpenID pour obtenir une authentification unique sur toutes les applications, qu’il s’agisse d’applications Web, VDI, d’entreprise ou SaaS.

  • Répertoire des utilisateurs sur site

Citrix Gateway fournit l’authentification SSO aux applications SaaS telles qu’Office 365 et Salesforce, et conserve l’annuaire des utilisateurs sur site. Il peut être implémenté en tant que IdP ou proxy pour Microsoft Active Directory Federation Services (AD FS).

  • Authentification multifacteur (nFactor)

Citrix Gateway fournit des mécanismes d’authentification nFactor et permet un contrôle granulaire sur qui accède au réseau, ce qui est accessible et comment et quand il est accessible. Il prend en charge tous les mécanismes d’authentification tels que RADIUS, TACACS, NTLM, Diameter, SAML 2.0, OAuth 2.0 et OpenID 2.0.

  • Stratégies de contrôle d’accès contextuelles

Citrix Gateway permet un contrôle d’accès granulaire aux applications professionnelles en fonction de l’état de la machine de l’utilisateur final, de l’utilisateur, de l’emplacement de l’utilisateur et d’autres données. Un administrateur informatique peut créer, gérer et appliquer les stratégies pour accéder aux données en toute sécurité dans un environnement d’application. Ces stratégies peuvent être implémentées pour les applications VDI, Web, mobiles, d’entreprise et SaaS.

  • Visibilité et surveillance

Citrix Application Delivery Management inclut Gateway Insight, qui fournit une visibilité de l’expérience utilisateur de bout en bout pour toutes les applications accessibles via Citrix Gateway. Il fournit des informations aux équipes de support des applications pour résoudre les problèmes liés aux échecs d’authentification, y compris les échecs de vérification EPA et les échecs d’authentification unique.

Applications

Applications prises en charge

Microsoft Azure MFA

Les gens se connectent aux ressources organisationnelles dans des scénarios de plus en plus complexes. Les utilisateurs se connectent à partir d’appareils appartenant à l’entreprise, personnels et publics, sur et hors du réseau de l’entreprise à l’aide de téléphones intelligents, de tablettes, de PC et d’ordinateurs portables, souvent sur plusieurs plates-formes. Dans ce monde toujours connecté, multi-appareils et multi-plateformes, la sécurité des comptes utilisateur est plus importante que jamais. Les mots de passe, quelle que soit leur complexité, utilisés sur les appareils, les réseaux et les plates-formes ne sont plus suffisants pour assurer la sécurité du compte utilisateur, en particulier lorsque les utilisateurs ont tendance à réutiliser les mots de passe entre les comptes. Les attaques d’hameçonnage sophistiquées et d’autres attaques d’ingénierie sociale peuvent entraîner l’affichage et la vente de noms d’utilisateur et de mots de passe sur le Web sombre.

La sécurité du processus de vérification en deux étapes réside dans son approche à plusieurs niveaux. La compromission de plusieurs facteurs d’authentification représente un défi important pour les attaquants. Même si un attaquant parvient à apprendre le mot de passe de l’utilisateur, il est inutile sans avoir également la possession de la méthode d’authentification supplémentaire. Il fonctionne en exigeant deux ou plusieurs des méthodes d’authentification suivantes :

  • Quelque chose que vous savez (généralement un mot de passe)
  • Quelque chose que vous avez (un appareil de confiance qui n’est pas facilement dupliqué, comme un téléphone)
  • Quelque chose que vous êtes (biométrie)

Azure Multi-Factor Authentication aide à protéger l’accès aux données et aux applications. Il fournit une couche supplémentaire de sécurité en utilisant une seconde forme d’authentification. Les organisations peuvent utiliser l’accès conditionnel pour adapter la solution à leurs besoins spécifiques.

Méthodes de déploiement Microsoft Azure MFA

Il existe différentes méthodes pour exploiter Azure MFA en tant que deuxième facteur d’authentification. Ces méthodes sont brièvement expliquées ci-dessous avec leurs avantages et leurs inconvénients.

Serveur Azure MFA

Le serveur Microsoft Azure Multi-Factor Authentication était la méthode d’origine et il va être obsolète. Il ne devrait pas être envisagé pour une nouvelle mise en œuvre comme

  • Il n’y a pas d’autre investissement de la part de Microsoft sur cette méthode.
  • Il n’y a pas d’intégration avec SSPR et Azure MFA basé sur le cloud.
  • Il n’existe pas d’outil de migration transparente du serveur MFA vers la solution basée sur le cloud MFA.

Extension de serveur de stratégie réseau MFA Azure

Network Policy Server (NPS) extension pour Azure MFA est une solution prise en charge qui utilise l’adaptateur NPS pour se connecter avec Azure MFA Cloud. Il peut être utilisé comme serveur RADIUS local.

  • La carte NPS (RADIUS) fournit un emplacement réseau à l’intérieur/à l’extérieur de la règle MFA ou marche/arrêt.
  • Il n’est pas compatible avec les stratégies d’accès conditionnel Azure AD similaires à la méthode d’intégration SAML. Les stratégies d’accès conditionnel offrent des expériences utilisateur beaucoup plus riches et meilleures.
  • Les utilisateurs doivent être enregistrés dans MFA avant d’utiliser l’adaptateur NPS. Contrairement à Azure MFA Cloud et Accès conditionnel, si l’utilisateur n’est pas enregistré, l’extension NPS ne parvient pas à authentifier l’utilisateur, ce qui génère plus d’appels vers le centre d’assistance.
  • Lorsque l’adaptateur NPS invoque MFA, il frappe les utilisateurs enregistrés option par défaut. Il n’y a pas de notification visuelle à l’utilisateur que MFA est nécessaire et à venir. Il n’y a pas d’interface utilisateur pour modifier les méthodes MFA pendant un processus fermé. Si l’utilisateur n’a pas son périphérique par défaut avec lui, il échouera. L’utilisateur doit revenir au portail selfservice et réinitialiser l’option par défaut, puis essayer de se connecter à nouveau.

Microsoft AD FS et Azure MFA

Si votre organisation est fédérée avec Azure AD, mais que le hachage des mots de passe ne sont pas synchronisés avec Azure AD, vous pouvez utiliser AD local pour LDAP (Lightweight Directory Access Protocol) et activer Azure MFA dans le cadre des stratégies d’accès sur les parties relais AD FS. À partir de Windows Server 2016, vous pouvez désormais configurer Azure MFA pour l’authentification principale.

  • L’adaptateur MFA Azure est intégré à Windows Server 2016, et il n’est pas nécessaire d’effectuer une installation supplémentaire.
  • L’adaptateur Azure MFA s’intègre directement à Azure AD et ne nécessite pas de serveur Azure MFA local.
  • Si les utilisateurs ne sont pas inscrits à MFA, ils sont guidés tout au long du processus lors de la prochaine connexion. Cela garantit moins d’appels au service d’assistance et un meilleur processus pour les utilisateurs.
  • Les utilisateurs reçoivent une notification visuelle indiquant que MFA est nécessaire et à venir. Les utilisateurs peuvent modifier l’option de Gateway lors d’un processus fermé dans l’interface utilisateur.

Azure AD et Azure MFA

Si votre organisation synchronise le hachage des mots de passe dans Azure AD, Azure MFA peut être exploité via des stratégies d’accès conditionnel pour demander aux utilisateurs une authentification de second facteur.

  • Cette méthode ne nécessite aucune installation supplémentaire sur site.
  • Si les utilisateurs ne sont pas inscrits à MFA, ils sont guidés tout au long du processus lors de la prochaine connexion. Cela garantit moins d’appels au service d’assistance et un meilleur processus pour les utilisateurs.
  • Les utilisateurs reçoivent une notification visuelle indiquant que MFA est nécessaire et à venir. Les utilisateurs peuvent modifier l’option de Gateway lors d’un processus fermé dans l’interface utilisateur.

Authentification pass-through Azure AD et Azure MFA

Azure AD Pass-through Authentication (PTA) permet aux utilisateurs de se connecter à des applications locales et basées sur le cloud à l’aide des mêmes mots de passe. Lorsque les utilisateurs se connectent à l’aide d’Azure AD, cette fonctionnalité valide les mots de passe des utilisateurs directement par rapport à Active Directory local. Azure AD PTA est une alternative à la synchronisation de hachage de mot de passe Azure AD, qui offre le même avantage de l’authentification dans le cloud aux organisations.

  • Azure AD PTA nécessite l’installation d’un agent léger sur site.
  • Azure AD PTA protège les comptes d’utilisateurs en travaillant de manière transparente avec les stratégies d’accès conditionnel Azure AD, y compris Azure MFA.
  • Les utilisateurs peuvent effectuer des tâches de gestion des mots de passe en libre-service dans le cloud.
  • Les mots de passe locaux ne sont jamais stockés dans le cloud sous quelque forme que ce soit.
  • L’agent établit uniquement des connexions sortantes à partir de votre réseau. Par conséquent, il n’est pas nécessaire d’installer l’agent dans un réseau de périmètre, également connu sous le nom de DMZ.

Situation actuelle

Un environnement présentant les caractéristiques suivantes nécessite l’utilisation d’Azure MFA comme deuxième facteur d’authentification :

  • AD local avec synchronisation Azure AD est configuré.
  • La synchronisation de hachage de mot de passe Azure AD est désactivée.
  • L’accès aux applications O365 est requis.
  • L’accès aux applications virtuelles Citrix et aux postes de travail locaux est requis.
  • L’accès aux applications avec une méthode d’authentification moderne (SAML, OAuth) est requis.
  • L’accès aux applications avec une méthode d’authentification héritée est requis.

Points de conception

Voici les points de conception de la solution proposée :

  • Accédez aux applications hébergées, SaaS, d’entreprise et Web dans un seul portail et en toute sécurité est nécessaire.
  • Les utilisateurs ne doivent entrer leurs informations d’identification qu’une seule fois au cours du processus d’authentification.
  • L’authentification unique doit être fournie pour toutes les applications hébergées, SaaS, d’entreprise et Web.

Solution proposée

Vue d’ensemble

La solution proposée repose sur les éléments suivants :

  • Passerelle Citrix Gateway locale
  • Microsoft AD local
  • Microsoft AD FS local
  • Citrix ADC local en tant que proxy AD FS
  • Microsoft Azure MFA

Citrix Gateway exploite la fonctionnalité d’authentification, d’autorisation et d’audit (Citrix ADC AAA) et les mécanismes d’authentification nFactor pour authentifier l’utilisateur avec la stratégie LDAP et exploiter la stratégie d’accès sur le relais AD FS pour déclencher le processus de validation Azure MFA. Une fois Azure MFA validé l’utilisateur, AD FS génère l’assertion SAML (réponse SAML) et redirige l’utilisateur vers Citrix Gateway. À ce stade, l’utilisateur est authentifié et Citrix Gateway présente toutes les applications que l’utilisateur est autorisé à utiliser.

La solution nécessite deux enregistrements DNS publics et deux adresses IP publiques :

Description Valeur
Nom de domaine complet Citrix Gateway access.ctxdemos.com
Authentification, autorisation et audit de Citrix FQDN aaa.ctxdemos.com

La solution utilise un certificat SSL public :

Description Valeur
Common Name access.ctxdemos.com
Autre nom du sujet sts.ctxdemos.com
Autre nom du sujet aaa.ctxdemos.com

La solution utilise également un certificat SSL générique émis par Microsoft Certificate Authority Services internes :

Description Valeur
Common Name *.ctxdemos.com

Flux d’authentification

Diagramme de séquence

Le diagramme de séquence suivant illustre le flux d’authentification de la solution :

Diagramme de séquence

Étapes d’authentification

Les étapes d’authentification sont les suivantes :

  1. L’utilisateur accède à https://access.ctxdemos.com.
  2. Citrix Gateway redirige l’utilisateur vers le premier VIP Citrix ADC AAA (non adressable).
  3. First Citrix ADC AAA VIP utilise une ouverture de session sans schéma, qui est configurée avec une authentification unique. Ensuite, il commence à traiter les stratégies d’authentification avancées.
  4. La première stratégie d’authentification est le SP SAML vers un VIP LB non adressable pour générer des cookies d’authentification.
  5. L’assistant LB VIP est configuré pour utiliser le second Citrix ADC AAA VIP (Addressable) pour l’authentification. Ainsi, il redirige l’utilisateur vers la deuxième authentification, autorisation et audit VIP.
  6. Le second Citrix ADC AAA VIP utilise le schéma de connexion Username Only, qui invite l’utilisateur à saisir le nom d’utilisateur. Ensuite, il commence à traiter les stratégies d’authentification avancées.
  7. La première stratégie d’authentification est une Extraction de groupe, qui interroge le nom d’utilisateur dans un AD local et valide si l’utilisateur appartient au groupe de sécurité AzureMFACAUsers. Une fois que le résultat de la validation est réussi, il commence à traiter le facteur d’authentification suivant qui est la stratégie LDAP.
  8. La stratégie LDAP utilise le schéma de connexion UsernameAndPassword et un champ de nom d’utilisateur prérempli et invite l’utilisateur à saisir le mot de passe AD.
  9. Lorsque l’authentification sur le deuxième VIP Citrix ADC AAA est terminée avec succès, elle revient à l’assistant LB VIP qui génère une réponse SAML pour la première authentification, autorisation et audit VIP.
  10. Le premier VIP Citrix ADC AAA commence à traiter le facteur suivant, qui est une extraction de groupe pour s’assurer que les groupes de l’utilisateur sont extraits d’AD et stockés dans la variable d’authentification, d’autorisation et d’audit à utiliser ultérieurement dans le processus.
  11. Premier Citrix ADC AAA VIP commence à traiter le facteur suivant, qui est un SP SAML vers AD FS Proxy VIP sur Citrix ADC.

    Remarque :

    Citrix ADC est fédéré avec la batterie de serveurs AD FS. Les étapes détaillées sont expliquées dans les sections suivantes.

  12. AD FS Proxy VIP valide que les cookies d’authentification (NSC_TMAA et NSC_TMAS) sont définis. Ensuite, il envoie la requête SAML à un serveur AD FS back-end (les serveurs AD FS back-end doivent être équilibrés en charge sur un Citrix ADC interne pour une haute disponibilité et une résilience du service).
  13. Le serveur AD FS traite la demande SAML. Étant donné que la stratégie d’accès sur la partie relais est définie sur « Autoriser tous les utilisateurs et exiger MFA pour l’authentification », elle déclenche le processus d’authentification Azure MFA.
  14. Azure MFA traite le nom d’utilisateur. S’il est déjà enregistré, il défie l’utilisateur avec la méthode configurée. Si ce n’est pas le cas, il invite l’utilisateur à s’inscrire et à définir les méthodes d’authentification primaire et secondaire.
  15. Une fois le processus d’authentification Azure MFA terminé avec succès, AD FS génère une réponse SAML pour Citrix Gateway (First Citrix ADC AAA VIP).
  16. First Citrix ADC AAA VIP reçoit une réponse SAML et confirme que le processus d’authentification de l’utilisateur est terminé.
  17. Citrix Gateway envoie des informations d’authentification à Citrix StoreFront, qui énumère toutes les applications et tous les postes de travail que l’utilisateur est autorisé à utiliser. En outre, il traite l’appartenance au groupe de l’utilisateur pour présenter des signets publiés sur Citrix Gateway.

Écrans d’authentification

La plupart des étapes mentionnées ci-dessus sont transparentes pour les utilisateurs car elles se produisent en interne entre différents VIP sur Citrix ADC. L’expérience utilisateur est illustrée ci-dessous :

Nom d’utilisateur dela page de connexion Citrix Gateway Nom d'utilisateur et mot de passe de la page de connexion Citrix GatewayCode de vérification

Implémentation

Microsoft AD FS

Exigences relatives au certificat

Les serveurs de fédération requièrent les certificats du tableau suivant :

Type de certificat Description Ce qui doit être connu avant de déployer
Certificat SSL (Secure Sockets Layer) Il s’agit d’un certificat SSL (Secure Sockets Layer) standard utilisé pour sécuriser les communications entre les serveurs de fédération et les clients. Ce certificat doit être lié au site Web par défaut dans Internet Information Services (IIS) pour un serveur de fédération ou un proxy de serveur de fédération. Pour un serveur proxy de fédération, la liaison doit être configurée dans IIS avant d’exécuter l’Assistant Configuration du serveur proxy de fédération avec succès. Recommandation : Étant donné que ce certificat doit être approuvé par les clients d’AD FS, utilisez un certificat d’authentification de serveur émis par une autorité de certification publique (tierce). Par exemple, Verisign. Conseil : le nom de l’objet de ce certificat est utilisé pour représenter le nom du service de fédération pour chaque instance d’AD FS que vous déployez. Pour cette raison, vous pouvez envisager de choisir un nom de sujet sur tout nouveau certificat émis par une autorité de certification qui représente le mieux le nom de votre entreprise ou de votre organisation auprès des partenaires.
Certificat de communication de service Ce certificat permet la sécurité des messages WCF pour sécuriser les communications entre les serveurs de fédération. Par défaut, le certificat SSL est utilisé comme certificat de communication de service. Cela peut être modifié à l’aide de la console de gestion AD FS.
Certificat de signature de jeton Il s’agit d’un certificat X509 standard utilisé pour signer en toute sécurité tous les jetons émis par le serveur de fédération. Le certificat de signature de jeton doit contenir une clé privée et s’enchaîner à une racine approuvée dans le service de fédération. Par défaut, AD FS crée un certificat auto-signé. Toutefois, vous pouvez modifier ce certificat ultérieurement en un certificat émis par une autorité de certification à l’aide du composant logiciel enfichable Gestion AD FS, en fonction des besoins de votre organisation.
Certificat de déchiffrement de jetons Il s’agit d’un certificat SSL standard qui est utilisé pour déchiffrer tous les jetons entrants chiffrés par un serveur de fédération partenaire. Il est également publié dans les métadonnées de la fédération. Par défaut, AD FS crée un certificat auto-signé. Toutefois, vous pouvez modifier ce certificat ultérieurement en un certificat émis par une autorité de certification à l’aide du composant logiciel enfichable Gestion AD FS, en fonction des besoins de votre organisation.

Configuration de l’environnement de démonstration

Type de certificat Configuration de l’environnement de démonstration
Certificat SSL (Secure Sockets Layer) Certificat interne émis par l’autorité de certification émettrice interne sur le serveur AD FS. Certificat public approuvé sur Citrix ADC.
Certificat de communication de service Certificat interne délivré par l’autorité de certification interne d’AHS.
Certificat de signature de jeton Généré automatiquement par le service AD FS.
Certificat de déchiffrement de jetons Généré automatiquement par le service AD FS.

Dans l’environnement de démonstration, un certificat générique est inscrit et installé sur le serveur.

Autorité de certification

Exigences relatives au compte de service

Vous pouvez créer un compte de service ou tirer parti des comptes de service gérés par groupe (GMSA). Pour utiliser GMSA, vous devez créer une clé racine du service de distribution de clés. Alors, lancez PowerShell et exécutez la commande suivante :

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

Cette commande crée une clé racine du service de distribution de clés, stockée dans Active Directory, et vous permet de créer un compte de service géré (GMSA) de groupe en tant que compte de service AD FS que vous créez ultérieurement. Exécutez cette commande avec les droits d’administrateur de domaine.

Clé racine

Exigences en matière d’enregistrement DNS

Vous avez besoin d’un enregistrement DNS A pour votre nom de service de fédération AD FS en interne et en externe. Dans l’environnement de démonstration, l’enregistrement DNS interne pointe vers l’adresse IP du serveur AD FS et l’enregistrement DNS externe pointe vers l’adresse IP publique Citrix Gateway.

Nom de l’enregistrement Étendue Type Adresse IP
sts.ctxdemox.com Interne Une 22.22.22.6
sts.ctxdemox.com Externe Une 40.85.225.175

Ajouter le rôle AD FS et configurer la batterie de serveurs AD FS

Ajouter le rôle AD FS

Pour ajouter le rôle AD FS à Windows Server 2016, lancez PowerShell et exécutez la commande suivante :

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

Commande PowerShell

Configurer la batterie de serveurs AD FS

Vous pouvez maintenant commencer votre configuration après déploiement AD FS à partir du Gestionnaire de serveur . Cliquez sur Configurer le service de fédération sur ce serveur.

Configuration après déploiement

Sur la page Bienvenue , sélectionnez Créer le premier serveur de fédération dans une batterie de serveurs de fédération , puis cliquez sur Suivant.

Créer le premier serveur de fédération

Dans la page Se connecter aux services de domaine Active Directory, assurez-vous que le compte Administrateur de domaine est spécifié, puis cliquez sur Suivant.

Se connecter aux services de domaine Active Directory

Dans la page Spécifier les propriétés du service, procédez comme suit, puis cliquez sur Suivant :

  • Choisissez le certificat qui a été installé sur le serveur lors des étapes précédentes.
  • Le nom du service de fédération est automatiquement renseigné en fonction du nom du sujet du certificat.
  • Placez le nom complet du service de fédération. Par exemple, CTXDEMOS STS.

Spécifier les propriétés du service

Dans la page Spécifier un compte de service, sélectionnez Créer un compte de service géré par groupe et entrez un nom unique pour ce compte. Les comptes de services gérés de groupe sont pris en charge dans Windows Server 2012 et sont livrés avec des mots de passe stricts et complexes qui sont modifiés automatiquement tous les 30 jours. Cliquez sur Suivant.

Créer un compte de service géré par groupe

Dans la page Spécifier la base de données de configuration, sélectionnez spécifier l’emplacement d’une base de données SQL Server. Cliquez sur Suivant.

Spécifier la base de données de configuration

Dans la page Options de révision, vérifiez vos sélections de configuration, puis cliquez sur Suivant.

Options de révision

Dans la page Vérifications préalables, vérifiez que toutes les vérifications préalables sont terminées avec succès, puis cliquez sur Configurer.

Vérifications préalables

Sur la page Résultats, vérifiez que l’installation est réussie. Cliquez sur Fermer pour quitter l’Assistant.

Résultats de la configuration après le déploiement

Remarque :

pour effectuer les étapes suivantes, vous aurez besoin de votre ID de locataire Azure.

Vous pouvez obtenir l’ID de tenant Azure en suivant les étapes décrites dans l’article de documentation Microsoft, Get AzureID Tenant Detail.

La documentation Microsoft fournit également des informations sur le GUID du client Azure MFA dans Configurer AD FS 2016 et Azure MFA.

Configurer la batterie de serveurs AD FS - automatisée

Vous pouvez exécuter le script PowerShell suivant :

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

Configurer AD FS avec Azure MFA

Configurer les serveurs AD FS

Sur chacun de vos serveurs AD FS, lancez PowerShell et exécutez les commandes suivantes :

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

Configurer la batterie de serveurs AD FS

Uniquement sur l’un des serveurs AD FS, exécutez la commande suivante :

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

Redémarrez le service AD FS sur chacun de vos serveurs. Ensuite, vous verrez que Azure MFA est disponible en tant que méthode d’authentification principale et multifacteur pour l’utilisation de l’intranet et de l’extranet.

Méthode d'authentification principale

Méthode d'authentification multifacteur

Configurer AD FS avec Citrix ADC

Vous devez créer une approbation de fédération entre AD FS et Citrix ADC. Dans la console de gestion AD FS, accédez à Approuver de partie de confiance et sélectionnez Ajouter une approbation de partie de confiance.

Ajouter une approbation de partie de confiance

Sélectionnez Entrer manuellement les données relatives à la partie de confiance, puis cliquez sur Suivant.

Entrez des données sur la partie de confiance

Entrez un nom d’affichage descriptif et des notes facultatives. Cliquez sur Suivant.

Remarques facultatives

Cliquez sur Suivant.

Configurer un certificat

Sélectionnez Activer la prise en charge du protocole SAML 2.0 WebSSO et entrez https://CitrixGatewayFQDN/cgi/samlauth. Dans l’environnement de démonstration, l’adresse est https://access.ctxdemos.com/cgi/samlauth. Cliquez sur Suivant.

Configurer une URL

Entrez une chaîne d’identificateur unique pour l’approbation de partie de confiance. Dans l’environnement de démonstration, l’adresse est https://access.ctxdemos.com. Cet identificateur sera utilisé comme URL d’émetteur dans le profil SAML Citrix ADC. Cliquez sur Suivant.

Configurer un identificateur

Sur la page Choisir une stratégie de contrôle d’accès , sélectionnez Autoriser tout le monde et exiger MFA. Cliquez sur Suivant.

Stratégie de contrôle d'accès

Cliquez sur Suivant.

Ajouter une confiance

Sur la page Fin, sélectionnez Configurer la stratégie d’émission de revendications pour cette application . Cliquez sur Fermer.

Terminer

Dans la page Règles de transformation d’émission, cliquez sur Ajouter une règle.

Ajouter une règle

Cliquez sur Suivant.

Sélectionner un modèle

Entrez un nom descriptif dans le champ Nom de la règle de réclamation. Sous Magasin d’attributs, sélectionnez Active Directory. Sélectionnez ensuite les éléments suivants : Attributs LDAP et Types de revendications sortantes.

Configurer une règle

Créez une nouvelle règle et utilisez Envoyer des réclamations à l’aide d’une règle personnalisée comme modèle de règle de réclamation. Entrez un nom descriptif pour le nom de la règle de revendication et entrez la chaîne suivante pour la règle personnalisée :

=> 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-->

Configurer une règle

Lorsque les stratégies d’émission de réclamations sont créées, cliquez sur OK.

Cliquez avec le bouton droit sur Appropriation de partie de confiance > Citrix ADC, puis sélectionnez Propriétés. Sélectionnez Endpoints et ajoutez un point de terminaison en cliquant sur Ajouter SAML pour la déconnexion. Dans la liste Type de point de terminaison, sélectionnez Déconnexion SAML. Pour Liaison, sélectionnez POST et pour URL de confiance, entrez https://sts.ctxdemos.com/adfs/ls/?wa=wsignout1.0. Cela agira comme une URL de déconnexion lors de la déconnexion de Citrix ADC. Cliquez sur OK.

Déconnexion SAML

Cliquez avec le bouton droit sur Appropriation de partie de confiance > Citrix ADC, puis sélectionnez Propriétés. Sélectionnez Encryption et ajoutez un certificat SSL public installé sur Citrix Gateway. Ce certificat sera utilisé pour déchiffrer une demande SML entrante à partir de Citrix ADC. Répétez la même chose sur l’onglet Signature. Ce certificat sera utilisé pour vérifier la signature d’une demande SAML entrante. Cliquez sur OK.

Activer la page de connexion initiée par l’IdP

Vous pouvez activer la page d’authentification initiée par l’IdP AD FS. Vous utiliserez l’authentification initiée par IdP pour présenter une page d’erreur personnalisée aux utilisateurs MFA non enregistrés. Pour l’activer, exécutez la commande suivante :

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

Tester la batterie AD FS

Ouvrez un navigateur Web et accédez à :

Citrix ADC et Citrix Gateway

Configurer Citrix Gateway

Vous pouvez configurer Citrix Gateway via l’assistant. Connectez-vous à Citrix ADC Management GUI, accédez à Unified Gateway, puis cliquez sur Créer une nouvelle passerelle. Puis cliquez sur Continuer.

Accès public unique

Entrez le nom, l’adresse IP et le nom de domaine complet pour Unified Gateway, puis cliquez sur Continuer.

Configuration de Citrix Gateway

Sélectionnez le certificat SSL public et cliquez sur Continuer.

Écran Server certificate

Créez une stratégie LDAP de base et liez-la à Unified Gateway. Cliquez sur Continuer.

Authentification

Créez un thème de portail basé sur RFWeBui et liez-le à Unified Gateway. Cliquez sur Continuer.

Thème du portail

Sélectionnez le signe plus (+) devant les applications pour intégrer Citrix Gateway à StoreFront.

Intégrer Gateway à StoreFront

Intégrer Citrix StoreFront dans Citrix Gateway

Dans la page Application, sélectionnez XenApp & XenDesktop, puis dans la liste Choisir un point d’intégration, sélectionnez StoreFront. Cliquez sur Continuer.

Sélectionner plusieurs paramètres

Entrez une URL StoreFront et cliquez sur Récupérer les magasins. Entrez ensuite les paramètres du domaine Active Directory par défaut et de l’URL de Secure Ticket Authority. Cliquez sur Tester la connectivité STA, puis sur Continuer.

Tester la connectivité

Cliquez sur Terminé, puis sur Continuer.

Continue

Configurer Citrix Gateway et intégrer 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-->

Configurer le premier serveur d’authentification

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

Configurer un deuxième serveur d’authentification

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

Configurer Citrix ADC en tant que WAP AD FS

Exécutez les commandes suivantes dans Citrix ADC CLI pour configurer Citrix ADC en tant que proxy WAP (AD FS Web Application Proxy) :

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

Configurer un flux d’authentification initial

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

Groupes de chiffrement

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

Fichier XML du schéma de connexion

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

Références

Authentification vers NetScaler à l’aide d’AD FS 4.0 sur Server 2016, Citrix FAS et Azure MFA dans Azure Cloud. (2018). Extrait de https://www.jgspiers.com/authentication-to-netscaler-using-ad-fs-4-0-server-2016-citrix-fas-azure-mfa-azure-cloud/

Configurez Azure MFA en tant que fournisseur d’authentification avec AD FS. (2019). Extrait de https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-ad-fs-and-azure-mfa

Déploiement d’une batterie de serveurs de fédération. (2017). Extrait de https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/deployment/deploying-a-federation-server-farm

Déploiement ADFS du service d’authentification fédérée. (2018). Extrait de https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/secure/federated-authentication-service/fas-architectures/fas-adfs.html

Guide de déploiement de NetScaler en tant que proxy Active Directory Federation Services. (s.d.). Extrait 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

Comment cela fonctionne : Azure Multi-Factor Authentication. (2018). Extrait de https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks

Planification d’un déploiement Azure Multi-Factor Authentication basé sur le cloud. (2019). Extrait de https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-getstarted

Tijl Van den Broeck. (7 déc. 2017). ADFS v3 sur Windows Server 2012 R2 avec NetScaler. Extrait de https://www.citrix.com/blogs/2015/05/29/adfs-v3-on-windows-server-2012-r2-with-netscaler/

Transition vers le cloud hybride et le SaaS avec Citrix Gateway. (s.d.). Extrait de https://www.citrix.com/products/citrix-gateway/resources/netscaler-unified-gateway.html

Connexion utilisateur à l’aide de l’authentification directe Azure Active Directory. (2018). Extrait de https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta

Écrit par Saman Salehian, ingénieur en chef des ventes en réseau.

Authentification multi-facteurs Microsoft Azure et Citrix Gateway