Permissions and Microsoft Graph access

Updated September 7, 2026

Every permission Token Watch requests, the endpoint it uses them against, and the operations the resulting grant cannot perform.

Permissions requested

Permission Type Purpose
Application.Read.All Application Reads the App Registrations in the tenant and the expiry metadata on their client secrets and certificates.
openid, profile, email Delegated OpenID Connect sign-in. Identifies the signed-in user (name, email, object id and tenant id) so access can be scoped to their tenant. Authentication happens entirely on Microsoft’s side; no password reaches Token Watch.

Why the Graph read is an application permission

A delegated permission acts as the signed-in user and works only while a user session is valid; an application permission acts as the service itself, granted once, tenant-wide, by an administrator.

Token Watch uses an application permission because the expiry check runs unattended, on a schedule, on days when nobody signs in.

The trade-off is that the grant is tenant-wide and does not inherit a user’s restrictions. That is why it is the read-only permission, and why it covers one object type.

Graph endpoints called

Token Watch issues one kind of Microsoft Graph request:

GET https://graph.microsoft.com/v1.0/applications?$expand=owners($select=id)

Graph pages that collection. Token Watch follows the returned @odata.nextLink until the list is complete; those follow-up URLs are the only other addresses requested, and each is validated before use: scheme must be https and host must be exactly graph.microsoft.com, otherwise the sync fails rather than sending the tenant’s access token to an arbitrary host.

Access tokens are acquired per tenant via the OAuth 2.0 client credentials flow against login.microsoftonline.com/{your-tenant-id} and cached in memory keyed by tenant id for the life of the process. Each request carries the token for the tenant whose data is being read.

What the grant cannot do

Capability Reason
Create, edit or delete an App Registration No Requires Application.ReadWrite.All, which is not requested or granted.
Add, rotate or remove a client secret or certificate No Same write permission. Rotation remains entirely in your hands.
Read the value of a client secret No Graph returns the field as null to every caller after creation, including Microsoft’s own portal. No permission changes this.
Read a certificate private key No Private keys are not held in the App Registration; only the public certificate is. That field is not deserialised, so it is discarded during response parsing.
Read users, groups, mailboxes, files or sign-in logs No Requires directory, mail or file permissions that are not requested or granted.
Sign in as one of your users, or act on their behalf No No impersonation permission is held, and no user password reaches Token Watch.
Reach into your network No All connections are outbound to Microsoft Graph. Nothing is installed in your environment and nothing connects inbound.
List App Registrations and their credential expiry dates Yes The sole use of the grant.

Never received

Some data never reaches Token Watch at all, either because no permission is held to read it or because Microsoft Graph does not return it to any caller.

Client secret valuesNeverGraph does not return them after creation, to any caller.
Certificate private keysNeverNot held in the App Registration.
Public certificate blobsNeverPresent in the Graph response; not deserialised.
User passwords and MFA secretsNeverAuthentication is handled entirely by Entra ID.
Directory contents: users, groups, roles, devicesNeverNo permission is held to read them.
Mail, files, Teams messages, calendar dataNeverNo permission is held to read them.
Tenant sign-in and audit logsNeverNo permission is held to read them.
Payment card numbersNeverHandled by Paddle or Microsoft as merchant of record.

Related

Top