Using WordPress? Every integration here is also available as a plugin. Browse the plugin store →

Articles Microsoft Graph

Managed or proxy: two ways to let a website read Microsoft 365

How does a public website read Microsoft 365 data without the vendor holding your Azure credentials?

There are two workable arrangements, and the difference is who holds the Microsoft Graph credential. In managed mode the vendor registers the Entra application and your administrator grants it consent once. In proxy mode you run a gateway inside your own perimeter, the vendor calls that gateway instead of Graph, and no Microsoft token is ever issued to the vendor at all.

Why can a browser not just call Microsoft Graph?

Because the credential that makes the call would have to be in the browser, and anything in the browser is public. Reading a SharePoint library or an Outlook calendar on behalf of an organisation uses an application permission, and an application permission is exercised with the client credentials flow — an application id plus a client secret or certificate. Put that secret in page JavaScript and you have published it, to every visitor and every crawler, permanently.

Signing the visitor in instead does not rescue the design. A public website has visitors who have no account in your tenant, and the ones who do would be asked to authenticate to Microsoft before they could read a page — which is precisely the friction the page exists to remove.

The consequence is structural rather than a matter of care: the Graph call has to happen on a server. What is left to decide is whose server, and that decision is the whole of this article.

What is managed mode?

In managed mode the vendor owns the Entra application registration and holds its credential, and your Microsoft 365 administrator grants that application consent once. From then on the vendor requests an access token for your tenant, calls Microsoft Graph, and returns only the data the page needs.

  • Who registers the application — the vendor. Nothing is created in your directory beyond the service principal that consent produces.
  • What your administrator does — reviews the requested permissions and grants tenant-wide admin consent, once. There is no per-user prompt afterwards.
  • What you can inspect — the consented application appears under Enterprise applications in the Microsoft Entra admin center, with its permission list, its sign-in activity, and a button that revokes it.
  • What it costs you — a third party can, within the scopes you consented to, read that data without a further prompt. That is the trade, and it should be stated that plainly before anyone signs off on it.

Managed mode is the right default for most organisations, for an unglamorous reason: the alternative is infrastructure somebody has to run, monitor and patch, and an unmaintained gateway is a worse security position than a consented application you can revoke in one click.

What is proxy mode, and who actually needs it?

In proxy mode you stand up an HTTP gateway inside your own perimeter — an API Management instance, a function app, a reverse proxy, whatever your platform team already runs — and it is that gateway which holds the Graph credential. The vendor is configured with the gateway's base URL and an API key, and calls it instead of calling Microsoft. Graph traffic never leaves your network, and the audit trail is in your logs.

This matters to a specific kind of buyer rather than to everyone. If your security review has a line item that reads "no third party holds a token for our tenant", proxy mode is the only answer that satisfies it; managed mode does not, and no amount of encryption-at-rest language changes that. If your review has no such line, proxy mode is mostly extra machinery.

  • Who registers the application — you do, in your own tenant, with whatever permissions your gateway needs and no more.
  • Where the secret lives — in your gateway. The vendor holds an API key for the gateway, not a Microsoft credential, so revoking it revokes exactly one thing.
  • What you inherit — availability. If the gateway is down, the widget on your website has nothing to render, and that is now your incident rather than the vendor's.
  • What does not change — the embed on the page. The mode is an infrastructure decision, invisible in the markup and invisible to the visitor.

How do you choose between them?

ManagedProxy
Holds the Graph credentialThe vendorYou
Entra app registrationThe vendor's, consented in your tenantYours
Where Graph traffic originatesThe vendor's serversInside your perimeter
Graph audit log entries attributed toThe consented applicationYour own application
Infrastructure you operateNoneA gateway, with its uptime and patching
To revoke accessRemove consent in EntraRotate the gateway API key
Sensible whenYou want it working this weekA policy forbids third-party tokens

One question settles it most of the time: would your security team sign off on a third-party application holding a token for your tenant? If yes, take managed mode and spend the effort on scoping the permissions tightly instead. If no, the answer was never going to be a better contract, and proxy mode is what the policy is asking for.

What does the access mode not change?

It does not change what the visitor sees, what the page contains, or what the component can reach. A component reads only the source it is configured against, and only within the permissions that were consented — narrowing the mode does not narrow the scopes, and widening the scopes is not made safe by proxying them.

It also does not change where the data ends up. In both modes the page is rendered from a live read rather than from a copy, so nothing accumulates a second store of your documents or your directory. Least privilege is a separate decision from access mode, and it is the one that actually bounds the blast radius.

Questions people ask about this

Does proxy mode mean WPIntegrate never sees our data?

No — it means we never hold a Microsoft credential. Your gateway returns data to us so we can render the component, so the difference is custody of the token and of the Graph audit trail, not the absence of a data path. If you need the data path itself to stop at your perimeter, what you are describing is self-hosting rather than proxy mode.

Can we start in managed mode and move to proxy later?

Yes. The mode is a tenant-level setting rather than a property of any embed, so the script tag and custom element on your pages are identical either way and nothing on your website has to be edited when the mode changes.

What happens to the components if we revoke consent?

They stop returning data and render their error state — nothing on the page breaks structurally, and no cached copy keeps serving. Revoking consent in the Microsoft Entra admin center is the intended off switch and it takes effect immediately.

Which components need a Microsoft connection at all?

Only the ones reading Microsoft 365. A Calendar component pointed at a published ICS feed or a JSON endpoint needs no Microsoft connection, and a Form Builder component delivering by webhook needs none either. The access mode question only arises for the sources that are genuinely in your tenant.

Still the wrong answer for your case? Then the case is worth hearing.

These articles describe the general shape. Tenants differ, policies differ, and the interesting questions are the ones where the general shape does not fit.