Cross-Tenant Synchronization in Azure Active Directory: A Comprehensive Guide

As more and more businesses move to the cloud, the need for multi-tenant applications is becoming increasingly important. With multi-tenancy, a single instance of an application can serve multiple customers, each with their own isolated and secure environment. In Azure Active Directory, cross-tenant synchronization is a critical component of multi-tenant applications. In this article, we'll explore cross-tenant synchronization in Azure Active Directory, why it's important, and how it can be implemented.

What is Cross-Tenant Synchronization?

Cross-tenant synchronization is the process of synchronizing data across different Azure Active Directory (Azure AD) tenants. In the context of multi-tenant applications, this means ensuring that user and application data is consistently synchronized across all tenants. For example, if a user creates an account in one tenant, that account information needs to be available to other tenants in the same application. Cross-tenant synchronization ensures that data is consistent and up-to-date across all tenants.

Why is Cross-Tenant Synchronization important?

Cross-tenant synchronization is important because it allows organizations to collaborate effectively across tenant boundaries, while maintaining control over their own user and resource data. Without cross-tenant synchronization, each tenant operates in its own isolated environment, with no easy way to share resources or collaborate with other organizations. In a multi-tenant environment, cross-tenant synchronization enables organizations to manage their users and resources across multiple tenants with ease. This makes it possible to share applications, data, and other resources securely, while ensuring that each organization maintains control over its own data.

For example, a software company may have multiple tenants, each containing customer data for a different set of customers. With cross-tenant synchronization, the software company can manage customer data across all tenants in a unified way, providing a better user experience for their customers and improving operational efficiency. Cross-tenant synchronization also helps organizations streamline their workflows and avoid data duplication, by enabling them to manage data in one place and sync it to other tenants as needed. This reduces the risk of errors and inconsistencies that can arise when data is managed in multiple places.

Implementing Cross-Tenant Synchronization in Azure AD

Azure AD provides several tools and services for implementing cross-tenant synchronization. In this section, we'll explore some of the key tools and services that can be used to implement cross-tenant synchronization.

Azure AD Connect

Azure AD Connect is a tool that can be used to synchronize user and group information between on-premises Active Directory and Azure AD. With Azure AD Connect, you can synchronize user and group information from multiple on-premises Active Directory forests to a single Azure AD tenant. You can also synchronize user and group information between multiple Azure AD tenants.

To set up cross-tenant synchronization with Azure AD Connect, you'll need to create a new Azure AD Connect configuration for the target tenant. You'll then need to configure Azure AD Connect to synchronize the necessary user and group information between the source and target tenants.

Azure AD B2B Collaboration

Azure AD B2B Collaboration is a feature that allows organizations to securely share resources and collaborate with users from other organizations. With Azure AD B2B Collaboration, you can invite external users to collaborate with you on resources that are hosted in Azure AD.

To set up cross-tenant synchronization with Azure AD B2B Collaboration, you'll need to invite the external users to join your Azure AD tenant. Once the external users have accepted the invitation and joined your Azure AD tenant, you can configure access to the necessary resources.

Azure AD Graph API

The Azure AD Graph API is a RESTful API that can be used to manage Azure AD resources such as users, groups, and applications. With the Azure AD Graph API, you can perform cross-tenant synchronization of users and groups by programmatically creating, updating, and deleting objects in Azure AD.

To use the Azure AD Graph API for cross-tenant synchronization, you'll need to create an application in the source and target tenants and grant the application the necessary permissions to read and write user and group information. You can then use the Azure AD Graph API to synchronize user and group information between the source and target tenants.

Azure AD PowerShell

Azure AD PowerShell is a PowerShell module that can be used to manage Azure AD resources such as users, groups, and applications. With Azure AD PowerShell, you can perform cross-tenant synchronization of users and groups by programmatically creating, updating, and deleting objects in Azure AD.

To use Azure AD PowerShell for cross-tenant synchronization, you'll need to install the Azure AD PowerShell module and connect to both the source and target tenants. You can then use Azure AD PowerShell to synchronize user and group information between the source and target tenants.

Azure AD Connect Health

Azure AD Connect Health is a tool that can be used to monitor and report on the health of Azure AD Connect. With Azure AD Connect Health, you can monitor the status of synchronization operations and view synchronization errors.

To use Azure AD Connect Health for cross-tenant synchronization, you'll need to configure Azure AD Connect to use Azure AD Connect Health. You can then use Azure AD Connect Health to monitor the status of synchronization operations between the source and target tenants.

Use Case Implementation

Below are the steps that need to be performed to synchronize user and group information between on-premises Active Directory and Azure AD using Azure AD Connect.

  1. Download and install Azure AD Connect on a server in your on-premises environment.
  2. During the installation process, you will be prompted to sign in to your Azure AD tenant and provide credentials for an account that has permission to manage directory objects in Azure AD.
  3. Next, you will be prompted to select the synchronization method. Choose the option that best fits your scenario. For example, if you have a single forest with a single domain, you can use the Express Settings.
  4. After selecting the synchronization method, you will be prompted to configure the source and destination directories. This involves specifying the Active Directory domain that you want to synchronize, as well as the Azure AD tenant and directory that you want to synchronize with.
  5. You will then be prompted to specify which objects you want to synchronize. This includes user accounts, groups, and optionally, devices.
  6. After completing the configuration, Azure AD Connect will synchronize the specified objects from on-premises Active Directory to Azure AD. You can monitor the synchronization status and troubleshoot issues using the Azure AD Connect synchronization service manager.

Once the synchronization is complete, you can manage your users and groups in Active Directory and have those changes automatically reflected in Azure AD. This enables you to use a single identity and access management system for both on-premises and cloud-based resources.

Another simple example for Azure AD Graph API to synchronize users across multiple tenants is as follows:  

  • Register your application with Azure AD in both the source and target tenants. To do this, go to the Azure portal and navigate to Azure Active Directory > App registrations. Click the New registration button and follow the prompts to register your application. Make note of the application ID and secret for each registration.
  • Grant the necessary permissions to your application in both the source and target tenants. To do this, navigate to the API permissions section of your application registration and add the required permissions.
  • Generate an access token for the source tenant. To do this, you'll need to use the client ID and secret of your source tenant application registration. You can use the following code to generate an access token:
    public static async Task<string> GetAccessToken(string tenantId, string clientId, string clientSecret)
    {
        var authContext = new AuthenticationContext("https://login.microsoftonline.com/" + tenantId);
        var credential = new ClientCredential(clientId, clientSecret);
        var result = await authContext.AcquireTokenAsync("https://graph.windows.net", credential);
        return result.AccessToken;
    }
  • Use the Azure AD Graph API to retrieve a list of users from the source tenant. You can use the following code to do this:
    public static async Task<IEnumerable<User>> GetUsers(string sourceTenantId, string sourceClientId, string sourceClientSecret)
    {
        var token = await GetAccessToken(sourceTenantId, sourceClientId, sourceClientSecret);
        var graphClient = new GraphServiceClient(
            new DelegateAuthenticationProvider((requestMessage) =>
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
                return Task.FromResult(0);
            }));
    
        var users = await graphClient.Users.Request().GetAsync();
        return users;
    }
  • Use the Azure AD Graph API to create or update users in the target tenant. You can use the following code to do this:
    public static async Task CreateUser(string targetTenantId, string targetClientId, string targetClientSecret, User user)
    {
        var token = await GetAccessToken(targetTenantId, targetClientId, targetClientSecret);
        var graphClient = new GraphServiceClient(
            new DelegateAuthenticationProvider((requestMessage) =>
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
                return Task.FromResult(0);
            }));
    
        var existingUser = await graphClient.Users[user.UserPrincipalName].Request().GetAsync();
        if (existingUser == null)
        {
            await graphClient.Users.Request().AddAsync(user);
        }
        else
        {
            existingUser.GivenName = user.GivenName;
            existingUser.Surname = user.Surname;
            existingUser.UserPrincipalName = user.UserPrincipalName;
            await graphClient.Users[existingUser.Id].Request().UpdateAsync(existingUser);
        }
    }
  • Call the GetUsers method to retrieve a list of users from the source tenant.
  • For each user in the list, call the CreateUser method to create or update the user in the target tenant.

Following the above sequence you should now be able to use the Azure AD Graph API to synchronize users across multiple tenants. Of course, you may need to customize this code to suit your specific requirements, but this should provide a good starting point.

Topologies for cross-tenant synchronization

There are several topologies that can be used to implement cross-tenant synchronization in Azure AD, depending on the specific needs of the organization. Here are some of the most common topologies:

  • One-way synchronization: In this topology, data is synchronized in one direction only, from the source tenant to the target tenant. This can be useful when one tenant contains authoritative data, and the other tenants need to consume that data.
  • Two-way synchronization: In this topology, data is synchronized bidirectionally between the source and target tenants. This can be useful when multiple tenants need to update data, and all changes must be kept in sync.
  • Hub-and-spoke: In this topology, one tenant acts as a hub, and all other tenants synchronize with it. This can be useful when there is a central organization that needs to distribute data to multiple subsidiaries or partner organizations.
  • Mesh: In this topology, all tenants synchronize with each other, forming a network of interconnected tenants. This can be useful when there is a need for frequent data sharing between all tenants.

When choosing a topology, it's important to consider factors such as the size and complexity of the organization, the amount of data that needs to be synchronized, and the level of control required over data sharing between tenants.

Conclusion

Implementing cross-tenant synchronization in Azure AD can be a complex task, but it's an important part of managing multi-tenant organizations. By using the tools and services provided by Azure AD, you can synchronize user and group information between multiple tenants and ensure that all user information is consistent and up-to-date. Whether you choose to use Azure AD Connect, Azure AD B2B Collaboration, the Azure AD Graph API, Azure AD PowerShell, or Azure AD Connect Health, it's important to carefully plan and test your synchronization strategy before implementing it in a production environment.