
Why this exists: Swagger and OpenAPI are the easy part. OAuth is where you lose a morning staring at errors you did not cause on purpose. This guide is the short version of what actually matters when you wire a custom connector in a normal Microsoft cloud tenant.
For you if: You build in Power Platform, you are not the person who owns Entra ID (still called Azure AD in a lot of docs), and you need the connector Test tab to go green before you touch Copilot Studio.
Scope: Microsoft-hosted only. No on-premises gateways or hybrid fairy tales.
OAuth is just a structured way for your connector to get a token so your API trusts the call. For makers there are really two lanes.
If you are not sure, ask a plain question: “Should this behave like the signed-in user, or like one shared backend account?” That single answer saves you from rebuilding connections later.
You will see different labels depending on OAuth type, but the ideas repeat.
| Field | What it is (maker translation) |
|---|---|
| Identity provider | Usually Microsoft Entra if your API is protected with Microsoft login. |
| Client id | The app registration’s public id. Think “username for the app.” |
| Client secret (or cert) | The proof that your automation is allowed to act as that app. Treat it like a password. Rotates on purpose. |
| Authorization URL / Token URL | Where the browser (or backend) goes to start OAuth and swap a code for a token. Copy them from Entra’s endpoint docs for your cloud. |
| Resource URL or scope | What permission you are asking for. Wrong string, wrong token flavor, unhappy API. |
| Redirect URL | Where Entra sends the user after login during connector testing. Must match what is registered on the app, character for character. |
If your stomach just tightened, good. Redirect mismatches and wrong scope lines are half the support tickets that are not actually “Power Platform is broken.”
Why this order? Copilot Studio adds variables you do not need while you are still proving the pipe is not blocked.
Quick translations, no mysticism.
AADSTS7000215 and friends around invalid client secret. Secret expired or someone rotated it. Not a mystery. Update the secret in the place your connector reads from.For a fuller “open the hood in order” list, jump to Part 5: Troubleshooting kit.
Do not park long-lived client secrets in Canvas apps formulas, copy-paste emails, or screenshots. Use the patterns your org already picked: connection objects, environment variables where available, Key Vault if your admins set that up for you. If you are not sure where the secret should live, ask once and save ten incidents.
| Delegated (user) | Client credentials (app) | |
|---|---|---|
| Who shows up in audits | The signed-in user | The service principal |
| Runtime sign-in prompt | Usually yes for first connection | No prompt if connector supports it |
| Good when | Mail, files, or rows that belong to people | Shared lookup tables, system maintenance, “always the same” tools |
Once Test is green, you are ready to attach the same connector to Copilot Studio as a tool. That is Part 2. If your tool calls Dataverse, read Part 3 before you chase “the model is dumb” when the real story is security roles.
Part of the Makers, Microsoft-hosted kit from elijah.ai. For people who ship connectors and agents.