App Access Policies vs Role Based Access Control for Apps
I want to compare two ways to authorize applications in Exchange Online: the legacy Application Access Policies and the modern Role-Based Access Control (RBAC) for applications. It explains the core concept, what’s supported, and how to set up and test:
- Application Access Policies (Restricted App)
- Role-Based Access Control for Applications (RBAC App)
Which design should I choose? (Concept)
Understanding the concept is key as it changed quite a bit. If you assign Entra ID app permissions and also use Exchange App RBAC at the same time, you may unintentionally allow too much.
| Type | Default App4 | Restricted App1 | RBAC App2 | Mixed App5 |
|---|---|---|---|---|
| Concept | Allow (consent) | Restrict allow | Allow specific | N/A |
| Entra API permissions | Yes (set it) | Yes (set it) | No3 | Yes (set it) |
| Exchange ServicePrincipal | No | (Yes) | Yes | Yes |
| AccessPolicy | No | Yes | No | Yes |
| ManagementScope | No | No | Optional | Optional |
| ManagementRoleAssignment | No | No | Yes | Yes |
| Graph Permission | All (.default) | All (.default) | Custom (Scopes) | Complicated |
What is supported (Limitations)
Watch which permission scopes/roles are actually supported. Assigning scopes that aren’t supported can lead to unintended access to data.
| Permissions | Restricted App1 | RBAC App2 | RBAC Name |
|---|---|---|---|
| Mail.Send | Yes | Yes | Application Mail.Send |
| SMTP.Send | No | No | N/A |
| SMTP.SendAsApp 4 | No | (Yes) | N/A |
| Calendars.Read | Yes | Yes | Application Calendars.Read |
| Calendars.Read.All | No | No | N/A |
| Mail.Read | Yes | Yes | Application Mail.Read |
| Mail.Read.All | No | No | N/A (Delegated) |
| Mail.Read.Shared | No | No | N/A (Delegated) |
| Mail.ReadBasic | Yes | Yes | Application Mail.ReadBasic |
| Mail.ReadBasic.All | Yes | No | N/A |
| Mail.ReadWrite, Mail.Send | No | Yes | Application Mail Full Access |
| * (Most Permissions) | No | Yes | Application Exchange Full Access |
| EWS.AccessAsApp | No | Yes | Application EWS.AccessAsApp |
| full_access_as_app | Limited | No | N/A (use EWS.AccessAsApp) |
| IMAP.AccessAsApp | No | No | N/A |
| More... | ... | ... |
- More Permissions: Office 365 Exchange Online – App Permissions
Application Access Policies (Legacy)
Application Access Policies restrict which mailboxes an application can access when the app otherwise has global permissions (Permission in Entra ID). You set a policy, scoped to a distribution group or specific identities, and Exchange verifies the policy during execution to allow or deny access.
Deprecation in progress
Avoid using Application Access Policies when a matching RBAC App permission exists (or as a temporary workaround only). Feature parity is not yet complete.
1 2 3 4 5 6 7 | |
Role-Based Access Control for Applications (Modern)
App RBAC grants explicit Exchange roles to an application’s service principal. Instead of granting wide Entra ID permissions, you assign narrowly scoped Exchange application roles (for example, Application Mail.Send) and optionally constrain them with scopes (groups, admin units, attributes).
Recommended, development ongoing
Use RBAC App if you understand the concept. Don’t forget to remove Entra ID app permissions afterwards.
1 2 3 4 | |
Available Permission
1 | |
Scoping options (filter)
Scopes defines the set of recipients the app role applies to. You can target a group, an administrative unit, or create custom recipient filters (such as by UPN, department, city). Choose the scope that matches your use case.
By group (classic)
ObjectID of the Group
1 2 3 4 | |
By group (alternative)
DistinguishedName of Group
1 2 | |
By attribute or name (simple)
UPN, RecipientType, Department or City
1 2 3 4 5 6 7 8 9 10 11 | |
By admin unit (new)
ObjectID of the AdministrativeUnit
Licensing
Administrative units are only available with Microsoft Entra ID P1 or P2
1 2 3 4 5 | |
By GUID (static)
ObjectID of Mailbox
1 2 | |
Testing
Validate both the assignments and the effective access. First, list role assignments for the app to confirm roles and scopes. Then use Test-ServicePrincipalAuthorization against specific resources (mailboxes) to verify that the app can or cannot access them as expected.
Propagation delay
RBAC App2: It may take an hour or more for the permission to become active. Restricted App1: It may take an hour or more for the restriction to become active.
1 2 3 | |
Summary
There are two different Concepts: Restrict Allowed and Allow specific, as seen here:
- Application Access Policies: restrict allowed targets for a broadly permitted app.
- App RBAC: allow specific actions on specific resources via Exchange roles.
Prefer App RBAC where possible. If you must mix, be very explicit and verify the effective access.
Wishing you a great day from ESPC in Dublin.
Reference:
- Role-Based Access Control for Applications in Exchange Online
- Application Access Policies (legacy)
- SMTP onboarding to App RBAC (Archive)
- Microsoft Exchange Online | SMTP onboarding to App RBAC