Citrix Gateway

Configure Network Access Control device check for Citrix Gateway virtual server for single factor authentication deployment

This topic provides information on configuring the Citrix Gateway to connect to an internal network from a mobile device (iOS and Android) with the Network Access Compliance (NAC) security offered by Microsoft Intune. When a user tries to connect to Citrix Gateway from an iOS or Android VPN client, the gateway first checks with the Intune service if the device is a managed and a compliant device.

  • Managed: The device is enrolled using the Intune Company Portal client.
  • Compliant: Required policies pushed from the Intune MDM server are applied.

Only if the device is both managed and compliant, the VPN session is established and the user is provided access to the internal resources.


  • In this setup, Citrix Gateway at the back-end talks to the Intune service. The SSL profiles handle the incoming connections to the Citrix Gateway. The Citrix Gateway back-end communication handles any SNI requirements of the back-end cloud services (Intune).

  • Intune NAC check, for the per-app VPN or even device wide VPN, is supported only when the VPN profile is provisioned by the Intune management portal (now known as, Microsoft Endpoint Manager). These features are not supported for end-user added VPN profiles. The end user device must have the VPN profile deployed to their device from Microsoft Endpoint Manager by their Intune administrator to use the NAC check.


Citrix Enterprise Edition license is required for this functionality.

System requirements

  • Citrix Gateway release 11.1 build 51.21 or later
  • iOS VPN – 10.6 or later
  • Android VPN – 2.0.13 or later
  • Microsoft
    • Azure AD access (having tenant and admin privileges)
    • Intune enabled tenant
  • Firewall Enable firewall rules to all DNS and SSL traffic from subnet IP address to and (port 53 and port 443)


  • All existing authentication policies must be converted from classic to advanced policies. For information on how to convert from classic policies to advanced policies, see

  • Create a Citrix Gateway application on the Azure portal. For details, see Configuring a Citrix Gateway application on the Azure portal.

  • Configure the OAuth policy on the Citrix Gateway application that you created using the following application specific information.

    • Client ID / Application ID
    • Client secret / Application key
    • Azure tenant ID


To add a Citrix Gateway Virtual Server with nFactor for Gateway deployment

  1. Navigate to Virtual Servers under the Citrix Gateway tree node.

    Virtual servers page

  2. Provide the required information in the Basic Settings area and click OK.

    Basic settings

  3. Select Server Certificate.

    Add server cert

  4. Select required server certificate and click Bind.

    Bind server cert

  5. Click Continue.

  6. Click Continue.

  7. Click Continue.

  8. Click the plus icon [+] next to Policies and select Session from the Choose Policy list and select Request from the Choose Type list and click Continue.

  9. Click the plus icon [+] next to Select Policy.

  10. On the Create Citrix Gateway Session Policy page, provide a name for the Session policy.

  11. Click the plus icon [+] next to Profile and on the Create Citrix Gateway Session Profile page, provide a name for the Session profile.

  12. On the Client Experience tab, click the check box next to Clientless Access and select Off from the list.

  13. Click the check box next to Plug-in Type and select Windows/macOS from the list.

  14. Click Advanced Settings and select the check box next to Client Choices and set its value to ON.

  15. On the Security tab, click the check box next to Default Authorization Action and select Allow from the list.

  16. On the Published Applications tab, click the check box next to ICA Proxy and select OFF from the list.

  17. Click Create.

  18. Enter NS_TRUE under Expression area on the Create NetScaler Gateway Session Policy page.

  19. Click Create.

  20. Click Bind.

  21. Select Authentication Profile in Advanced Settings.

    Authentication Profile

  22. Click the plus icon [+] and provide a name for the Authentication Profile.

    Add authentication Profile name

  23. Click the plus icon [+] to create an authentication virtual server.

    Create authentication virtual server

  24. Specify name and IP address type for authentication virtual server under Basic Settings area and click OK. The IP address type can be Non Addressable as well.

    Update basic settings

  25. Click Authentication Policy.

    Authentication Policy

  26. Under the Policy Binding view, click the plus icon [+] to create an authentication policy.

    Create Authentication Policy

  27. Select OAUTH as an Action Type and click the plus icon [+] to create an OAuth action for NAC.

    Select OAuth action type

  28. Create an OAuth action using Client ID, Client Secret, and Tenant ID.

    Client ID, Client Secret, and Tenant ID are generated after configuring the NetScaler Gateway application on the Azure portal.

    Ensure that you have an appropriate DNS name server configured on your appliance to resolve and reach,, and *

    ID and secret for Azure portal

  29. Create authentication policy for OAuth Action.


    http.req.header("User-Agent").contains("NAC/1.0")&& ((http.req.header("User-Agent").contains("iOS") &&    http.req.header("User-Agent").contains("NSGiOSplugin")) || (http.req.header("User-Agent").contains("Android") &&    http.req.header("User-Agent").contains("CitrixVPN")))

    OAuth rule

  30. Click the plus icon [+] to create the nextFactor policy label.

    Next factor policy label

  31. Click the plus icon [+] to create a login schema.

    Create login schema

  32. Select noschema as an authentication schema and click Create.

    Select authentication schema

  33. After selecting the created login schema, click Continue.

    Click Continue

  34. In Select Policy, select an existing authentication policy for user login or click the plus icon + to create an authentication policy. For details on creating an authentication policy, see Configuring advanced authentication policies.

    Select a policy or create one

  35. Click Bind.

    Click Bind

  36. Click Done.

    Click Done

  37. Click Bind.

    Click Bind

  38. Click Continue.

    Click Continue

  39. Click Done.

    Click Done

  40. Click Create.

    Click Create

  41. Click OK.

    Click OK

  42. Click Done.

    Click Done

To bind authentication login schema to authentication virtual server to indicate VPN plug-ins to send device ID as part of /cgi/login request

  1. Navigate to Security > AAA - Application Traffic > Virtual Servers.

    Virtual server page

  2. Select the previously selected virtual-server and click Edit.

    Edit a virtual server

  3. Click Login Schemas under Advanced Settings.

    Click advanced settings

  4. Click Login Schemas to bind.

    Select login schema

  5. Click [>] to select and bind the existing build in login schema policies for NAC device check.

    Bind login schema

  6. Select the required login schema policy appropriate for your authentication deployment and click Select.

    In the explained deployment, single factor authentication (LDAP) along with the NAC OAuth Action policy is used, hence lschema_single_factor_deviceid has been selected.

    Select login policy

  7. Click Bind.

    Click Bind

  8. Click Done.

    Click Done


General issues

Issue Resolution
The “Add Policy Required” message appears when you open an app Add policies in the Microsoft Graph API
There are policy conflicts Only a single policy per app is allowed
Your app can’t connect to internal resources Ensure that the correct firewall ports are open, you correct tenant ID, and so on

Citrix Gateway issues

Issue Resolution
The permissions required to be configured for the gateway app on Azure are unavailable. Check if a proper Intune license is available. Try using the portal to see if the permission can be added. Contact Microsoft support if the issue persists.
Citrix Gateway cannot reach From NS Shell, check if you are able to reach the following Microsoft website: cURL -v -k Then, check whether DNS is configured on Citrix Gateway. Also check that the firewall settings are correct (in case DNS requests are firewalled).
An error appears in ns.log after you configure OAuthAction. Check if Intune licensing is enabled and the Azure Gateway app has the proper permissions set.
Sh OAuthAction command does not show OAuth status as complete. Check the DNS settings and configured permissions on the Azure Gateway App.
The Android or iOS device does not show the dual authentication prompt. Check if the Dual Factor Device ID logonSchema is bound to the authentication virtual server.

Citrix Gateway OAuth status and error condition

Status Error condition
AADFORGRAPH Invalid secret, URL not resolved, connection timeout
MDMINFO * down or unreachable
GRAPH Graph endpoint is down unreachable
CERTFETCH Cannot talk to “Token Endpoint: because of a DNS error. To validate this configuration, go to the Shell prompt and type cURL This command must validate.

Note: When the OAuth status is successful, the status is displayed as COMPLETE.

Intune configuration check

Make sure to select the I agree check box in Base iOS VPN configuration for Citrix SSO > Enable network access control (NAC). Else, the NAC check does not work.

Configure Network Access Control device check for Citrix Gateway virtual server for single factor authentication deployment