Skip to content
Free lab

OAuth Consent Lab

The modern phish never asks for your password. It asks you to click Accept on a third-party app’s consent screen — and the app walks away with an OAuth refresh token that survives a password reset and MFA. Work a queue of real-shaped consent requests and call each one: allow it, or name why it must be blocked — an app that is over-scoped for its job, a silent offline_accesspersistence grab, a redirect to a look-alike or localhost host, an unverified publisher reaching for your mailbox, a brand impostor, or a tenant-wide admin scope. And beware the traps: a verified backup tool genuinely needs the whole mailbox. You are scored on catch rate against over-blocking — denying a legitimate app is its own failure.

The real job. More noise, a tighter clock.

0sPro

Consent queue

Each app is asking to connect to a work account. Call each one: Allow, or name the reason to block.

#1 · Microsoft 365

Calendly

✓ verified
publisherCalendly LLC
consentsingle-user consent
redirecthttps://auth.calendly.com/oauth/callback
app ageregistered 2800d ago
install base10M+ users
offline tokenoffline_access — standing refresh token

requested permissions

Calendars.ReadWriteoffline_accessopenidprofileemailUser.Read

claims to: Scheduling assistant — reads and writes your calendar to book meetings.

Verdict

#2 · Microsoft 365

FreePDF Merger

✓ verified
publisherFreePDF Tools
consentsingle-user consent
redirecthttps://app.freepdf-merger.com/callback
app ageregistered 410d ago
install base50k users
offline tokennone

requested permissions

Mail.ReadWriteMail.SendFiles.ReadWrite.AllopenidprofileemailUser.Read

claims to: Merge and split PDF files you upload.

Verdict

#3 · Google Workspace

QuickNote

✓ verified
publisherQuickNote Labs
consentsingle-user consent
redirecthttp://localhost:8080/oauth2/callback
app ageregistered 300d ago
install base20k users
offline tokennone

requested permissions

drive.fileuserinfo.emailuserinfo.profile

claims to: Save notes to your Drive.

Verdict

#4 · Microsoft 365

MailArchive Sync

unverified
publisherArchive Cloud
consentsingle-user consent
redirecthttps://archivecloud.io/connect
app ageregistered 9d ago
install basefewer than 50 users
offline tokenoffline_access — standing refresh token

requested permissions

Mail.Readoffline_accessopenidprofileemail

claims to: Back up a copy of your inbox.

Verdict

#5 · Microsoft 365

Slack

✓ verified
publisherSlack Technologies
consentsingle-user consent
redirecthttps://slack.com/oauth/callback
app ageregistered 3600d ago
install base30M+ users
offline tokennone

requested permissions

openidprofileemailUser.Read

claims to: Sign in with your work account.

Verdict

#6 · Microsoft 365

Contact Enricher

unverified
publisherLeadBoost
consentsingle-user consent
redirecthttps://leadboost.app/oauth/return
app ageregistered 140d ago
install base2k users
offline tokennone

requested permissions

Mail.ReadContacts.Readopenidprofileemail

claims to: Enrich your contacts with company data.

Verdict

#7 · Microsoft 365

Microsoft 365 Security Scanner

unverified
publisherMS Secure Team
consentsingle-user consent
redirecthttps://ms-secure-team.net/auth
app ageregistered 6d ago
install basefewer than 100 users
offline tokenoffline_access — standing refresh token

requested permissions

Mail.Readoffline_accessopenidprofileemail

claims to: Scan your mailbox for threats (official security add-on).

Verdict

#8 · Microsoft 365

Veeam Backup for Microsoft 365

✓ verified
publisherVeeam Software Group GmbH
consenttenant admin consent
redirecthttps://login.microsoftonline.com/common/oauth2/nativeclient
app ageregistered 2600d ago
install baseenterprise standard
offline tokenoffline_access — standing refresh token

requested permissions

full_access_as_appSites.ReadWrite.Alloffline_access

claims to: Tenant-wide backup of Exchange, SharePoint and OneDrive (admin-installed).

Verdict

#9 · Microsoft 365

TeamPulse Analytics

✓ verified
publisherTeamPulse Inc
consenttenant admin consent
redirecthttps://teampulse.io/auth/callback
app ageregistered 500d ago
install base5k users
offline tokennone

requested permissions

Directory.Read.AllUser.Read.Allopenidprofileemail

claims to: Show an org chart and team engagement dashboard.

Verdict

#10 · Microsoft 365

Docusign

✓ verified
publisherDocuSign Inc
consentsingle-user consent
redirecthttps://account.docu-sign-secure.com/oauth/callback
app ageregistered 120d ago
install baseunknown
offline tokenoffline_access — standing refresh token

requested permissions

Files.Readoffline_accessopenidprofileemail

claims to: Send documents for e-signature.

Verdict

#11 · Google Workspace

MailMerge Pro

unverified
publisherMailMerge Pro
consentsingle-user consent
redirecthttps://app.mailmergepro.com/oauth2
app ageregistered 220d ago
install base8k users
offline tokennone

requested permissions

https://mail.google.com/contactsuserinfo.email

claims to: Send mail-merge campaigns from your Gmail.

Verdict

#12 · Microsoft 365

Expense Snap

✓ verified
publisherExpense Snap Ltd
consentsingle-user consent
redirecthttps://expensesnap.com/connect
app ageregistered 900d ago
install base400k users
offline tokennone

requested permissions

Files.ReadWrite.AppFolderopenidprofileemailUser.Read

claims to: Save scanned receipts to its own app folder.

Verdict

#13 · Microsoft 365

InboxZero Assistant

unverified
publisherInboxZero
consentsingle-user consent
redirecthttps://inboxzero-ai.com/auth
app ageregistered 30d ago
install base1k users
offline tokenoffline_access — standing refresh token

requested permissions

Mail.ReadWriteMail.SendMailboxSettings.ReadWriteoffline_accessopenidprofileemail

claims to: AI that triages and replies to your email.

Verdict

Catch rate vs. over-blocking

Review each consent request, then grade. So far 0/13 called, 0/9 rogue apps blocked, 0 legit app(s) wrongly blocked.

How it is scored

Catch rate = rogue apps blocked with the exact right reason.

A false positive (blocking a legitimate app) takes an extra hygiene bite — over-blocking breaks real vendors and trains users to route around IT.

Harder tiers add subtler requests and deliberate traps: a verified backup tool that truly needs broad scope, Files.ReadWrite.AppFolder (safe) vs .All (dangerous), and a clean app with a typo-squatted redirect.

Live arena

4 active
adversary kill-chain1/4
iam-admin-rao15%
soc-analyst-dana12%
helpdesk-kim5%
iam-admin-you (you)0%

adversary staging…

TL;DR

What this lab is

  • A free, browser-based OAuth consent-phishing lab: work a queue of ~20 third-party app consent requests and decide Allow or Block — and name why.
  • You judge the real consent-grant attack signals: requested scopes vs. the app’s stated function, publisher verification, the redirect URI (off-domain, localhost, raw IP, typo-squatted), single-user vs. tenant admin consent, and the app’s age and install base.
  • The attack is the illicit consent grant (a.k.a. consent phishing): no password is stolen — the victim clicks Accept and the app keeps an OAuth refresh token that survives a password reset and MFA.
  • You are graded on catch rate weighed against over-blocking — denying a legitimate app (a verified backup tool that truly needs broad scope, Adobe editing tenant files) carries a hygiene penalty, because over-blocking trains users to route around IT.
  • Difficulty tiers add subtler requests and deliberate traps: admin-approved broad scope, Files.ReadWrite.AppFolder vs .All, and a trusted-looking app whose token returns to a typo-squatted domain.

Frequently asked questions

What is the OAuth Consent Lab?

A free, in-browser exercise where you review third-party application consent requests — the "Permissions requested" screen a user or tenant admin sees when an app asks to connect to Microsoft 365 or Google Workspace — and give each one a verdict: Allow, or a specific reason to block, such as over-scoped, a persistence grab via offline_access, a suspicious redirect URI, an unverified publisher asking for sensitive data, brand impersonation, or tenant-wide admin scopes. You are scored on how many malicious apps you deny versus how many legitimate ones you wrongly block.

What is an illicit consent grant / consent phishing?

It is an attack that skips the password entirely. The attacker sends a lure linking to a real OAuth consent screen for an app they control; when the victim clicks Accept, the app receives an OAuth access token — and, if it requested offline_access, a refresh token. That token is standing access to the mailbox, files or directory that keeps working after the victim resets their password and even after they pass MFA, because the grant is a separate authorization. Microsoft and Google both treat it as a top identity threat; defence is governing which apps can get consent and revoking risky grants.

How is it graded?

Each consent request has one correct verdict. Your catch rate is the share of risky apps you block with the exact right reason. False positives — blocking a legitimate app — carry an extra hygiene penalty, because an admin who reflexively blocks every broad-scope app breaks real vendors and pushes users toward shadow IT. A perfect run calls every request exactly right, the legitimate ones included.

Does it connect to my real tenant or any app?

No. Nothing is uploaded, no identity provider is contacted, and no real app is granted anything. The consent requests are authored, realistic snapshots bundled with the page, and every verdict is deterministic. It runs entirely in your browser — no account, no install, nothing sent anywhere.

Who is it for?

Identity and security admins who approve or govern app consent in Entra / Google Workspace, SOC analysts investigating OAuth grants, and anyone prepping for a security interview who wants to feel why offline_access on an unverified app, a raw-IP redirect, or full_access_as_app is a block — and why a verified vendor’s admin-approved broad scope is not.

🎉 New here? Use code WELCOME10 for 10% off any plan at checkout
OAuth Consent Lab — Free Interactive Consent-Phishing Trainer · PlayCISO