Microsoft Entra single sign-on
You can leverage single sign-on (SSO) when using Microsoft Entra ID credentials to access virtual applications and desktops on Microsoft Entra joined or Microsoft Entra hybrid joined session hosts.
Supported infrastructure
The following is an overview of the infrastructure components supported for Microsoft Entra ID SSO:
| Machine identity | Citrix DaaS | CVAD On-prem | Citrix Workspace | Citrix Storefront | Citrix Gateway Service | NetScaler Gateway |
|---|---|---|---|---|---|---|
| Microsoft Entra joined | Yes | No | Yes | No | Yes | Yes |
| Microsoft Entra hybrid joined | Yes | No | Yes | No | Yes | Yes |
Supported identity providers
The The following is an overview of the Workspace identity providers supported for Microsoft Entra SSO:
| Machine identity | Entra ID | Active Directory | Active Directory + Token | Okta | SAML | NetScaler Gateway | Adaptive Authentication |
|---|---|---|---|---|---|---|---|
| Microsoft Entra joined | Yes | No | No | No | Yes | No | No |
| Microsoft Entra hybrid joined | Yes | No | No | No | Yes | No | No |
NOTE
If you are planning to use SAML as your IdP, you must ensure your SAML provider is configured properly to support Entra based authentication. See SAML using Microsoft Entra ID and Microsoft Entra identities for workspace authentication.
System requirements
The following are the system requirements for using Microsoft Entra SSO:
- Control plane: Citrix DaaS
- Citrix Cloud Commercial (US, EU, and APS)
- Citrix Cloud Japan
- User portal: Citrix Workspace
- Virtual Delivery Agent (VDA)
- Windows: version 2507 or newer
- Citrix Workspace app
- Windows: version 2507 or newer
- Linux: version 2508 or newer
- Mac: version 2508 or newer
- Session host OS:
- Windows 11, version 24H2 with 2025-09 Cumulative Updates for Windows 11 (KB5065789) or later installed (build 26100.6725)
Considerations
- Microsoft Entra single sign-on is only supported when accessing Citrix Workspace through Citrix Workspace app. If your users access Citrix Workspace through a web browser, single sign-on will not work.
- Auto Client Reconnect is not supported when Microsoft Entra single sign-on is used to log into the session. This feature is automatically disabled when this logon method is used. Session Reliability is still available for automatic reconnection in case of network disruptions.
- When a virtual desktop is locked, the default behavior is to display the Windows lock screen. Depending on your authentication requirements, you might need to change the session lock behavior. See Session lock behavior for more details.
How to configure Microsoft Entra single sign-on
Azure and Microsoft Entra ID configuration
In order to leverage Microsoft Entra single sign-on, you must first allow Microsoft Entra authentication for Windows in your Microsoft Entra ID tenant, which enables issuing the required authentication tokens that allow users to sign in to the Microsoft Entra joined and Microsoft Entra hybrid joined session hosts. To achieve this, you must do the following:
- Register the Citrix applications (Resource app and Client app) in your Microsoft Entra ID tenant.
- Enable the Remote Desktop Security Configuration for the Citrix resource application.
- Add the Citrix client application as an approved client for the Citrix resource application.
- [Optional] Hide the user consent prompt dialog.
- Create a Kerberos server object
The person making the Azure configuration must be assigned one of the following Microsoft Entra built-in roles or equivalent at a minimum:
To complete the Azure configuration, you will need to use the Microsoft Graph PowerShell SDK or Microsoft Graph API with a tool like Graph Explorer. Instructions are provided for how to complete the configuration with both PowerShell and Graph Explorer.
If you choose to use the Microsoft Graph PowerShell SDK, please note:
- You will need to use the Azure Cloud Shell with the PowerShell terminal type, or run PowerShell 7.x on your local system, and ensure your Azure context is set to the subscription that you want to use.
- You will need to install the Microsoft Graph PowerShell SDK v1.0 module (Microsoft.Graph) and the beta application module (Microsoft.Graph.Beta.Applications).
Register Citrix applications
You must register the Citrix Resource and Citrix Client applications in your Azure tenant.
You can use the following consent URLs to register the applications. Please make sure to register the Resource app first, followed by the Client app.
- Citrix Cloud US, EU, APS
- Resource app:
https://login.microsoftonline.com/common/adminconsent?client_id=3a510bb1-e334-4298-831e-3eac97f8b26c - Client app:
https://login.microsoftonline.com/common/adminconsent?client_id=85651ebe-9a8e-49e4-aaf2-9274d9b6499f
- Resource app:
- Citrix Cloud Japan
- Resource app:
https://login.microsoftonline.com/common/adminconsent?client_id=0027603f-364b-40f2-98be-8ca4bb79bf8b - Client app:
https://login.microsoftonline.com/common/adminconsent?client_id=0fa97bc0-059c-4c10-8c54-845a1fd5a916
- Resource app:
The following are the applications’ permissions:
Citrix Resource application
An application is created with the following permissions:
| API name | Claim value | Permission | Type |
|---|---|---|---|
| Microsoft Graph | User.Read | Sign in and read user profile | Delegated |
For Citrix Cloud US, EU, and APS, the application is called Citrix-Workspace-Resource (application ID 3a510bb1-e334-4298-831e-3eac97f8b26c).
For Citrix Cloud Japan, the application is called Citrix-Workspace-Resource-JP (application ID 0027603f-364b-40f2-98be-8ca4bb79bf8b).
Citrix Client application
An application is created with the following permissions:
| API name | Claim value | Permission | Type |
|---|---|---|---|
| Citrix-Workspace-Resource
Citrix-Workspace-Resource-JP |
user_impersonation
|
Citrix Entra ID SSO
|
Delegated
|
| Microsoft Graph | User.Read | Sign in and read user profile | Delegated |
For Citrix Cloud US, EU, and APS, the application is called Citrix-Workspace (application ID 85651ebe-9a8e-49e4-aaf2-9274d9b6499f).
For Citrix Cloud Japan, the application is called Citrix-Workspace-JP (application ID 0fa97bc0-059c-4c10-8c54-845a1fd5a916).
Enable Remote Desktop Security Configuration
You must enable the Remote Desktop Security Configuration in the Citrix Resource application using one of two methods: PowerShell or Graph Explorer. Instructions for both are included, but you only need to follow one.
PowerShell
-
Import the Authentication and Application Microsoft Graph modules and connect to Microsoft Graph with the
Application.Read.AllandApplication-RemoteDesktopConfig.ReadWrite.Allscopes:Import-Module Microsoft.Graph.Authentication Import-Module Microsoft.Graph.Applications Import-Module Microsoft.Graph.Beta.Applications Connect-MgGraph -Scopes "Application.Read.All","Application-RemoteDesktopConfig.ReadWrite.All" <!--NeedCopy--> -
Get the object ID for the service principals associated with the app registrations:
Citrix Cloud US, EU, APS
$CtxResourceSpId = (Get-MgServicePrincipal -Filter "AppId eq '3a510bb1-e334-4298-831e-3eac97f8b26c'").Id $CtxClientSpId = (Get-MgServicePrincipal -Filter "AppId eq '85651ebe-9a8e-49e4-aaf2-9274d9b6499f'").Id <!--NeedCopy-->Citrix Cloud Japan
$CtxResourceSpId = (Get-MgServicePrincipal -Filter "AppId eq '0027603f-364b-40f2-98be-8ca4bb79bf8b'").Id $CtxClientSpId = (Get-MgServicePrincipal -Filter "AppId eq '0fa97bc0-059c-4c10-8c54-845a1fd5a916'").Id <!--NeedCopy--> -
Set the property
isRemoteDesktopProtocolEnabledtotrue:If ((Get-MgServicePrincipalRemoteDesktopSecurityConfiguration -ServicePrincipalId $CtxResourceSpId) -ne $true) { Update-MgServicePrincipalRemoteDesktopSecurityConfiguration -ServicePrincipalId $CtxResourceSpId -IsRemoteDesktopProtocolEnabled } <!--NeedCopy--> -
Confirm the property
isRemoteDesktopProtocolEnabledis set totrue:Get-MgServicePrincipalRemoteDesktopSecurityConfiguration -ServicePrincipalId $CtxResourceSpId <!--NeedCopy-->
Graph Explorer
- Get the object ID (OID) for the service principals associated with the app registrations from the Azure portal:
- Navigate to Microsoft Entra ID > Enterprise Applications.
- Remove the
Application typefilter if set so all applications are listed. - Search for
Citrix-Workspace-Resource/Citrix-Workspace-Resource-JPand note the associated object ID for the Resource application. - Search for
Citrix-Workspace/Citrix-Workspace-JPand note the associated object ID for the client application.
- In Graph Explorer, sign in with an account from the target Azure tenant that has the required permissions.
-
Set the following query:
- HTTP request method: PATCH
- Microsoft Graph API Version: v1.0
-
Query:
https://graph.microsoft.com/v1.0/servicePrincipals/<resourceAppOID>/remoteDesktopSecurityConfiguration <!--NeedCopy--> -
Request body:
{ "@odata.type": "#microsoft.graph.remoteDesktopSecurityConfiguration" "isRemoteDesktopProtocolEnabled": true } <!--NeedCopy-->
- Select the Modify Permissions tab and ensure that you have consented to the
Application.ReadWrite.Allpermission. - Run the query.
See remoteDesktopSecurityConfiguration resource type for reference.
Approve the client application
You must explicitly add the Citrix Client application as an approved client in the Citrix Resource application. This can be done with either PowerShell or Graph Explorer. Instructions for both methods are provided, but you only need to follow one.
PowerShell
-
Create an
approvedClientAppobject:$acp = New-Object -TypeName Microsoft.Graph.Beta.PowerShell.Models.MicrosoftGraphApprovedClientApp $acp.Id = $CtxClientSpId <!--NeedCopy--> -
Add the client app to the
approvedClientAppobject:New-MgBetaServicePrincipalRemoteDesktopSecurityConfigurationApprovedClientApp -ServicePrincipalId $CtxResourceSpId -BodyParameter $acp <!--NeedCopy-->The output should be similar to this:
Id DisplayName -- ----------- 87654321-wxyz-1a2b-3c4d-1029384756af Citrix-Workspace
Graph Explorer
Set the following query and run it:
- HTTP request method: POST
- Microsoft Graph API Version: beta
-
Query:
https://graph.microsoft.com/beta/servicePrincipals/<resourceAppOID>/remoteDesktopSecurityConfiguration/approvedClientApps <!--NeedCopy--> -
Request body:
{ "@odata.type": "#microsoft.graph.approvedClientApp", "id": "<clientAppOID>" } <!--NeedCopy-->
Hide the user consent prompt dialog
By default, users are prompted to allow the Remote Desktop connection when connecting to a Microsoft Entra joined or Microsoft Entra hybrid joined session host with Microsoft Entra single sign-on enabled, in which they must select Yes to allow single sign-on. Microsoft Entra will remember up to 15 unique session hosts for 30 days before prompting again.
You can hide this dialog by configuring a list of target devices. To configure the list of devices, you must create one or more groups in Microsoft Entra ID that contain the Microsoft Entra joined and/or Microsoft Entra hybrid joined session hosts and then authorize the groups in the resource application, up to a maximum of 10 groups.
NOTE
It is highly recommended to create a dynamic group to simplify the membership management for the group. While dynamic groups normally update within 5-10 minutes, large tenants can take up to 24 hours.
Dynamic groups requires the Microsoft Entra ID P1 license or Intune for Education license. For more information, see Dynamic membership rules for groups.
Once the groups have been created, you can authorize them through either PowerShell or Graph Explorer. Instructions for both methods are provided, but you only need to follow one.
PowerShell
- Get the object ID (OID) of the group that contains the session hosts for which you want to hide the Remote Desktop connection prompt.
-
Create a
targetDeviceGroupobject:$tdg = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphTargetDeviceGroup $tdg.Id = "<groupOID>" <!--NeedCopy--> -
Add the client app to the
approvedClientAppobject:New-MgServicePrincipalRemoteDesktopSecurityConfigurationTargetDeviceGroup -ServicePrincipalId $CtxResourceSpId -BodyParameter $tdg <!--NeedCopy-->The output should be similar to this:
Id DisplayName -- ----------- 87654321-wxyz-1a2b-3c4d-1029384756af Entra-SSO-Desktops -
If you later need to remove a device group from the targetDeviceGroup object, run the following command:
Remove-MgServicePrincipalRemoteDesktopSecurityConfigurationTargetDeviceGroup -ServicePrincipalId $CtxResourceSpId -TargetDeviceGroupId "<groupOID>" <!--NeedCopy-->
Graph Explorer
Set the following query and run it:
- HTTP request method: POST
- Microsoft Graph API Version: v1.0
-
Query:
https://graph.microsoft.com/v1.0/servicePrincipals/<resourceAppOID>/remoteDesktopSecurityConfiguration/targetDeviceGroups <!--NeedCopy--> -
Request body:
{ "@odata.type": "#microsoft.graph.targetDeviceGroup", "id": "<groupOID>" } <!--NeedCopy-->
NOTE
You can repeat these steps to add more groups if needed, up to a maximum of 10 groups.
If you later need to remove a device group from the targetDeviceGroup object, set the following and run the query:
- HTTP request method: DELETE
- Microsoft Graph API Version: v1.0
-
Query:
https://graph.microsoft.com/beta/servicePrincipals/<resourceAppOID>/remoteDesktopSecurityConfiguration/targetDeviceGroups <!--NeedCopy-->
See targetDeviceGroup resource type for reference.
Create a Kerberos server object
If your session hosts are Microsoft Entra hybrid joined, you must configure a Kerberos server object in the Active Directory domain where the user and computer accounts reside. See Create a Kerberos Server object for details.
Citrix Session Hosts
Ensure the system requirements for the session hosts are met:
- Ensure the session hosts are either Microsoft Entra joined or Microsoft Entra hybrid joined.
- Install the required operating system version and build as specified in the system requirements.
- Install the required VDA version as specified in the system requirements.
Microsoft Entra hybrid joined session hosts
If you are deploying Microsoft Entra hybrid joined session hosts with Citrix Machines Creation Services, Citrix Provisioning, or Windows 365, you can proceed to the next section. If you are provisioning Microsoft Entra hybrid joined hosts using any other tool or method, you must add the following registry value to your session hosts:
- Key:
HKLM\SYSTEM\CurrentControlSet\Control\Citrix - Value type: DWORD
- Value name:
AzureADJoinType - Data:
1
Session lock behavior
When a virtual desktop is locked, the default behavior is to display the Windows lock screen. At this point, the supported authentication methods for unlocking the desktop are username and password or smart card.
If you have a passwordless deployment where users don’t know their passwords, it’s recommended to configure the session lock behavior to disconnect the session instead of showing the lock screen.
-
Multi-session session hosts
You can configure this behavior by enabling the Disconnect remote session on lock for Microsoft identity platform authentication setting through Intune or Group Policy. For detailed steps, see Configure the session lock behavior for Azure Virtual Desktop.
-
Single-session session hosts
The Disconnect remote session on lock for Microsoft identity platform authentication setting is not currently supported. However, you can achieve the same behavior by creating a Windows scheduled task.
The following example script creates a scheduled task on single-session hosts that runs cmd.exe /c tsdiscon when the desktop is locked:
# Create the TaskService COM object
$service = New-Object -ComObject "Schedule.Service"
$service.Connect()
# Get the root folder and create a new task definition
$rootFolder = $service.GetFolder("\")
$taskDef = $service.NewTask(0)
# Registration info
$taskDef.RegistrationInfo.Description = "Disconnect session when workstation is locked"
# Principal (Users group, least privilege)
$principal = $taskDef.Principal
$principal.GroupId = "S-1-5-32-545"
$principal.RunLevel = 0 # 0 = LeastPrivilege
# Settings
$settings = $taskDef.Settings
$settings.Enabled = $true
$settings.AllowDemandStart = $true
$settings.DisallowStartIfOnBatteries = $false
$settings.StopIfGoingOnBatteries = $false
$settings.AllowHardTerminate = $false
$settings.StartWhenAvailable = $false
$settings.RunOnlyIfNetworkAvailable = $false
$settings.IdleSettings.StopOnIdleEnd = $true
$settings.IdleSettings.RestartOnIdle = $false
$settings.Hidden = $false
$settings.RunOnlyIfIdle = $false
$settings.DisallowStartOnRemoteAppSession = $false
$settings.UseUnifiedSchedulingEngine = $true
$settings.WakeToRun = $false
$settings.ExecutionTimeLimit = "PT0S" # Unlimited
$settings.Priority = 7
$settings.MultipleInstances = 1 # IgnoreNew
# Trigger: SessionLock
$trigger = $taskDef.Triggers.Create(11) # 11 = TASK_TRIGGER_SESSION_STATE_CHANGE
$trigger.StateChange = 7 # 7 = SessionLock
$trigger.Enabled = $true
# Action: tsdiscon
$action = $taskDef.Actions.Create(0) # 0 = Exec
$action.Path = "cmd.exe"
$action.Arguments = "/c tsdiscon"
# Register the task
$rootFolder.RegisterTaskDefinition(
"Disconnect on Lock", # Task name
$taskDef,
6, # TASK_CREATE_OR_UPDATE
$null, $null, # No specific user/password
3 # TASK_LOGON_GROUP
) | Out-Null
<!--NeedCopy-->
If you later need to remove the scheduled task, you can run the following command:
Unregister-ScheduledTask -TaskName "Disconnect on Lock" -Confirm:$false
<!--NeedCopy-->
Citrix Access and Control Plane
Workspace authentication
You must configure Citrix Workspace to use Microsoft Entra ID or SAML as the IdP. Please refer to the Citrix Workspace documentation for details if needed.
NOTE
If you are planning to use SAML as your IdP, you must ensure your SAML provider is configured properly to support Entra based authentication. See SAML using Microsoft Entra ID and Microsoft Entra identities for workspace authentication.
Managing Workspace access
If your users will be accessing Citrix Workspace through a web browser, single sign-on will not work and they will be required to enter their credentials in the virtual desktop. Alternatively, you can enforce access through Citrix Workspace app in the store’s access configuration.
Enabling Microsoft Entra single sign-on in Workspace
After the Citrix Workspace authentication is configured, you must enable the use of Microsoft Entra single sign-on:
- Create a Service principal in Citrix Cloud:
- Go to Identity and access management > API access > Service principals.
- Click on Create service principal.
- Enter a name for the service principal and click Next.
- Set Access for the service principal:
- Select Full access, or
- Select Custom access > General > Workspace Configuration, then click Next.
- Set the secret expiration time and click Next.
- Click Complete.
- Save both the secret and ID.
- Download and extract the Citrix Workspace PowerShell module to your workstation, or any machine you can use for administrative purposes.
- Open PowerShell in the machine in which you downloaded the Citrix Workspace PowerShell module.
-
Run the following commands:
Import-Module -Name “<extractedPath>\Citrix.Workspace.StoreConfigs.psm1” Set-StoreConfigurations -StoreUrl "https://<yourPrimaryStore>.cloud.com" -ClientId "<clientId>" -ClientSecret "<clientSecret>" -AzureAdSsoEnabled $True <!--NeedCopy--> -
Run the following command to verify the setting was configured properly:
Get-StoreConfigurations -StoreUrl "https://<yourPrimaryStore>.cloud.com" -ClientId "<clientId>" -ClientSecret "<clientSecret>" <!--NeedCopy-->
Microsoft Entra hybrid joined session hosts
For session hosts that are Microsoft Entra hybrid joined, the following configuration is required:
- Create a Kerberos server object, if you haven’t already.
- If you are provisioning your sessions hosts with anything other than Citrix Machine Creation Services, Citrix Provisioning, or Windows 365, ensure the required settings are applied.
- Within Citrix Studio, assign the virtual apps and/or desktops to the appropriate Microsoft Entra users or groups. Any existing assignments to Active Directory users or groups may be removed, but it is not required.
- Configure the logon type for the Delivery Groups:
- If you do not already have the Citrix Remote PowerShell SDK installed, download it and install it on your workstation, or any machine you can use for administrative purposes.
- Open a PowerShell prompt in the machine in which you installed the Citrix Remote PowerShell SDK.
-
Run the following commands:
asnp citrix* Get-XDAuthentication Get-BrokerDesktopGroup -Name <dgName> | Set-BrokerDesktopGroup -MachineLogOnType "HybridAzureAd" <!--NeedCopy-->
Client Device
Ensure the system requirements for the client devices are met:
- Install the required Citrix Workspace app version as specified in the system requirements.
Troubleshooting
Known issues
- After enabling Microsoft Entra single sign-on, users may encounter the Microsoft error AADSTS293005 when launching their virtual desktop, indicating
RDP protocol is not enabled for the requested resource application. Please configure the RemoteDesktopSecurityConfiguration property on resource service principal to enable RDP protocol.To resolve this issue, restart Citrix Workspace app. - Users may encounter a 30-second delay when launching sessions if their Citrix Workspace app does not support Microsoft Entra single sign-on or if they access Citrix Workspace via a web browser.
- Users may encounter a 30-second delay when launching sessions if Microsoft Entra single sign-on is enabled on Citrix Workspace and the required Azure configuration has not been completed.
- Single sign-on fails when using Microsoft Entra hybrid joined sessions hosts if the user account is a domain administrator.
When single sign-on fails
If single sign-on fails when accessing virtual desktops or applications, proceed as follows:
-
Confirm that Microsoft Entra single sign-on is enabled in Citrix Workspace.
-
Confirm that the client device is running the required version of Citrix Workspace app.
-
If the user is accessing Citrix Workspace through a browser, instruct them to access Citrix Workspace through Citrix Workspace app.
-
If the user is accessing Citrix Workspace through a browser in an Android or iOS device, instruct them to access Citrix Workspace through the Citrix Workspace app.
-
Confirm that your session hosts are running the required Windows build.
-
Confirm that your session hosts are running the required VDA version.
-
Ensure that the Windows setting
Always prompt for password upon connectionis not enabled on the session hosts. - Confirm that the
AzureADJoinTypesetting is configured correctly in the session hosts:- Key:
HKLM\SYSTEM\CurrentControlSet\Control\Citrix - Value type: DWORD
- Value name:
AzureADJoinType - Value data:
1(Microsoft Entra hybrid joined);2(Microsoft Entra joined)
- Key:
-
Ensure that the virtual desktops or applications are assigned to Microsoft Entra identities instead of Active Directory identities in Citrix Studio.
-
Confirm that the Delivery Groups’ logon type is configured correctly by running the following PowerShell command:
Get-BrokerDesktopGroup -Name <deliveryGroupName> <!--NeedCopy-->For Microsoft Entra joined session hosts,
MachineLogOnTypemust be set toAzureAd. For Microsoft Entra hybrid joined session hosts,MachineLogOnTypemust be set toHybridAzureAd. -
If you are using a SAML IdP, confirm that the necessary configuration was implemented.
-
Confirm that the Citrix Resource and Client applications are registered in the Microsoft Entra tenant.
-
Confirm that the Remote Desktop Security Configuration is enabled on the Citrix Resource application.
-
Confirm that the Citrix Client application was added as an approved client application in the Citrix Resource application.
- If your session hosts are Microsoft Entra hybrid joined, confirm that a Kerberos server object was created in the Active Directory domain where the user and computer accounts reside.