Directory.Read.All
Read directory data across Microsoft Entra ID.
Least-privilege guidance: Use only when a resource-specific permission cannot satisfy the directory-reading requirement.
Implementation playbook
Grant it correctly and verify the token
Microsoft Graph authorizes the endpoint, token type, permission claim, user role, and resource together.
Why access still fails
- The app was granted a permission that does not cover the exact endpoint or method.
- The token contains delegated scopes when the app needs application roles, or application roles when a signed-in user is required.
- Consent was not completed, the token was not refreshed, or the signed-in user lacks the required Entra role or license.
- Microsoft recommends resource-specific permissions where possible because Directory.Read.All grants broad access.
Recommended setup
- Confirm the exact endpoint and HTTP method, then select Directory.Read.All only if its Microsoft method documentation lists it.
- Choose delegated or application access and confirm this record supports that mode.
- Grant admin consent only after the application, publisher, tenant, and requested permission have been reviewed.
- Acquire a new token after the permission or consent change; old tokens do not gain new claims.
- Retest the smallest read or write operation before expanding the application workflow.
Verify
- Use Get-MgContext to confirm tenant, account, authentication type, and delegated scopes.
- For delegated tokens, verify the scp claim; for app-only tokens, verify the roles claim contains the expected permission.
- Confirm the token audience is Microsoft Graph and retry the exact endpoint with a new request ID.
Escalate when
- The endpoint documentation lists this permission, a new token contains the correct claim, and the request still returns 401/403.
- The same operation works for one identity or tenant but not another after role, license, ownership, and Conditional Access are compared.
- You can provide the UTC time, sanitized request/response, request ID, tenant/app IDs, token type, and granted permission list.
Inspect the active Graph PowerShell context
Get-MgContext | Select-Object ClientId,TenantId,Account,AuthType,ScopesRead-only. For app-only access, inspect the access token roles claim as well.
Permission evidence template
Permission: Directory.Read.All
Access mode: <delegated | application>
Endpoint and method: <GET https://graph.microsoft.com/v1.0/...>
UTC timestamp: <yyyy-mm-dd hh:mm:ssZ>
Request ID: <guid>Template only. Do not paste access tokens or secrets into tickets.
Permission modes
- Delegated
- Supported — admin consent required
- Application
- Supported — admin consent required
Common uses
- Cross-resource directory inventory
- Read directory objects and relationships
- Legacy integrations with broad directory queries
Advertisement
