Start here. This is the direct spoken answer to practice first.
Why this question matters
Tenant authorization is where authentication, data access, caching, jobs, and admin tooling meet. It must be treated as a system boundary.
I would derive tenant access from trusted server-side membership data, not from a raw tenant id sent by the browser. The route or header may identify the requested tenant, but the API verifies that the authenticated user belongs to that tenant and has the required role or capability. Data queries include tenant scope so a guessed id cannot cross boundaries, and the tenant id used for filtering comes from trusted request context.