First page of Microsoft's 100,000-partner directory, sorted by responsiveness Microsoft Solutions Partner — Security, Modern Work, Infrastructure, App Innovation Microsoft partner since 2006 1,100+ organizations under management
Home/Services/Microsoft 365 OAuth App Risk Review and Consent Cleanup
AssessmentSecurity and Protection

Microsoft 365 OAuth App Risk Review and Consent Cleanup

Every application that has ever been granted OAuth access to your Microsoft 365 tenant still has it. A consent one user clicked through two years ago survives the password reset, the multifactor rollout and even that user leaving — Microsoft's own remediation guidance says so plainly: resetting passwords and requiring multifactor authentication are not effective against an illicit consent grant, because the application is external to your organization and never needs the password. IT Partner clears the whole estate in one fixed-price week on a single tenant: we export every enterprise application, app registration, delegated and application permission grant — scope, consent type, the user who granted it — with publisher-verification status, owners, credentials and expiry dates and last sign-in activity; we sort it into a risk-tiered register (tenant-wide mail, files and directory permissions, offline_access refresh tokens, unverified publishers, abandoned apps, ageing secrets, apps consented by people who have left); we revoke and remove in agreed waves, nothing without a named owner's confirmation and every batch recorded with its restore path; we harden user-consent settings to Microsoft's recommended posture, configure the admin consent workflow with named reviewers, expiry and notifications, switch on app governance policies where Defender for Cloud Apps is licensed, and hand over a one-page approval procedure for the next app request. $1,950 per project, fixed, for one tenant with up to 300 non-Microsoft applications; larger estates are quoted per tenant. It does not need Microsoft 365 E5 — everything except the app governance layer is native to Microsoft Entra ID, and any licence the app governance layer needs is billed by Microsoft or your CSP, not by us.

Timeline 1 weekService owner Roman SotnikMicrosoft Entra IDMicrosoft 365Microsoft Defender for Cloud Apps

What this engagement is

An OAuth grant is a standing key, not a session. When a user accepts a consent prompt, Microsoft Entra ID writes a permission grant against a service principal in your tenant, and the application keeps coming back with a refresh token long after the browser is closed. That is why consent abuse has become the technique of choice against Microsoft 365, and why the usual reflexes miss it: Microsoft's guidance on illicit consent grants states that normal remediation steps such as resetting passwords or requiring multifactor authentication aren't effective, because these apps are external to the organization. Microsoft Threat Intelligence published a campaign analysis on 2 March 2026 in which attackers registered applications in tenants they controlled, pointed a redirect URI at a rogue domain and sent OAuth links carrying deliberately invalid scopes so that Entra ID's own error handling bounced the victim — largely government and public-sector staff — onto an attacker page that delivered malware. The first mitigation Microsoft lists in that write-up is exactly the scope of this engagement: limit user consent, review application permissions regularly, and remove unused or over-privileged apps. Separately, the FBI's Internet Crime Complaint Center published a public service announcement in May 2026 about a phishing-as-a-service kit that abuses the OAuth device code flow — the victim completes a genuine Microsoft sign-in, multifactor challenge included, and the criminal's application walks away with the tokens. The work starts with an export most tenants have never seen in one place. Every service principal that appears under Enterprise applications — gallery apps, an app somebody signed into once, apps that arrived with a Microsoft service, your own developers' app registrations, managed identities — and for each of them the delegated permission grants and their scopes, the consent type (a grant made for one person, or `AllPrincipals`, Microsoft's marker for a grant that covers everyone in the tenant), the user who granted it, the application permissions that run with no signed-in user at all, publisher-verification status, owners, client secrets and certificates with their expiry dates, and last sign-in activity from the service principal sign-in logs. We use Microsoft's own method for it — the permissions inventory script Microsoft references from its illicit-consent-grant playbook, plus Microsoft Graph queries — so every line of the register is something you can reproduce yourself after we leave. Two limits go into the report at the front rather than the footnotes: Microsoft Entra keeps sign-in and audit logs for seven days on a free licence and 30 days with Entra ID P1 or P2, so 'last used' beyond that window comes from Entra's own recommendations engine, which computes unused applications on a 90-day basis and unused credentials on a 30-day basis; and an audit record for a consent event can take from 30 minutes up to 24 hours to appear, so a very recent grant is caught by the export rather than by the log. The register then sorts the estate into tiers you can act on. The top tier is application permissions with tenant-wide reach — read or read-write across all mailboxes, all sites and files, or the directory itself — held by anything that is not a Microsoft first-party service, because those run without a user and are invisible to every control that depends on one. Next are tenant-wide delegated grants to non-Microsoft applications and any grant carrying offline_access, the permission that keeps an app coming back when nobody is using it. Then the hygiene tier: apps from publishers Microsoft has not verified, apps consented by a single user who has since left, apps with no owner in your organization, apps with no sign-in activity in 90 days, and credentials that are unused, ageing or already expired. Removal happens in waves, and this is the part that decides whether the week is a success or an outage: business-critical integrations are identified before the first wave, nothing is revoked without a named owner confirming, batches run with a hold between them so a dependency surfaces while we are still on the call, and each batch is recorded with the exact grant identifiers. Microsoft supports restoring a revoked permission through Graph or PowerShell — not through the portal — and the restore commands ship with the register. Cleaning up without changing the setting that allowed it just resets the clock, so the second half of the week is configuration. User consent moves to the posture you choose: Microsoft's recommended middle option allows users to consent only to applications from verified publishers and only to permissions you have classified as low impact (the basic sign-in set is openid, profile, email and — with eyes open, because it is what keeps an app alive in the background — offline_access), with admin-only consent as the stricter setting and a custom app consent policy where neither built-in option fits. We confirm risk-based step-up consent is on, and we enable the admin consent workflow so a blocked request becomes a review rather than a support ticket: named reviewers, email notification, expiry reminders and a request expiry you set. Where Defender for Cloud Apps is licensed we turn on app governance and build the hygiene policies with it; where it is not, the same questions are answered from Entra's application recommendations and our register, and we tell you which of the two you are getting before the quote. You keep the register, the decision log, the evidence of every setting change and a one-page procedure for the next application request. Deploying Defender for Cloud Apps and running app governance as an operation is Microsoft Defender for Cloud Apps Implementation; the recurring watch on new consents and expiring credentials is Managed Entra ID Identity Hygiene and Access Reviews; and if you already know an account was taken over, start with Business Email Compromise Investigation and Recovery — this is a hygiene project, not an incident response.

Success criteria

01A complete, dated register of OAuth access to the tenant exists — every non-Microsoft enterprise application and app registration, with its delegated permission grants and scopes, consent type and granting user, application permissions (app roles), publisher-verification status, owner, credentials and expiry dates, and last sign-in activity — in a form you can reproduce with the queries we hand over.
02Every high-risk finding has a written decision against it: keep with a named business owner and a justification, reduce to a smaller permission set, or revoke — with the decisions signed off by you before any change is made.
03Revocations and removals have been executed in the agreed waves, each batch recorded with its grant identifiers and its restore commands, and no business interruption remains open at handover.
04User consent settings are at the posture you approved, permission classifications match that decision, risk-based step-up consent is confirmed enabled, and each change is evidenced with before-and-after output.
05The admin consent workflow is enabled with named reviewers, notification and expiry-reminder settings and a request expiry period, and one test request has been raised, reviewed and closed end to end.
06Where Defender for Cloud Apps is licensed, app governance is switched on and the agreed unused-app, unused-credential and expiring-credential policies exist; where it is not licensed, Entra's application recommendations have been triaged and the equivalent manual review is written into the procedure.
07A named owner has accepted the one-page application approval procedure and the readout, both walked through with the people who will use them.

What you receive

OAuth access register — every non-Microsoft enterprise application and app registration in the tenant as a spreadsheet and a written report: delegated permission grants with scopes, consent type (single user or AllPrincipals) and the account that granted them, application permissions that run without a signed-in user, publisher-verification status, application owners, client secrets and certificates with expiry dates, and last sign-in activity from the service principal sign-in logs
Risk-tiered findings — tenant-wide mail, file, site and directory permissions held by non-Microsoft applications; tenant-wide delegated grants; grants carrying offline_access; unverified publishers; applications consented by users who have left; applications with no owner; applications with no sign-in in 90 days; unused, ageing and expired credentials — each with the reason it is where it is and the recommended action
Consent-event review from the Microsoft Purview audit log for the retained period — 'Consent to application' activities, whether the grant was made by an administrator on behalf of the organization, and anything that looks like a step-up or a risky-application block
Decision log — the keep, reduce or revoke decision for every flagged application, the named business owner behind each keep, and your written approval of the revocation waves before they run
Revocation waves executed — delegated grants and application role assignments removed, user and group assignments cleared, sign-in disabled or the service principal deleted where you decide it should go, with a per-batch record of what was removed and the Microsoft Graph or PowerShell commands to restore it
User consent settings configured to the agreed posture — administrators only, or Microsoft's recommended verified-publishers-and-low-impact-permissions option — together with the permission classifications behind it and, where the built-in options do not fit, a custom app consent policy built to your rules
Risk-based step-up consent verified as enabled, with the behaviour explained: it steps a risky user-consent request up to administrator approval, and it only changes anything while user consent is enabled at all
Admin consent workflow enabled and configured — named reviewers, notification emails, expiry reminders and the request expiry period — with a test request raised, reviewed and closed so your reviewers have used it once before a real one arrives
App governance enablement where Microsoft Defender for Cloud Apps is licensed — the app governance service switched on and hygiene policies created for unused applications, unused credentials and expiring credentials, with alerts routed into your Defender incident queue; where the tenant is not licensed for it, the same findings are delivered from Entra's application recommendations and the register instead
Entra application recommendations triage — remove unused applications, remove unused credentials from applications, renew expiring application and service principal credentials, verify app publisher, and do not allow users to grant consent to unreliable applications — recorded with what your tenant actually shows and who owns each one
Optional, where you already run Conditional Access: one report-only policy blocking the OAuth device code flow, built to Microsoft's guidance with your emergency access accounts excluded, handed over in report-only for you to enable after your own review
One-page application approval procedure and readout — how a user asks for an app, who reviews it, what the reviewer checks (publisher, permissions requested, delegated versus application, who else in your industry uses it), when it goes to a Global Administrator, and how it is recorded — delivered in a working session with the reviewers and the service desk

How the work unfolds

Day 1 — Access, export and first pass

We take the time-bound delegated access you approve, then export the full estate: service principals, app registrations, delegated permission grants with scopes and consent type, application role assignments, publisher-verification status, owners, credentials with expiry dates and service principal sign-in activity. You get the raw export the same day, along with the queries that produced it, and we tell you straight away how many non-Microsoft applications the tenant actually holds against the 300 the fixed fee covers.

Day 2 — Risk register and consent-event review

The export becomes the risk-tiered register, and we search the Microsoft Purview audit log for the retained period for 'Consent to application' events — who consented, to what, whether it was an administrator acting for the whole organization. Anything that looks like an active problem rather than old clutter is flagged to you that day, with the recommendation to move to incident response instead of continuing as a clean-up if the evidence points that way.

Day 3 — Decision workshop and owner confirmation

A working session with your IT lead and whoever owns the business relationships. We go through the register tier by tier and agree keep, reduce or revoke for each item, identify the named owner behind every application that stays, and set the wave plan for removals — what goes first, what needs a warning to its users, what waits for a change window. Decisions are written up the same day and approved by you before anything is touched.

Day 4 — Revocation waves and consent settings

Removals run in the agreed batches with a hold between them, each batch recorded with its identifiers and restore commands so a surprise dependency is a five-minute fix rather than a ticket. Then the settings: user consent moved to the approved posture, permission classifications set, a custom app consent policy where the built-ins do not fit, and risk-based step-up consent confirmed. Every change is captured before and after.

Day 5 — Workflow, app governance, procedure and readout

The admin consent workflow goes in with your named reviewers, notifications, reminders and expiry, and we run a test request through it end to end. Where Defender for Cloud Apps is licensed, app governance is switched on and the hygiene policies are built; where it is not, Entra's application recommendations are triaged into the same register. The readout covers what was found, what was removed, what remains and why, and the approval procedure is walked through with the reviewers. Our delegated access is removed and you confirm the removal.

Prerequisites

One Microsoft Entra tenant, and administrative access we can work under: a Global Administrator is required to turn on the admin consent workflow, a Privileged Role Administrator to change user consent settings and app consent policies, and Cloud Application Administrator or Application Administrator to review and revoke application permissions — all requested as granular, time-bound delegated access that you approve
Auditing already switched on if you want the consent-event history — Microsoft Purview audit records the 'Consent to application' activity, and how far back the search reaches depends on the licences assigned to your users; a tenant that has never had auditing enabled gets the register but no history
A named person who can say which applications the business actually depends on, and the contact details of the owners we will ask to confirm before anything is revoked
Agreement on the revocation waves and a change window for the first batch, plus a rollback contact who is reachable while the batches run
For the app governance layer: a Microsoft Defender for Cloud Apps licence — standalone or through the E5 bundles — and a billing address outside the regions where Microsoft does not currently offer app governance; unused-credential and expiring-credential management additionally requires Microsoft Entra Workload ID Premium. All of these are Microsoft's charges, billed by Microsoft or your CSP, and none of them are part of this fee
For the optional device code flow policy: Conditional Access already in use in the tenant (Microsoft Entra ID P1 or higher) and emergency access accounts we can exclude from it
Two to three hours of your IT lead's time for the decision workshop, availability from application owners for the confirmation step, and one named owner for the approval procedure after handover

Who does what

IT Partner

  • Produce the OAuth access register and the risk-tiered findings from the tenant's own data, with the queries you can rerun yourself
  • Run the decision workshop, record the keep, reduce or revoke decision for every flagged application, and get your written approval before any change
  • Execute the revocation waves in agreed batches, record each batch with its identifiers and restore commands, and stop the moment something unexpected breaks
  • Configure user consent settings, permission classifications, any custom app consent policy, the admin consent workflow and — where licensed — app governance policies, with before-and-after evidence for each
  • Deliver the readout and the one-page approval procedure, walk your reviewers and service desk through them, and remove our own access at the end

Your team

  • Approve the time-bound delegated access and make the Global Administrator available for the workflow step
  • Name the business owners, confirm which applications the business depends on, and approve the revocation waves before they run
  • Decide the consent posture — administrators only, or verified publishers with low-impact permissions — and accept the permission classification that goes with it
  • Buy or assign any Microsoft licence the app governance layer needs, and pay Microsoft or your CSP for it
  • Own the approval procedure after handover: keep the reviewer list current, and decide whether the recurring review is done in-house or handed to a managed service

What's not included

Deploying Microsoft Defender for Cloud Apps and running app governance as an ongoing operation — Cloud Discovery, session and access policies, Conditional Access App Control, threat-detection policy tuning — is Microsoft Defender for Cloud Apps Implementation; here we enable app governance and build the hygiene policies where you are already licensed for it, and nothing more
The recurring watch — new consents, new app registrations, credentials heading for expiry, quarterly access reviews and the monthly report — is Managed Entra ID Identity Hygiene and Access Reviews; Microsoft's own advice for larger tenants is to review consent grants weekly, and this project is a single pass, not that review
Investigating a confirmed compromise — mailbox rules, exfiltration scope, forensic timeline, notification — is Business Email Compromise Investigation and Recovery, with Security Managed Service - Incident Response as the retained option; building the detection, alert-handling and automated-containment side of the tenant so the next one is caught earlier is Defender XDR Incident Readiness and Automated Response. If the register turns up an active intrusion we stop and tell you the same day rather than continue as a clean-up
Rebuilding or re-permissioning line-of-business integrations whose grants are revoked — that is development work, quoted separately, and our Microsoft Graph API Integration Services is the usual route; in this engagement an integration is either kept with its owner named or revoked with your approval
Microsoft licences of every kind — Microsoft Defender for Cloud Apps, the E5 bundles that contain it, and Microsoft Entra Workload ID Premium for unused and expiring credential management — are billed by Microsoft or your CSP at Microsoft's price; we can transact them through our CSP and the licence cost is never folded into this fee
A Conditional Access baseline — device compliance, phishing-resistant authentication, session controls, workload identity policies — is Conditional Access Policy Implementation; the most this engagement delivers is one report-only policy blocking the device code flow, for you to review and enable yourself
Administrator role cleanup and just-in-time elevation — who is allowed to grant tenant-wide admin consent in the first place — is Microsoft Entra PIM and Privileged Access Hardening; this engagement records who granted what, it does not rework your role model
A full tenant configuration audit against a published baseline is Microsoft 365 Advanced Security Audit Using the SCuBA Framework, where consent settings are one control among many; this service goes deep on applications only
Non-Microsoft identity estates — OAuth grants in Google Workspace, connected apps in Salesforce, SaaS-to-SaaS tokens outside Entra ID — and any application that does not authenticate against your Microsoft Entra tenant
24/7 support and ongoing monitoring; escalation to Microsoft through our Premier Support agreement is available as a paid add-on where a case needs it

Limitations & technical notes

!Changing the consent settings does not touch what is already granted. Microsoft is explicit that updates to user consent settings affect future consent operations only — existing grants remain, and users keep the access already given. That is precisely why the clean-up and the settings change are one project rather than two.
!Revocation is a business risk before it is a technical one. Some applications only reveal what they were doing when they stop working, which is why we run waves with owner confirmation and holds. Restoring a revoked permission is possible through Microsoft Graph or PowerShell but not through the Entra admin center, and re-granting admin consent with the portal button restores the permission set the app's developer defined — which is not necessarily the set that was there before. Our per-batch restore commands exist so the rollback is exact rather than approximate.
!The portal only takes you so far: permissions granted by an administrator for the whole organization can be revoked in the Entra admin center, but grants consented by individual users have to be revoked through Microsoft Graph or PowerShell. That is Microsoft's documented behaviour, and it is why this work is done from scripts with an audit trail rather than by clicking through a portal.
!The fixed fee covers one Microsoft Entra tenant and up to 300 non-Microsoft applications counted at discovery — each service principal counted once, however many grants it holds. Microsoft's own first-party service principals are inventoried and used for context but are not counted against the 300. Above that, or across several tenants, the work is quoted per tenant, and we tell you the count on day one, before the number can become an argument.
!'Last used' is only as good as the tenant's data. Microsoft Entra retains sign-in and audit logs for seven days on a free licence and 30 days with Entra ID P1 or P2, so activity older than that comes from Entra's recommendations engine, which flags applications unused for over 90 days and credentials unused for over 30 days — and which exempts Microsoft-managed applications, application proxy, Entra Cloud Sync, managed identities and anything created in the last 90 days. Audit entries for a consent event can also take from 30 minutes up to 24 hours to appear.
!App governance is a Microsoft Defender for Cloud Apps capability, not an Entra one. It needs a valid Defender for Cloud Apps licence — standalone or through the E5 bundles — and Microsoft currently does not offer it to organizations whose billing address is in Singapore, Poland, Italy, Qatar, Israel, Spain, Mexico or Taiwan. Management of unused and expiring credentials inside app governance additionally requires a Microsoft Entra Workload ID Premium licence. Without those, the same hygiene questions are answered manually from Entra's recommendations and our register; you are told which of the two you are getting before the quote, not after.
!Naming somebody an admin consent reviewer gives them no new privilege. Reviewers can view, block or deny requests, but approving a request for Microsoft Graph application permissions still requires a Global Administrator, and a reviewer added later does not inherit requests raised before they were added. Enabling the workflow can take up to an hour to take effect.
!Risk-based step-up consent is enabled by default and only changes behaviour while user consent is enabled at all: it applies to newly registered multitenant applications that are not publisher-verified and that ask for more than basic sign-in permissions, and it sends those requests to an administrator instead. It is a useful backstop, not a substitute for the consent posture.
!Adjacent controls we recommend in the readout but do not roll out here: blocking or restricting the OAuth device code flow beyond the single report-only policy, restricting who may register applications in the tenant, Conditional Access for workload identities, and app registration credential policies. Each is named in the readout with the licence it needs so nothing arrives as a surprise later.
!Product names, portal paths and settings on this page were checked against Microsoft's documentation in September 2026 — user consent settings and the built-in app consent policies (June 2025), the admin consent workflow (December 2024), reviewing and revoking application permissions (March 2025), risk-based step-up consent (May 2025), detecting and remediating illicit consent grants (July 2026), app governance hygiene features and setup (July 2026), the Entra application recommendations (January 2026 and April 2025) and the device code flow Conditional Access guidance (March 2026). Where your tenant shows something different, the work follows your tenant.

Frequently asked questions

What does the Microsoft 365 OAuth App Risk Review and Consent Cleanup actually do?

In one week on one tenant it answers the question 'which applications can read our data, who let them in, and do we still want that?' — and then acts on the answer. We export every enterprise application, app registration and permission grant with its scopes, consent type, granting user, publisher status, owner, credentials and last use; build a risk-tiered register; agree keep, reduce or revoke for each item with you; run the removals in recorded waves with restore commands; harden the user consent settings so it cannot silently refill; configure the admin consent workflow with named reviewers; switch on app governance where you are licensed for it; and hand over a one-page approval procedure and a readout.

What is an illicit consent grant, and why doesn't multifactor authentication stop it?

An attacker registers an application, tricks a user into consenting to it — through a phishing message or a compromised page — and from then on the application reads that user's mail, files or contacts directly through Microsoft Graph. It never uses the password, so the account can have multifactor authentication, a strong password and a compliant device, and the access continues. Microsoft's own guidance says normal remediation such as resetting passwords or requiring multifactor authentication is not effective here, because the application is external to your organization. The only thing that removes the access is removing the grant — which is what this engagement does, at estate scale.

Do we need Microsoft 365 E5 or Defender for Cloud Apps for this?

No. The discovery, the register, the revocation, the user consent settings, the permission classifications, the custom app consent policy and the admin consent workflow are all native to Microsoft Entra ID and work on Business Premium, E3 or E5. Defender for Cloud Apps only matters for the app governance layer — the automated unused-app, unused-credential and expiring-credential policies. Where you are licensed for it, we turn it on and build those policies inside the same fixed fee; where you are not, the same findings come from Entra's own application recommendations and our register, and we say which of the two you are getting before you sign anything.

Will revoking consent break our line-of-business applications?

That is the risk the method is built around. Nothing is revoked without a named owner confirming it first; the register identifies business-critical integrations before the first wave; removals run in batches with a hold between them so a dependency surfaces while we are still on the call; and every batch is recorded with the exact grant identifiers and the Microsoft Graph or PowerShell commands that put it back. Microsoft supports restoring a revoked permission, so the honest expectation to set is not 'nothing will break' but 'if something breaks, it is back within minutes and we know exactly what it was'.

How do you decide what counts as risky?

By reach first, then by provenance, then by age. Application permissions held by non-Microsoft applications come first, because they run with no signed-in user — a grant to read all mailboxes or write to all sites does not care whose account is compromised. Then tenant-wide delegated grants, which Microsoft records with the consent type AllPrincipals, meaning everyone in the tenant is covered by one person's click. Then anything carrying offline_access, which is what keeps an application coming back when nobody is using it. Then publishers Microsoft has not verified, applications consented by users who have left, applications with no owner, applications with no sign-in in 90 days, and credentials that are unused, ageing or expired. Every line in the register says which rule put it there.

What settings do you change, and will our users notice?

The main one is user consent. Microsoft's default is that any user may consent to any permission that does not require administrator approval; the recommended middle setting allows consent only to applications from verified publishers and only to permissions you have classified as low impact; the strictest setting is administrators only. Users notice when they hit an application that no longer qualifies — which is exactly why the admin consent workflow goes in at the same time, so the user sends a request to a named reviewer instead of hitting a wall. We agree the posture with you in the workshop, and the basic sign-in permissions stay classified as low impact so ordinary sign-in flows are unaffected.

What is the admin consent workflow, and who should be a reviewer?

It is the Entra feature that turns 'this app needs admin approval' into a request routed to people you name, with email notification, reminders and an expiry you set. Reviewers should be the people who actually understand the business case — usually IT plus an application or data owner — but be clear on the limits: being a reviewer confers no privilege, so a reviewer can view, block or deny, while approving a request for Microsoft Graph application permissions still needs a Global Administrator. We configure it, put your reviewers in, and run one test request through it end to end so nobody meets the interface for the first time on a real request.

How many applications does the fixed fee cover?

One Microsoft Entra tenant with up to 300 non-Microsoft applications, counted at discovery, each service principal counted once however many grants it holds. Microsoft's own first-party service principals are inventoried for context but not counted against that number — a typical tenant has a lot of them, and charging for Microsoft's own apps would be nonsense. If the export comes back above 300, or if there are several tenants, we quote per tenant, and you hear the number on day one rather than in the invoice.

We think we have already been phished. Is this the right service?

Probably not first. If you have evidence of an account takeover — inbox rules you did not create, mail leaving the tenant, a sign-in from somewhere impossible — that is an incident, and Business Email Compromise Investigation and Recovery is the engagement that scopes and contains it. This service is the hygiene pass that removes the standing access an attacker would use, and the one you run afterwards so the same door is not open again. If the register turns up something that looks live while we are working, we stop and tell you the same day rather than quietly continuing as a clean-up.

Could we do this ourselves?

Yes, and we deliberately leave you able to. Microsoft publishes the method — the permissions inventory script referenced from its illicit-consent-grant playbook, the audit search for consent events, the revocation cmdlets — and everything in the register can be reproduced with the queries we hand over. What you are buying is a week of somebody who has done it before: the risk tiering that turns a 4,000-row CSV into about 40 decisions, the wave discipline that stops a clean-up becoming an outage, the settings posture agreed rather than guessed, and a written procedure at the end. Teams that try it in-house usually get the export and stall at the decisions.

Does this protect us against device code phishing?

It removes the standing app access that this class of attack leaves behind, and it makes the next grant harder to obtain — but blocking the flow itself is a Conditional Access change. Microsoft's guidance is to get as close as possible to a unilateral block on the device code flow, allowing it only for documented cases like legacy tooling, and to deploy that policy in report-only first with emergency access accounts excluded. Where you already run Conditional Access we build that policy and hand it to you in report-only for your own review; rolling out and operating a Conditional Access baseline is a separate engagement.

What access do you need, and how do we know it is gone afterwards?

Granular, time-bound delegated access that you approve — our published policy is GDAP rather than standing Global Administrator. Practically that means Cloud Application Administrator or Application Administrator for the review and revocation work, Privileged Role Administrator for the consent policy changes, and a Global Administrator of yours available for the steps Microsoft reserves to that role, such as turning on the admin consent workflow and running the tenant-wide permissions inventory. The last item in the handover is removing our access and showing you the audit log entry that proves it.

Who keeps this clean after you leave?

You do, with the procedure — and the honest warning that an estate refills. Microsoft's own advice for organizations with many registered applications and a large user base is to review consent grants weekly. If nobody on your team has time for that, Managed Entra ID Identity Hygiene and Access Reviews takes over the recurring watch on new consents, new registrations, expiring credentials and access reviews for a monthly per-user fee, and it starts exactly where this project ends. Where Defender for Cloud Apps is licensed, the app governance policies we build keep working on their own and raise alerts into your Defender incident queue.

How does pricing work?

$1,950 per project, fixed, quoted in writing before work begins, and you pay after you approve delivery. It covers one Microsoft Entra tenant with up to 300 non-Microsoft applications: the full export and register, the consent-event review, the decision workshop, the revocation waves with restore paths, the consent settings and permission classifications, any custom app consent policy, the admin consent workflow with a test request, app governance enablement and hygiene policies where you are licensed for it, the optional report-only device code flow policy where Conditional Access is already in use, the approval procedure and the readout. Larger estates and additional tenants are quoted per tenant. Microsoft's licences — Defender for Cloud Apps, the E5 bundles, Microsoft Entra Workload ID Premium — are billed by Microsoft or your CSP and are never part of this fee.

Didn’t find your question?

Ask it here. A real engineer answers by email within one business day — and if it’s a good one, it becomes part of this page so the next person finds it.

Answered by a person, one time, to your inbox. Nothing you type here is published without a human reviewing and anonymizing it first.

Often combined with

$1,950 per project
1 week
Get the fixed quote