One login, many tenants: how sign-in finds your organization
14 Jul 2026
TL;DR — you never have to tell GraphPaaS who you are. When you sign in with Microsoft, your account's Entra tenant ID travels inside Microsoft's signed token, and that ID — not your email domain — decides which GraphPaaS organization you land in. you@fabrikam.com and you@sandbox.pt end up in different organizations automatically, with zero shared data between them.
How sign-in routing works
Every "Sign in with Microsoft" round-trip follows the same path:
You click "Sign in"
│
▼
Microsoft login ── you authenticate against YOUR company's
│ Microsoft Entra tenant (password, MFA…)
▼
Microsoft returns a signed token containing:
• tid → your Entra tenant ID
• oid → your user ID inside that tenant
│
▼
GraphPaaS looks up the tenant by tid
│
├─ tenant registered & active ──► your org's dashboard
├─ tenant pending consent ─────► onboarding wizard
└─ tenant unknown ─────────────► "not onboarded" screen
(or self-signup, if you
came from a pricing CTA)
The lookup key is the tenant ID, a GUID that Microsoft guarantees and signs. GraphPaaS never guesses from the email address.
Why not route by email domain?
Because email domains lie, and tenant IDs can't:
- A company can have many domains in one Entra tenant (
fabrikam.com,fabrikam.pt,fabrikam-labs.io). All of them belong to the same tenant ID — so all of those users land in the same GraphPaaS organization, as they should. - Guest users keep their home email (
partner@othercompany.com) while living in your tenant directory. Routing by domain would send them to the wrong place; routing bytidsends them exactly where their account lives. - An email domain can be typed by anyone; a tenant ID arrives inside a token signed by Microsoft. There is nothing to spoof.
Scenario 1 — two separate companies
You run @fabrikam.com and @sandbox.pt, and they are two different Entra tenants:
you@fabrikam.com ──► tid A ──► Org "Fabrikam" (its own data,
users, billing)
you@sandbox.pt ───► tid B ──► Org "Sandbox" (fully isolated)
Each organization has its own dashboard, its own users, its own plan. Data is isolated end to end — one org can never see another's metrics, even if the same human owns both.
Scenario 2 — one company, many domains
If fabrikam.com and fabrikam.pt are the same Entra tenant, everyone lands in the same GraphPaaS organization regardless of which email they use. No configuration needed.
Scenario 3 — an MSP managing many client tenants
This is what GraphPaaS is built for. One organization can hold multiple Microsoft tenants:
Org "Your MSP"
├── Tenant: client-one.com ◄─ admin consent granted
├── Tenant: client-two.com ◄─ admin consent granted
└── Tenant: client-three.com ◄─ pending consent
You add client tenants from Settings → Tenants (each one gets a consent link for the client's admin), and switch between them with the tenant switcher in the dashboard header. Your team signs in once — with your MSP identities — and sees every client tenant your plan allows.
Who becomes admin?
- The first user to sign in for a new tenant becomes its tenant admin.
- Everyone after that arrives as a viewer until an admin promotes them (Settings → Team).
- Admins can also invite teammates by email: the invitation is linked to their Microsoft account on their first login, keeping the role they were invited with.
- Seats are counted per organization — when the plan's seat limit is reached, new sign-ins are blocked until a seat frees up.
What if my tenant isn't registered yet?
A sign-in from an unknown tenant doesn't create anything by accident. You'll see a "not onboarded" screen — unless you started from a pricing CTA on our landing page, in which case GraphPaaS creates your organization, walks you through the admin consent step (a one-time approval by your Microsoft admin) and starts the first sync.
Questions about a setup we didn't cover? Get in touch — multi-tenant edge cases are our favourite kind.