Auth0¶
Private Beta
Cloud Security is currently in Private Beta. Features, APIs, and configuration formats described here may change before general availability. Contact us if you would like access.
Collects the Auth0 tenant as identity posture: the user directory (with MFA state), roles and role membership, applications and their machine (M2M) identities, client grants as entitlement edges, APIs (resource servers), and inbound connections / identity providers. Tenant-level posture includes MFA policy, attack protection, and session lifetimes.
Auth model: a Machine-to-Machine application authorized against the Auth0 Management API with read-only scopes, using client credentials.
Prerequisites¶
- Auth0 tenant admin access.
- Your canonical tenant domain, e.g.
example.us.auth0.com(or the legacyexample.auth0.com).
Custom domains are not usable
The Management API audience must be the canonical *.auth0.com
domain. A custom domain (login.example.com) is rejected. Use the tenant
domain shown in Settings → Custom Domains → your Auth0 domain, or in
the application's Domain field.
Required scopes¶
Authorized on the M2M application against the Auth0 Management API:
| Scope | Why | Preflight check |
|---|---|---|
read:users |
The user directory (identity nodes) | read:users |
read:clients |
Applications and machine (NHI) identities | read:clients |
read:connections |
Inbound identity-provider / social-trust posture | read:connections |
read:roles |
Roles and role membership | read:roles |
Optional scopes¶
| Scope | Unlocks | Preflight check |
|---|---|---|
read:client_grants |
Machine-identity entitlement edges (which API each M2M app can call) | read:client_grants |
read:resource_servers |
The API (resource-server) inventory | read:resource_servers |
read:tenant_settings |
Tenant session-lifetime posture | read:tenant_settings |
read:attack_protection |
Breached-password / brute-force / suspicious-IP posture | read:attack_protection |
read:guardian_factors |
MFA factor posture | read:guardian_factors |
read:mfa_policies |
Org MFA-required posture | read:mfa_policies |
Secret-bearing scopes are deliberately never requested
read:client_keys, read:client_credentials, and
read:connections_options return client secrets and connection secrets.
The collector never asks for them, so no secret material is ever fetched.
Do not grant them.
Create the M2M application¶
- Auth0 Dashboard → Applications → Applications → Create Application → choose Machine to Machine Applications → Create.
- Select the Auth0 Management API as the API to authorize.
- In the scope picker, select the four required scopes plus any optional ones.
Filter on
read:and pick them individually — do not select all. - Create, then copy the Client ID and Client Secret from the application's Settings tab.
To change scopes later: Applications → APIs → Auth0 Management API → Machine to Machine Applications tab → expand your application → adjust the checkboxes → Update.
Do not use the API Explorer's test-application button
The Management API's API Explorer tab offers Create & Authorize a Test Application. That shortcut grants the application every Management API scope — including the write and secret-bearing ones this connector deliberately avoids. Create the application from the Applications page and pick scopes explicitly.
Create the credentials secret¶
Create the provider record¶
provider.yaml:
provider_type: auth0
auth0_domain: "example.us.auth0.com"
credentials: hive://secret/auth0-m2m
internal_domains: [example.com]
refresh: 6h
In the web app: Add provider → Auth0, then set Tenant domain, Credentials, and Refresh interval.
Verify¶
The report contains one check per scope, named Scope read:<name>, plus:
| Check | Required | Meaning if it fails |
|---|---|---|
auth |
✅ | The client credentials were rejected, or the domain is wrong — no token could be minted. |
reachability |
✅ | A token was minted but the Management API is not reachable/usable. |
read:users |
✅ | The user directory cannot be enumerated. |
read:clients |
✅ | Applications and machine identities cannot be enumerated. |
read:connections |
✅ | Inbound identity-provider posture unavailable. |
read:roles |
✅ | Roles and role membership cannot be enumerated. |
read:client_grants |
— | Entitlement edges unavailable. |
read:resource_servers |
— | API inventory unavailable. |
read:tenant_settings |
— | Session-lifetime posture unavailable. |
read:attack_protection |
— | Attack-protection posture unavailable. |
read:guardian_factors |
— | MFA factor posture unavailable. |
read:mfa_policies |
— | Org MFA-required posture unavailable. |
Troubleshooting¶
provider test result |
Cause | Fix |
|---|---|---|
auth fails: access_denied / unauthorized_client |
The application is not authorized on the Auth0 Management API | Authorize it under APIs → Auth0 Management API → Machine to Machine Applications |
auth fails: service not found |
Wrong domain — usually a custom domain, or a missing region segment (example.us.auth0.com) |
Use the canonical tenant domain |
A scope check fails while auth passes |
That scope is not selected on the M2M authorization | Add it in the scope picker and Update |
| Sweeps are slow on a free tenant | Free Auth0 tenants are rate-limited to roughly 2 requests/second tenant-wide | Expected; the collector paces itself. Raise refresh if needed |
| Large directories | The Management API caps /users results per query; the collector segments the directory by creation time to read past the cap |
No action needed — a segment it cannot split is reported as an error rather than silently truncated |