One bad Microsoft 365 OAuth consent grant can outlive a password reset. When a user approves the wrong app, the attacker may get valid tokens to mail, files, Teams data, or SharePoint content, even if MFA is on.
That risk is why consent review now belongs in every Microsoft Entra ID security routine. A clean audit helps you find old grants, overbroad permissions, and third-party apps that no one still owns. Start with the risk picture, then move into the actual checks that matter.
Key Takeaways
- OAuth consent is a persistent risk: Unlike passwords, OAuth grants provide long-term access via refresh tokens, meaning MFA does not stop an attacker if a malicious app has already been approved.
- Prioritize audit focus: Move beyond generic reviews by focusing on high-risk categories, including applications with tenant-wide admin consent, application-level permissions, and unverified third-party publishers.
- Establish a lifecycle for grants: Treat OAuth consent as a standing access problem by documenting business ownership for every app and enforcing regular review cycles to prune dormant or unnecessary permissions.
- Harden default policies: Reduce future exposure by restricting end-user consent settings and implementing a formal admin-led approval workflow for new application integrations.
Why OAuth consent needs a tighter audit in 2026
The abuse of OAuth applications keeps growing because it appears normal at first glance. The sign-in page is real, the consent prompt is legitimate, and the tokens are authorized after approval. Password resets do not always cut off access if the app holds refresh tokens through scopes such as offline_access.
That changes how you should rank app risk. A suspicious mailbox sign-in within Microsoft Entra ID used to point toward stolen credentials. Now, it can point to an app that a user or admin approved weeks earlier. Microsoft treats this as an incident scenario, and its app consent grant investigation guide is worth keeping in your runbook.
Several patterns deserve extra attention in 2026:
- Consent phishing against users who trust familiar brands or common productivity names.
- Multi-tenant third-party apps that request broad Microsoft Graph scopes.
- Old consents from pilot projects, vendor trials, or former MSP tooling.
- Service principals with no current owner, but still holding access.
- Apps that no one uses, yet still have the right to read data.
The biggest shift is operational. OAuth consent is no longer a one-time approval problem. It is a standing access problem. If your team reviews only admin role assignments and user sign-ins, you are missing a path that attackers now prefer because it sidesteps the usual password controls.
MFA does not protect you after malicious applications are granted consent. You have to revoke the consent and cut off the token path.
Know the permission and consent types before you rate risk
Many audits go sideways because teams mix up permission type with consent type, leading to a poor understanding of underlying permission classifications. These concepts are foundational to the Microsoft Graph API and the OpenID Connect protocol, which manage how applications interact with your environment. Understanding these distinctions is critical because the difference directly shapes your security response.
This quick table keeps the terms straight for your Microsoft Entra ID audit:
| Item | What it means in Entra ID | Why it changes risk |
|---|---|---|
| Delegated permissions | The app acts on behalf of a signed-in user | Risk follows the user’s access. Broad scopes can still expose large data sets. |
| Application permissions | The app acts as itself, without a signed-in user | Risk is often higher because access can be unattended and tenant-wide. |
| User consent | One user approved the app for allowed scopes | Blast radius may be smaller, but shared data, executive mailboxes, and synced files still matter. |
| Admin consent | An admin approved access on behalf of the organization | One decision can grant broad access across Microsoft 365. This needs the closest review. |
A delegated permissions model, such as using Mail.Read, can look modest, yet it may still expose sensitive mail if the user is an executive, a finance lead, or a shared mailbox owner. By contrast, an application permission like Mail.Read or Files.Read.All removes the user from the loop and lets the app run on its own. That raises the stakes because no person has to be present after the initial approval.
Consent type changes response time. A risky user consent usually starts with the affected user, the app, and recent activity. A risky admin consent is wider by default, so you treat it as tenant exposure until proven otherwise.
You also need to separate first-party Microsoft apps from third-party apps and custom internal apps. Those categories affect trust, ownership, contract review, and how much control you have over future scope changes. Multi-tenant third-party apps deserve extra checks because their home tenant, publisher controls, and lifecycle sit outside your organization. When evaluating these external applications, verifying their implementation of OpenID Connect remains a vital step in ensuring your authentication flow stays secure.
Establish your audit workflow in Entra ID
A successful audit starts with one fundamental rule: review the enterprise application rather than focusing solely on the app registration. Because the Microsoft identity platform serves as the foundation for your environment, you must understand that the enterprise application functions as the Service Principal, which is the specific technical identity where the live consent and access relationship is recorded in your tenant.

Begin in Microsoft Entra ID by navigating to Enterprise applications, then pull supporting details from app registrations, sign-in logs, audit logs, and any CMDB or SaaS inventory you maintain. If you manage multiple tenants, normalize the export fields early so you can compare data sets consistently.
A practical workflow looks like this:
- Export every enterprise application with granted permissions or app role assignments.
- Match each app to a business owner, technical owner, vendor name, and support contact.
- Record permission type, consent type, scopes, grant date, and whether the app is single-tenant or multi-tenant.
- Check sign-in activity, last use, and any recent changes to credentials, certificates, or permissions.
- Mark each app as keep, reduce scope, disable pending review, remove, or flag for assignment required status.
- Write down the decision, the reviewer, and the next review date.
That process sounds simple, but it closes most gaps. Teams often know an app exists, yet they cannot say who requested it, why it needs broad permissions like Files.Read.All, or whether anyone still uses it. When those questions have no answer, the audit has already identified a control failure.
For broader identity hygiene around Entra ID, Microsoft’s identity security checklist is a useful companion. It helps place consent review beside stronger admin controls, sign-in protection, and policy baselines.
The practical checklist for Microsoft 365 OAuth consent reviews
Inventory every app that holds a live grant
Start by building a real inventory, not a vendor list copied from procurement. Many risky apps never made it into a purchase system because a user or admin approved them directly in Entra ID. To gain full visibility, leverage Microsoft Defender for Cloud Apps to discover shadow apps that might be operating outside of official oversight.
Classify each enterprise application into four groups: Microsoft first-party, approved third-party SaaS, custom internal app, and unknown. That last group gets attention first. Also flag apps with duplicate names, odd spelling, or naming that does not map to a known business tool.
Next, compare the app list with your active user base and line-of-business systems. If no team claims the app, treat it as unowned. If the app belongs to a former vendor, mark it as legacy. If it was part of a past migration or proof of concept, record that. Old pilots are common sources of stale OAuth grants.
Don’t stop at visible apps with user interaction. Background services, reporting tools, backup platforms, and mail connectors often use application permissions. Those are easy to miss because users never click them day to day.
Review scope breadth against the app’s real job
After inventory, look at what each app can do. Scope names tell you more than the marketing page ever will.
Pay close attention to broad Microsoft Graph permissions such as Mail.ReadWrite, Files.Read.All, Sites.FullControl.All, User.Read.All, Group.ReadWrite.All, Directory.Read.All, and Directory.ReadWrite.All. When evaluating these, remember that Microsoft Graph application permissions with .All or directory write access need a clear business case and a named owner every time.
Also examine offline_access. On its own, it isn’t a data scope. Still, paired with mail, file, or directory access, it gives the app a path to refresh tokens and keep working after the user walks away. That matters in both attack response and routine risk scoring.
Your review question is simple: does the scope set match the product’s actual feature set? A signature tool does not need broad file access across the tenant. A reporting add-on rarely needs write access to groups or mail. If the permission list is larger than the stated business task, ask the vendor for narrower scopes or a better integration model.
Validate publisher trust, tenant model, and business purpose
A verified publisher does not make an app safe, but an unverified publisher raises the review bar. When the app is third-party and multi-tenant, confirm the vendor’s legal name, support domain, contract owner, and why the app needs access in your tenant.
Then look at where the app lives. A single-tenant internal app is fully your responsibility. A multi-tenant app depends on controls in another tenant, plus the vendor’s release and secret-handling practices. That does not make multi-tenant apps bad; it means your approval record should show why the risk is acceptable.
Legacy consents need their own pass. A grant from years ago may predate current policies, publisher checks, or your present security team. If the original approver is gone, the old approval does not carry much trust. Re-certify it or remove it.
This is also a good place to tie consent review into your wider Microsoft 365 governance. Broader Microsoft 365 security best practices often surface the same pattern: unused objects stay active because no one owns the clean-up.
Check activity, ownership, and app lifespan
An app with no sign-in or token activity for 90 to 180 days is usually a candidate for disablement. The exact threshold depends on your business cycle, but never reviewed is not a threshold.
Use sign-in logs and service principal activity to separate dormant from active apps. If an app has not been used, disable it first if you need a safe test period. Watch for breakage, then remove the grant and delete the service principal if nothing depends on it.
Ownership records matter as much as usage. Each live app should have a business owner, a technical owner, the reason for access, approved scopes, the review date, and an exit plan. That last field gets ignored, yet it prevents the common mess where a vendor leaves and the permission stays.
When the app is active but the owner is unknown, don’t accept someone in IT uses it. Find the person accountable for the data risk. If no one will take ownership, the app should not keep access.
High-risk findings and the right first response
Some audit results need a routine ticket, while others involve admin-restricted permissions that demand immediate remediation. The table below helps you separate standard cleanup work from real security exposure.
| Finding | Why it matters | First move |
|---|---|---|
| Unverified publisher with broad mail or file scopes | Common consent phishing pattern | Disable the app, contact the user or owner, and revoke the grant if purpose is unclear |
| Application permission with tenant-wide consent or directory write access | Unattended access across Microsoft 365 | Freeze access, confirm business need, and review recent activity before re-enabling |
| Dormant app with active consent | Attack surface with no current value | Disable, monitor for impact, then remove the grant and service principal |
| Multi-tenant app with no owner or contract | No clear accountability for external access | Quarantine pending recertification, then remove if no sponsor appears |
| Legacy consent older than your current policy model | Approval may no longer meet today’s standards | Re-certify scopes and ownership or revoke |
offline_access tied to mail or file scopes | Persistent token refresh after password changes | Revoke consent, cut sessions, and check for data access signs |
When a finding looks malicious, response order matters. First, disable the OAuth applications or block sign-in where possible. Next, revoke user or admin consent. Then revoke user refresh sessions and investigate related activity, including mailbox rules, forwarding changes, unusual file access, and external sharing.
For custom OAuth applications, also review secrets and certificates. If a compromised internal app still has valid credentials, removing the grant alone may not close every path.
Policy hardening that reduces future consent risk
Audit work is expensive if you keep approving the same mistakes. Hardening policy cuts down the next review cycle and improves your overall security posture.
The strongest move is to update your user consent settings to limit end-user autonomy. In many tenants, the cleanest approach is to require admin approval only. If the business requires self-service, update your user consent settings to restrict access to verified publishers and low impact permissions. Pair this with a formal admin consent workflow so requests land in a centralized queue instead of relying on informal chat messages or hallway approvals.
After that, tighten these technical controls:
- Restrict who can register new applications if app sprawl is a problem.
- Review permission grant policies to ensure they align with least privilege, and remove broad permission grant policies you no longer want.
- Require clear business ownership before a Global Administrator grants admin consent.
- Block device code flow if your environment does not require it, because recent abuse campaigns have used it in consent-related attacks.
- Review multi-tenant access as its own authorization policy, rather than as a side note to procurement.
- Prefer certificate-based credentials over long-lived client secrets for custom apps.
Policy also needs a people layer. Train users that an OAuth consent prompt can be a phishing event. Many staff know not to type a password into a fake page, but fewer know that clicking “Accept” on a real Microsoft prompt can hand over the same data.
Most teams also benefit from treating app consent as part of incident response, not only governance. When a user reports a suspicious app, the ticket should move to identity or security operations, rather than sitting in a generic help desk queue.
Set a review cadence and keep evidence that survives an audit
One annual review is too slow for Microsoft 365. App ecosystems change every month, and consent drift is real.
A workable cadence looks like this:
- Run a monthly delta review for newly added apps, new admin consents, and scope changes.
- Run a quarterly full review of all enterprise apps with live grants.
- Run an annual recertification for every app with application permissions, tenant-wide admin consent, or a specific authorization policy.
- Trigger an off-cycle review after mergers, vendor exits, security incidents, or major platform migrations.
Keep the output simple and durable. For each app, record the app name, app ID, publisher, tenant model, permission set, consent type, grant date, last activity date, business owner, technical owner, review decision, and next review date.
This record provides security, compliance, and MSP teams with a shared source of truth that improves overall app governance. It also strengthens your access control posture and helps during incident response, because you can answer the basic questions fast: who approved this, what can it touch, and who owns the fix.
If your tenant hasn’t had a serious consent audit in the last quarter, start with three slices first: all admin-consented apps, all apps with application permissions, and all apps with no activity in the last 90 days. Using Microsoft Entra ID to isolate these three groups usually exposes the highest-risk gaps with the least effort.
Frequently Asked Questions
Why does revoking a user’s password not always remove an attacker’s access?
Many OAuth applications request the offline_access scope, which allows them to obtain refresh tokens. These tokens enable the application to maintain access to a user’s data even after the user changes their password or resets their MFA settings.
What is the primary difference between delegated and application permissions?
Delegated permissions allow an app to act on behalf of a logged-in user, meaning the app’s access is limited by what that user can see. Application permissions allow an app to act as itself without a user present, typically resulting in broader, tenant-wide access that is often more dangerous.
How often should I perform an OAuth consent audit?
While quarterly full reviews are a good standard for most organizations, you should perform a monthly delta review to monitor for new admin consents or sudden scope changes. Additionally, always conduct an off-cycle review following major organizational changes like mergers, vendor exits, or security incidents.
How can I identify “shadow” OAuth apps in my tenant?
Start by using Microsoft Entra ID to export all enterprise applications with active grants, and then cross-reference this list against your procurement records and active user activity. Tools like Microsoft Defender for Cloud Apps can also help discover applications that have been granted consent without formal IT oversight.
The grant should never outlive its purpose
A strong audit of your environment is less about counting apps and more about proving each grant still has a valid reason to exist. Within the Microsoft identity platform, this means matching scope to function, verifying current ownership, and removing access that no longer passes both tests.
The fastest wins usually come from identifying dormant applications, clearing out old admin consents, and scrutinizing third-party tools that hold broad Graph access. During these periodic reviews, it is especially critical to keep a close watch on the client credentials flow, as these service-to-service permissions often persist long after a project has ended. Once these areas are under control, policy hardening keeps the list from growing back.
That brings the opening risk full circle. A bad Microsoft 365 OAuth consent can outlive a standard password reset, but a disciplined review cycle cuts that risk down to something you can monitor, explain, and revoke.

