What You’ll End Up With
Initial sync runs as soon as you finish step 7. After that, Origin re-syncs every hour, plus an on-demand button in the dashboard.
Before You Begin
You need:- An Entra admin account with one of the roles listed above.
- The Origin dashboard URL for your tenant — the public hostname you sign in to. The redirect URI you’ll register in Entra is
https://<your-origin-hostname>/integrations/oauth-callback. For example, if you sign in athttps://app.origin.example.com, the redirect URI ishttps://app.origin.example.com/integrations/oauth-callback. - Your Origin tenant admin role — only Origin Admins can create directory integrations.
Last sign-in time (
last_login in the Directory Browser) is sourced from Entra’s signInActivity resource, which requires an Entra ID P1 or P2 license plus the AuditLog.Read.All Graph permission. On the free tier — or on P1/P2 without AuditLog.Read.All granted — Graph silently omits the field and Origin records the user’s last sign-in as the Unix epoch (1970-01-01). Stale-account detection that relies on this field will be best-effort until both prerequisites are in place. Everything else (users, groups, memberships, devices, owners) is available on the free tier with the permissions in step 2 below.Setup Steps
1
Register the Application in Entra
Sign in to the Microsoft Entra admin center with your admin account, then:
- Navigate to Identity → Applications → App registrations → New registration.
- Fill in the registration form:
- Name — something a future admin will recognize, e.g.
Origin Directory Sync. - Supported account types — select Accounts in this organizational directory only (Single tenant).
- Redirect URI — select Web and enter
https://dashboard.originhq.com/integrations/oauth-callback. The hostname must match exactly (scheme, host, port, and path). Origin rejects callbacks whose redirect URI doesn’t match what was stamped into the OAuth state.
- Name — something a future admin will recognize, e.g.
- Click Register.
- Application (client) ID
- Directory (tenant) ID
2
Grant Microsoft Graph API Permissions
Origin uses application permissions (also called app-only or client_credentials), not delegated permissions, so the sync continues to run when no user is signed in.
- In the same app registration, click API permissions → Add a permission → Microsoft Graph → Application permissions.
- Add all six permissions in the table below. You can search by name; tick the checkbox and click Add permissions between groups if it’s easier.
- After all six are listed, click Grant admin consent for
<your tenant>at the top of the table. You’ll be prompted to confirm — accept. Each row should now show a green check under Status.
If you see “Not granted for
<tenant>” with a yellow warning after clicking Grant, your account doesn’t have one of the admin roles listed in the prerequisites. Either get the role assignment or hand this step to someone who has it — only the consent step is gated on it.3
Confirm the Redirect URI
Step 1 already added the redirect URI, but it’s worth verifying — a typo here is the single most common reason the connect-to-Origin step fails.
- Go to Authentication → under Web → Redirect URIs.
- Confirm
https://dashboard.originhq.com/integrations/oauth-callbackis listed exactly as typed. - Leave everything else on this page at its default. Origin does not need the implicit grant flow, ID tokens, or any extra “Front-channel logout” URI.
- Click Save if you changed anything.
4
Create a Client Secret
The secret is what the Origin backend presents to Microsoft to acquire Graph tokens after admin consent completes. It’s stored on Origin’s side encrypted under your tenant’s KMS-managed data key — Origin admins never see it in plaintext after entry.
- Go to Certificates & secrets → Client secrets → New client secret.
- Description — something descriptive, e.g.
origin-directory-sync-2026-q2. - Expires — pick the longest window your security policy allows. Origin will warn you in the dashboard 14 days before the secret expires (the integration’s status flips from Connected to At risk) so you can rotate before sync stops.
- Click Add.
5
Connect from the Origin Dashboard
- Sign in to your Origin dashboard at
https://dashboard.originhq.com/. - Go to Directory Integration in the left sidebar → + Add Integration (or click Add your first integration if this is the first one).
- Select Entra ID (Microsoft Entra ID).
- Fill in the connection form:
- Display Name — anything; this is just a label in the integrations list.
- Tenant ID — paste the Directory (tenant) ID from step 1.
- Client ID — paste the Application (client) ID from step 1.
- Client Secret — paste the Value you copied in step 4.
- Click Connect with Entra ID.
6
Trigger Your First Sync
Origin runs a periodic background sync, but you don’t need to wait. Click Sync in the row’s Actions column. The status flips to Syncing, then back to Connected with a populated Last Sync timestamp.A typical first sync takes a few seconds for small tenants and a couple of minutes for tenants with tens of thousands of users.If the sync turns the row red and shows an error, see the Troubleshooting section below.
7
Verify in the Directory Browser
- Go to Directory Integration → Directory Browser tab.
- The Users tab should list everyone Origin pulled.
- Click any user. The detail panel shows their direct groups under a Groups subsection — click any group to deep-link into that group’s detail.
- Go to the Groups tab → click any group. The detail panel shows direct user members and direct sub-groups (if your tenant uses nested groups). Click any member to jump back to that user.
- Check the Devices tab — Intune-managed devices show their serial number; Entra-joined devices that Intune hasn’t seen show a blank serial and the device’s
displayName. Both share an Owner column resolved against synced users.
What Gets Synced (and What Doesn’t)
Synced — full list:- Users (active and disabled) — display name, email, UPN, department, job title, office, manager, last sign-in (best-effort — see Before You Begin), account-enabled flag.
- Groups — display name, description, type (security / distribution / Microsoft 365), member count, direct memberships, direct sub-groups.
- Entra-joined devices — display name, OS, OS version, registered owners.
- Intune-managed devices — hardware serial number, model, manufacturer, assigned UPN, compliance state, OS, OS version.
- Photos, contacts, mailbox metadata, OneDrive, calendars, or any tenant data outside the directory itself.
- Conditional Access policies, role assignments, or audit logs.
- Service principals or managed identities.
- Personal-access guest accounts (
#EXT#UPN suffix) — these are filtered out at sync time so they don’t appear as “users” in the directory browser.
Troubleshooting
Connect to Azure AD fails immediately with a 400
Connect to Azure AD fails immediately with a 400
Either the tenant ID, client ID, or redirect URI is wrong. Double-check that:
- The redirect URI in Entra exactly matches
https://dashboard.originhq.com/integrations/oauth-callback. - The tenant ID and client ID in the dashboard form match the Directory (tenant) ID and Application (client) ID on the app’s Overview page — not the Object ID, which is a different value.
Admin consent succeeds but Origin shows 'No credentials stored'
Admin consent succeeds but Origin shows 'No credentials stored'
The client secret didn’t reach Origin’s backend. Most likely you left the Client Secret field blank, or pasted the Secret ID (the GUID in the right-hand column on Entra’s secrets page) instead of the Value. Delete the integration in Origin, generate a fresh client secret in Entra (step 4), and run step 5 again.
Sync row is red with 'Azure token acquisition failed'
Sync row is red with 'Azure token acquisition failed'
The stored secret is rejected by Microsoft’s token endpoint. Common causes:
- The secret expired. Check Certificates & secrets in Entra; if the Expires column is in the past, generate a new secret (step 4) and use the integration’s Edit action to update it.
- The secret was revoked. Same fix as above.
- The application was deleted from Entra. Re-register from step 1.
Sync runs but users and groups stay at zero
Sync runs but users and groups stay at zero
If only devices land and users/groups are empty, your app registration is probably missing the
User.Read.All and Group.Read.All application permissions, or admin consent wasn’t granted for them. Return to step 2, confirm both rows have green checks under Status, and trigger the sync again.Sub-groups column is always empty
Sub-groups column is always empty
Your tenant may not actually use nested groups — many small tenants don’t. To confirm, navigate to one of your groups in Entra → Members and look for entries with the Type column set to Group. If there are none, there are no sub-groups for Origin to surface.
Rotating the Client Secret
Origin shows a yellow At risk badge on the integration when the secret is within 14 days of expiry. To rotate without dropping sync:- Generate a new client secret in Entra (step 4). Don’t delete the old one yet.
- In the Origin dashboard, click Edit on the integration row, paste the new Value into the Client Secret field, and save.
- Trigger a manual sync (step 6). If it succeeds, the new secret is live.
- Delete the old secret from Entra.
Removing the Integration
To stop syncing without revoking access in Entra:- Go to Directory Integration → click Delete in the row’s Actions column. Origin tears down its end and tombstones the directory data (eligible for hard-delete after the retention window in your tenant settings, default 90 days).
- Optionally revoke admin consent from your tenant: in Entra, go to Identity → Applications → Enterprise applications → pick your Origin Directory Sync app → Permissions → Review permissions → This application has more permissions than I want it to have. This revokes the granted permissions but leaves the app registration in place so you can re-grant later.
- To fully remove the app, delete it from App registrations in Entra.