Writeup — Entra ID + Cloudflare Access + SCIM
Satte upp Entra ID som IdP mot Cloudflare Access för min privata domän
för att få en bättre förståelse för hur federation, provisioning och Zero Trust fungerar i praktiken.
Målet var att få:
- OIDC authentication via Entra ID
- SCIM provisioning mellan systemen
- Automatisk sync av users och grupper
- Gruppbaserad access via Cloudflare Access
Arkitektur
Entra ID → OIDC → Cloudflare Access
Entra ID → SCIM → Cloudflare
Steg 1 — Skapa App Registration i Entra ID
Första steget var att skapa en App Registration i Entra ID.
- Entra Admin Center → App registrations
- New registration
- Single tenant
Redirect URI sattes till:
https://<teamname>.cloudflareaccess.com/cdn-cgi/access/callback
Här fastnade jag först eftersom redirect URI måste matcha exakt mellan Entra och Cloudflare.
Steg 2 — API Permissions
Efter app registration behövdes rätt Microsoft Graph permissions.
- openid
- profile
- email
- User.Read
- GroupMember.Read.All
Efter det behövde admin consent godkännas för tenant.
Steg 3 — Client Secret
Sedan skapades en Client Secret under:
Certificates & secrets
Viktigt här var att kopiera själva VALUE och inte Secret ID.
Detta orsakade auth-problem innan jag upptäckte felet.
Steg 4 — Cloudflare Access
I Cloudflare Zero Trust lades Entra ID till som Identity Provider.
Följande användes:
- Application (client) ID
- Tenant / Directory ID
- Client Secret VALUE
När allt var korrekt konfigurerat fungerade OIDC-auth mot Cloudflare Access.
Steg 5 — SCIM Provisioning
Efter auth fungerade sattes SCIM provisioning upp mellan systemen.
I Cloudflare genererades:
- SCIM Endpoint
- SCIM Secret Token
Dessa användes sedan i Entra under:
Enterprise Applications → Provisioning
Provisioning sattes till:
Automatic
Efter detta började users och grupper syncas automatiskt mellan systemen.
Problem under setup
- Tenant ID mismatch
- Fel redirect URI
- Invalid client secret
- Fel API permissions
- Admin consent saknades
Resultat
- Entra ID fungerar som central IdP
- Users och grupper syncas via SCIM
- Gruppbaserad access fungerar via Cloudflare Access
- Provisioning och deprovisioning sker automatiskt
Lärdomar
- SCIM gör lifecycle management betydligt smidigare
- Gruppbaserad provisioning sparar mycket manuellt arbete
- Det är mycket lättare att förstå identity-flöden när man ser systemen prata live
- Små detaljer som redirect URI och secrets är kritiska i federationsflöden