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

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

  • SNI for DTLS gateway virtual server is supported in Citrix Gateway release 13.0 build 64.x and later.

  • 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 Citrix Gateway > Virtual Servers.

    Virtual servers page

  2. Click Add.

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

    Set basic settings

  4. Select Server Certificate.

    Select a server cert

  5. Select required server certificate and click Bind.

    Bind server cert

  6. Click Continue.

  7. Click Continue.

  8. Click Continue.

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

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

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

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

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

  14. Click the check box next to Plug-in Type and select Windows/Mac OS X from the list.

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

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

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

  18. Click Create.

  19. On the Create Citrix Gateway Session Policy page, In the Expression area, configure the qualifying expression.

  20. Click Create.

  21. Click Bind.

  22. Select Authentication Profile in Advanced Settings.

    Select authentication profile

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

    Authentication profile name

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

    Add authentication virtual server

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

    Set basic settings

  26. Click Authentication Policy.

    Authentication policy

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

    Create authentication policy

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

    Select OAuth action type

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


    • Client ID, Client Secret, and Tenant ID are generated after configuring the Citrix Gateway application on the Azure portal.
    • Note down the Client ID/Application ID, Client Secret/Application Secret, and Azure tenant ID information as they are required when creating an OAuth action on Citrix Gateway later.

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

    ID and secret for Azure portal

  30. 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")))

    Authentication policy rule

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

    Create next factor policy label

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

    Create login schema

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

    Select authentication schema

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

    Click continue

  35. 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 and Configuring LDAP Authentication.

    Select or create an authentication policy

  36. Click Bind.

    Click bind

  37. Click Done.

    Click Done

  38. Click Bind.

    Click Bind

  39. Click Continue.

    Click Continue

  40. Click Done.

    Click Done

  41. Click Create.

    Click Create

  42. Click OK.

    Click OK

  43. 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 servers page

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

    Edit a virtual server

  3. Click Login Schemas under Advanced Settings.

    Select login schema

  4. Click Login Schemas to bind.

    Bind login schema

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

    Bind login schema policies

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

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

    Select single factor authentication 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 login