Connecting Microsoft Entra ID (Azure AD)
Step-by-step guide to creating an Azure AD App Registration and linking it to Liceo for automated user and license sync.
Overview
The Microsoft Entra ID (formerly Azure Active Directory) integration lets Liceo automatically discover your organization's users, Microsoft 365 license subscriptions, and SSO-connected third-party applications. Once connected, Liceo will reflect your real seat counts and user assignments — no manual data entry required.
The integration uses the Microsoft Graph API with read-only permissions. Liceo never writes data back to your Azure tenant.
The setup takes approximately 10–15 minutes and requires access to the Azure Portal with at least the Application Administrator role.
Prerequisites
- An active Microsoft 365 or Azure subscription.
- An Azure account with the Application Administrator (or higher) role in your Azure AD tenant.
- A Liceo account with the Admin role. Only admins can configure integrations.
- The Liceo callback URL:
https://liceo.io/api/auth/entra/callback
Step 1 — Create an App Registration
An App Registration tells Azure which external application (Liceo) is allowed to read your directory data.
- 1Sign in to the Azure Portal (
portal.azure.com). - 2In the top search bar type App registrations and click the service that appears under Services.
- 3Click + New registration in the top-left corner.
- 4Fill in the registration form:
- Name: Enter a recognisable name such as
Liceo Integration. - Supported account types: Select "Accounts in this organizational directory only (Single tenant)".
- Redirect URI: Leave this blank for now — you will add it in Step 5.
- Name: Enter a recognisable name such as
- 5Click Register. Azure will create the app and take you to its Overview page.
Step 2 — Copy your Tenant ID & Client ID
On the Overview page of your newly created app registration, you will see two key identifiers:
| Field in Azure Portal | What it maps to in Liceo |
|---|---|
| Application (client) ID | Client ID |
| Directory (tenant) ID | Tenant ID |
- 1On the Overview page, locate Application (client) ID and click the copy icon next to it. Paste this value into a text file — you will need it shortly.
- 2Similarly, copy the Directory (tenant) ID and save it.
Both IDs are GUIDs in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. If the value you copied does not match this pattern, check you are on the app Overview page, not the Azure AD overview.
Step 3 — Create a Client Secret
A client secret is a password that allows Liceo to authenticate as your registered application. It is shown only once — copy it immediately.
- 1In the left sidebar of your app registration, click Certificates & secrets.
- 2Under the Client secrets tab, click + New client secret.
- 3Enter a description (e.g.,
Liceo sync key) and choose an expiry period. We recommend 24 months — you will need to rotate this secret in Liceo before it expires. - 4Click Add.
- 5Azure displays the secret value in the Value column. Copy it now — it will be hidden as soon as you navigate away.
Copy the Value column, not the Secret ID column. The Secret ID is a GUID and will not work as a client secret in Liceo.
Step 4 — Configure API Permissions
Liceo needs read-only access to your Microsoft Graph directory. You must grant the following Application permissions (not Delegated).
| Permission | Type | Used for |
|---|---|---|
| User.Read.All | Application | Read all user profiles and license assignments |
| Directory.Read.All | Application | Discover enterprise apps and SSO-connected services |
| Organization.Read.All | Application | Read subscribed SKUs and license counts |
| Reports.Read.All | Application | Fetch usage reports (last-active dates per user) |
- 1In the left sidebar click API permissions.
- 2Click + Add a permission, then select Microsoft Graph.
- 3Select Application permissions (not Delegated permissions).
- 4Search for and tick each of the four permissions in the table above:
User.Read.All,Directory.Read.All,Organization.Read.All, andReports.Read.All. - 5Click Add permissions.
- 6Click Grant admin consent for [Your Organization] and confirm. The status column for each permission should change to a green tick labelled "Granted for [Org]".
If you skip the Grant admin consent step, the sync will fail with a permissions error even though the credentials appear correct. Admin consent is required because these are Application (non-delegated) permissions.
Step 5 — Add the Redirect URI
The Redirect URI tells Azure where to send the OAuth authorization code after a user approves the connection. It must match exactly what Liceo expects — any mismatch causes the AADSTS50011 error.
- 1In the left sidebar click Authentication.
- 2Under Platform configurations, click + Add a platform.
- 3Select Web.
- 4In the Redirect URIs field enter exactly:
https://liceo.io/api/auth/entra/callback - 5Click Configure.
The redirect URI is case-sensitive and must have no trailing slash. A URI of https://liceo.io/api/auth/entra/callback/ (with a slash) will be rejected by Azure.
Step 6 — Enter Credentials in Liceo
- 1In Liceo, navigate to Settings → Integrations (or click Integrations in the left sidebar).
- 2Find the Microsoft Entra ID card and click Connect.
- 3Enter the three values you copied earlier:
- Tenant ID — the Directory (tenant) ID from Step 2
- Client ID — the Application (client) ID from Step 2
- Client Secret — the secret value (not the ID) from Step 3
- 4Click Authorize with Microsoft. You will be redirected to a Microsoft login page. Sign in with a Global Administrator or Application Administrator account.
- 5After authorization, you will be returned to the Liceo Integrations page with a green "Connected" badge.
- 6Click Sync Now to run the first data sync. Liceo will import your Microsoft 365 license subscriptions, user assignments, and SSO-connected applications. Synced users appear in the User Directory with a blue "Synced" status badge.
Liceo does not automatically invite synced users to create a Liceo account. To give a synced user access, open the User Directory, find their row, and click Invite to Liceo from the actions menu. They will receive an invitation email.
Troubleshooting
AADSTS50011 — Redirect URI mismatch
Azure rejected the redirect because the URI Liceo sent does not match what you registered in the Azure portal.
Fix:
- In Azure Portal, open your app registration → Authentication.
- Ensure the Redirect URI is exactly
https://liceo.io/api/auth/entra/callbackwith no trailing slash. - Save and retry the connection from Liceo.
Sync succeeds but no users appear
If the sync reports users discovered but the User Directory is still empty, check that you granted admin consent for the API permissions in Step 4. Without consent, the Graph API returns an empty user list rather than an error.
AADSTS700016 — Application not found in directory
This usually means the Client ID was copied incorrectly, or the app registration is in a different tenant than the Tenant ID you entered.
Fix: Double-check that the Tenant ID and Client ID both come from the same app registration Overview page.
Client secret expired
Client secrets expire after the period you chose in Step 3. When this happens, the sync will fail silently or show a token error.
Fix: In Azure Portal, go to Certificates & secrets → create a new secret → copy the value → re-enter it in Liceo under Settings → Integrations → Microsoft Entra ID → Update Credentials.
Duplicate vendors or licenses after re-syncing
If you previously ran a test sync and want to start fresh, a super-admin can purge all imported data from the admin console without removing your account or settings. After the purge, run Sync Now again for a clean import.
Was this article helpful? Send us feedback
← Back to Help Center