Entra IDTroubleshooting

"Need admin approval": AADSTS65001 and AADSTS90094 consent errors in Microsoft Entra ID

Why users see Need admin approval or AADSTS90094 and apps get AADSTS65001, and how to grant admin consent safely, set up the admin consent workflow and tune user consent.

A user opens a new app, a browser add-in or a script and gets a "Need admin approval" page instead of the app. Behind it is Microsoft Entra ID's consent framework: the app asked for permissions the user isn't allowed to grant. In this post I'll explain the consent errors you'll meet, how to decide whether the app deserves consent, and how to grant it or route it to reviewers.

Errors this guide fixes

  • Need admin approvalConsent prompt
  • AADSTS90094: ... needs permission to access resources in your organization that only an admin can grant.Consent prompt
  • AADSTS65001: The user or administrator has not consented to use the application with ID '...' named '...'.App error / Microsoft Entra sign-in log
  • AADSTS65004 UserDeclinedConsentMicrosoft Entra sign-in log
How this guide is organized: Symptoms → Why it happens → How to fix it → Verify the fix → Prevent it next timeFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (5 steps: Identify the app and what it asks for; Grant tenant-wide admin consent; Turn on the admin consent workflow; Tune user consent; Fix 65001 in scripts and services). 4. Verify the fix. 5. Prevent it next time. Toolbox: AADSTS65001, AADSTS90094, AADSTS90093, Security › Permissions, User.Read.All.1Symptoms2Why it happens3How to fix it4Verify the fix5Prevent it nexttime1Identify the app andwhat it asks for2Grant tenant-wideadmin consent3Turn on the adminconsent workflow4Tune user consent5Fix 65001 in scriptsand servicesTOOLBOXAADSTS65001AADSTS90094AADSTS90093Security › PermissionsUser.Read.AllHow this guide is organized: Symptoms → Why it happens → How to fix it → Verify the fix → Prevent it next timeFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (5 steps: Identify the app and what it asks for; Grant tenant-wide admin consent; Turn on the admin consent workflow; Tune user consent; Fix 65001 in scripts and services). 4. Verify the fix. 5. Prevent it next time. Toolbox: AADSTS65001, AADSTS90094, AADSTS90093, Security › Permissions, User.Read.All.1Symptoms2Why it happens3How to fix it1Identify the app and what it asks for2Grant tenant-wide admin consent3Turn on the admin consent workflow4Tune user consent5Fix 65001 in scripts and services4Verify the fix5Prevent it next timeTOOLBOXAADSTS65001AADSTS90094AADSTS90093Security › PermissionsUser.Read.All
At a glance: how this guide is organized · 5 fix steps · 5 key tools

Symptoms#

In a browser, the consent page shows the heading Need admin approval, the app's name (marked unverified when the publisher isn't verified) and a message like this:

Text
AADSTS90094: ... needs permission to access resources in your organization that only an admin can grant. Please ask an admin to grant permission to this app before you can use it.

Apps and scripts that request tokens without showing a prompt get this instead:

Text
AADSTS65001: The user or administrator has not consented to use the application with ID '...' named '...'. Send an interactive authorization request for this user and resource.
CodeWhat it tells you
AADSTS90094The request needs admin consent: the permissions, the app's risk or your user consent settings rule out user consent.
AADSTS90093The app is requesting permissions the signed-in user isn't authorized to grant.
AADSTS65001No consent exists for this app, user and permissions, and the flow couldn't show a prompt.
AADSTS65004AADSTS65004 UserDeclinedConsent: the user canceled the consent prompt.

Why it happens#

Should this app get admin consent, and who can grant itWhich code does the user or the app get? if 65001: Grant admin consent or sign in once (The flow couldn't show a prompt; one interactive sign-in can consent.); if 90094 or 90093: Do you recognize the app, and do its permissions fit its purpose? if No: Stop and investigate (Admin consent is a decision, not a formality.); if Yes: Does it ask for Microsoft Graph application permissions? if Yes: Privileged Role Administrator grants it (Application administrators can't consent to Graph app roles.); if No: Grant tenant-wide admin consent (Read the permission list first; consent applies to every user.)Which code does the user orthe app get?FIXGrant admin consent orsign in onceThe flow couldn't show aprompt; one interactivesign-in can consent.65001Do you recognize the app, anddo its permissions fit itspurpose?STOPStop and investigateAdmin consent is a decision,not a formality.NoDoes it ask for Microsoft Graphapplication permissions?FIXPrivileged RoleAdministrator grants itApplication administratorscan't consent to Graph approles.YesFIXGrant tenant-wideadmin consentRead the permission listfirst; consent applies toevery user.NoYes90094 or 90093Should this app get admin consent, and who can grant itWhich code does the user or the app get? if 65001: Grant admin consent or sign in once (The flow couldn't show a prompt; one interactive sign-in can consent.); if 90094 or 90093: Do you recognize the app, and do its permissions fit its purpose? if No: Stop and investigate (Admin consent is a decision, not a formality.); if Yes: Does it ask for Microsoft Graph application permissions? if Yes: Privileged Role Administrator grants it (Application administrators can't consent to Graph app roles.); if No: Grant tenant-wide admin consent (Read the permission list first; consent applies to every user.)Which code does the user or the app get?65001FIXGrant admin consent or sign in onceThe flow couldn't show a prompt; one interactivesign-in can consent.90094 or 90093Do you recognize the app, and do itspermissions fit its purpose?NoSTOPStop and investigateAdmin consent is a decision, not a formality.YesDoes it ask for Microsoft Graphapplication permissions?YesFIXPrivileged Role Administrator grantsitApplication administrators can't consent toGraph app roles.NoFIXGrant tenant-wide admin consentRead the permission list first; consentapplies to every user.
Figure 1 · Decision tree Should this app get admin consent, and who can grant it. Use the code to tell a flow that couldn't prompt from an admin-only request, then decide whether the app deserves consent before anyone grants it.
  • The permission always needs an admin. Application permissions and high-privilege delegated permissions, such as User.Read.All, can't be granted by ordinary users.
  • User consent is off or restricted. If users may only consent to apps from verified publishers for permissions you classified as low impact, everything else becomes an admin request.
  • Assignment is required. Apps that require user assignment need admin consent, even when your user consent policy would otherwise allow the user to consent.
  • Risk-based step-up consent. When Microsoft considers a user consent request risky, for example a newly registered multitenant app without publisher verification asking for non-basic permissions, it's stepped up to admin consent.
  • A flow that can't prompt (65001). A silent token request, the username-and-password flow or an API calling another API on the user's behalf can't display consent, so it fails instead.

How to fix it#

1. Identify the app and what it asks for#

Get the client ID from the error, the sign-in log entry (Entra ID › Monitoring & health › Sign-in logs) or the browser address bar: the client_id and scope parameters show exactly which app and permissions were requested. Then open the app under Entra ID › Enterprise apps and review its publisher, owner and permissions. Admin consent is a decision, not a formality: if you don't recognize the app or its permissions look excessive for its purpose, stop and investigate.

For an app you trust, open Entra ID › Enterprise apps › app › Security › Permissions and select Grant admin consent for your tenant. For apps registered in your own tenant, the same button is under App registrations › app › API permissions. If the app isn't in the tenant yet, use the admin consent URL:

Text
https://login.microsoftonline.com/contoso.onmicrosoft.com/adminconsent?client_id=11111111-2222-3333-4444-555555555555

Privileged Role Administrator can consent to any permission. Cloud Application Administrator and Application Administrator can consent to anything except Microsoft Graph application permissions (app roles).

Watch out: tenant-wide consent applies to every user. Granting it again from the portal can also replace permissions previously granted tenant-wide for that app with the ones it requests now, so read the list before you confirm.

Instead of a dead end, users can ask for approval. Go to Entra ID › Enterprise apps › Consent and permissions › Admin consent settings, set Users can request admin consent to apps they are unable to consent to to Yes, choose the reviewers (users, groups or roles that can actually grant consent), and decide on email notifications, reminders and the request expiry. Users then see a justification box and a request button on the consent page, and reviewers act on requests under Entra ID › Enterprise apps › Admin consent requests.

Under Entra ID › Enterprise apps › Consent and permissions › User consent settings, Microsoft recommends Allow user consent for apps from verified publishers, for selected permissions. Pair it with Permission classifications on the same page and mark only basic sign-in permissions such as openid, profile, email, offline_access and User.Read as low impact. Changes affect future consent only; existing grants stay in place.

PowerShell
Connect-MgGraph -Scopes "Policy.Read.All"
# No ManagePermissionGrantsForSelf.* entry means user consent is disabled
(Get-MgPolicyAuthorizationPolicy).DefaultUserRolePermissions.PermissionGrantPoliciesAssigned

5. Fix 65001 in scripts and services#

Either grant admin consent for the delegated permissions (step 2), or have the account sign in interactively once so it can consent. If the app has no service principal in your tenant at all, you'll see a different error; see App sign-in errors: AADSTS7000215, AADSTS700016, AADSTS50011.

Verify the fix#

Have the user sign in again: there should be no consent page, and the sign-in log should show Success for the app. Then confirm the grants exist:

PowerShell
Connect-MgGraph -Scopes "Application.Read.All","Directory.Read.All"
$sp = Get-MgServicePrincipal -Filter "appId eq '11111111-2222-3333-4444-555555555555'"
# Delegated grants: ConsentType AllPrincipals = tenant-wide admin consent
Get-MgOauth2PermissionGrant -Filter "clientId eq '$($sp.Id)'" |
    Select-Object ConsentType, PrincipalId, Scope
# Application permissions (app roles) granted to the app
Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $sp.Id |
    Select-Object ResourceDisplayName, AppRoleId

A good result for a tenant-wide grant shows an AllPrincipals entry whose Scope lists exactly the permissions you approved. The audit log also records a Consent to application event.

Prevent it next time#

References#

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

M365 Subject Matter Expert, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)