Chapter 30 · Entra App Registration
Subchapter 30.1
references/api-permissions.mdMarkdown10 KBView on GitHub
This document explains how to configure and manage API permissions for your Microsoft Entra app registration.
What: Application acts on behalf of a signed-in user
When to use:
Examples:
Scope format: User must consent (or admin pre-consents)
What: Application acts with its own identity (no user)
When to use:
Examples:
Requirement: Always requires admin consent
Scope: A string that defines what access is granted
Format:
{resource}/{permission_name}
Examples:
https://graph.microsoft.com/User.Read
https://graph.microsoft.com/Mail.Send
api://myapi-id/access_as_userSpecial scope that includes all configured permissions:
https://graph.microsoft.com/.default
api://your-api-id/.defaultWhen to use:
| Permission | What it allows | Admin Consent Required |
|---|---|---|
User.Read | Read signed-in user’s profile | No |
User.ReadWrite | Read and update user profile | No |
User.ReadBasic.All | Read basic info of all users | No |
User.Read.All | Read all users’ full profiles | Yes |
Mail.Read | Read user’s mail | No |
Mail.ReadWrite | Read and write user’s mail | No |
Mail.Send | Send mail as user | No |
Calendars.Read | Read user’s calendars | No |
Calendars.ReadWrite | Read and write calendars | No |
Files.Read.All | Read all files user can access | No |
Sites.Read.All | Read items in all site collections | Yes |
Directory.Read.All | Read directory data | Yes |
Directory.ReadWrite.All | Read and write directory data | Yes |
| Permission | What it allows | Admin Consent Required |
|---|---|---|
User.Read.All | Read all users’ full profiles | Yes (Always) |
User.ReadWrite.All | Read and write all users’ profiles | Yes (Always) |
Mail.Read | Read mail in all mailboxes | Yes (Always) |
Mail.Send | Send mail as any user | Yes (Always) |
Calendars.Read | Read calendars in all mailboxes | Yes (Always) |
Directory.Read.All | Read directory data | Yes (Always) |
Directory.ReadWrite.All | Read and write directory data | Yes (Always) |
Group.ReadWrite.All | Read and write all groups | Yes (Always) |
Navigate to your app registration
Click “API permissions” in left menu
Click “+ Add a permission”
Choose API source:
Select permission type:
Search and select permissions
Click “Add permissions”
See cli-commands.md for az cli commands to add API permissions programmatically.
# List all Graph permissions (warning: long output)
az ad sp list --filter "appId eq '00000003-0000-0000-c000-000000000000'" \
--query "[0].{delegated:oauth2PermissionScopes,application:appRoles}" -o jsonAlways required for:
Examples requiring admin consent:
User.Read.All (read all users)Directory.Read.All (read directory)Mail.Read (application permission)Sites.Read.All (read all SharePoint sites)Portal Method:
CLI Method:
az ad app permission admin-consent --id $APP_IDPortal: Look for green checkmarks in “Status” column
CLI:
az ad app permission list --id $APP_IDLook for consentType: "AllPrincipals" (admin consented)
If you’re building an API that other apps will call:
api://your-api-idaccess_as_userDelegated permissions: Intersection of user’s permissions and app’s permissions
Example:
User can: Read all users
App granted: User.Read.All
Effective: Read all users ✅
User can: Only read their own profile
App granted: User.Read.All
Effective: Only read own profile (limited by user’s rights)
Application permissions: Only app’s permissions matter (no user context)
Causes:
Solutions:
Causes:
Solutions:
Possible issues:
Debug steps:
scp claim (delegated) or roles claim (application)✅ Do:
❌ Don’t:
✅ Do:
❌ Don’t:
✅ Do:
❌ Don’t:
Delegated Permissions:
User.Read : e1fe6dd8-ba31-4d61-89e7-88639da4683d
User.ReadWrite : b4e74841-8e56-480b-be8b-910348b18b4c
User.ReadBasic.All : b340eb25-3456-403f-be2f-af7a0d370277
Mail.Read : 570282fd-fa5c-430d-a7fd-fc8dc98a9dca
Mail.ReadWrite : 024d486e-b451-40bb-833d-3e66d98c5c73
Mail.Send : e383f46e-2787-4529-855e-0e479a3ffac0
Calendars.Read : 465a38f9-76ea-45b9-9f34-9e8b0d4b0b42
Calendars.ReadWrite : 1ec239c2-d7c9-4623-a91a-a9775856bb36
Files.Read.All : df85f4d6-205c-4ac5-a5ea-6bf408dba283Application Permissions:
User.Read.All : df021288-bdef-4463-88db-98f22de89214
User.ReadWrite.All : 741f803b-c850-494e-b5df-cde7c675a1ca
Mail.Read : 810c84a8-4a9e-49e6-bf7d-12d183f40d01
Mail.Send : b633e1c5-b582-4048-a93e-9f11b44c7e96
Directory.Read.All : 7ab1d382-f21e-4acd-a863-ba3e13f7da61
Directory.ReadWrite.All : 19dbc75e-c2e2-444c-a770-ec69d8559fc7Note: Permission IDs may change. Always verify against the official Microsoft Graph Permissions Reference (opens in a new tab) for the most current values.
Nearby