Microsoft Teams (Self-Hosted)
Requires the Plus Plugin.
The Seatsurfing Microsoft Teams app available on the Microsoft AppSource marketplace (see Microsoft Teams) only works against Seatsurfing's own hosted Cloud/Professional instances — its app manifest points at Seatsurfing's own domain, not yours.
For a self-hosted instance, register your own Azure AD app and your own Teams app manifest instead, pointing at your own domain. It's the same integration — just your own Teams app entry rather than Seatsurfing's Marketplace listing.
Prerequisites
- The Plus Plugin running and connected to your backend.
- Admin access to Azure AD (Entra ID) in your own Microsoft 365 tenant.
- Admin access to the Microsoft Teams Admin Center (to sideload or publish the app).
Step 1: Register an Azure AD App Registration
- Sign in to the Azure Portal and open Azure Active Directory → App registrations → New registration.
- Give the app a descriptive name (e.g., Seatsurfing Teams) and register it. Note down the Application (Client) ID — you'll need it below.
- Under Expose an API:
- Set the Application ID URI to
api://<your-domain>/<client-id>. - Add a scope named
access_as_user. - Add Teams' well-known client apps as pre-authorized applications: Teams desktop/mobile (
1fec8e78-bce4-4aaf-ab1b-5451cc387264) and Teams web (5e3ce6c0-2b1f-4285-8d4b-75ee78787346). Double-check these IDs against Microsoft's current Teams SSO documentation, as they occasionally change.
- Set the Application ID URI to
<your-domain> must be your organization's primary domainThe generated app package puts api://<primary-domain>/<client-id> into the manifest, using your organization's primary domain as configured in Seatsurfing — not whichever domain you happen to type here. If the two differ by even one character, sign-in fails.
Rather than assembling the URI by hand, complete Step 2 first and then copy the ready-made Application ID URI shown in the manifest download form (Step 3) into Azure.
If your organization's primary domain changes later, both this URI and the Teams app ID change with it, so you'll need to update the Azure app registration and upload a fresh package.
Unlike the Exchange integration, no client secret or certificate is required here. Seatsurfing only verifies the signature of the sign-in token Microsoft Teams already issued to the user — it never exchanges that token or calls Microsoft Graph on the app's behalf.
Step 2: Configure the Plus Plugin
Set the following environment variable on your plus-plugin container (see Plus Plugin for the general environment variable setup) and restart it:
| Environment variable | Type | Default | Description |
|---|---|---|---|
| MS_TEAMS_APP_CLIENT_ID | string | The Application (Client) ID from Step 1 — a GUID. Must be set for sign-in to work and for the manifest download. |
This must be the Client ID GUID, not the app's display name or its Application ID URI. Microsoft Teams rejects app packages whose client ID isn't a GUID, so the manifest download refuses to generate one from anything else.
Step 3: Enable the integration and generate your Teams app package
-
As organization admin, navigate to Plus Features in the Administration UI and locate the Microsoft Teams integration section.
-
Toggle Enable Microsoft Teams app and click Save.
-
Click Download Teams app manifest. A small form appears — fill in your app name, developer name, developer website, privacy policy URL, and terms of use URL. None of this is saved; it's only used to build the download.
Microsoft's manifest schema constrains these values, and the form enforces the same limits:
- App name: at most 30 characters.
- Developer name: at most 32 characters.
- Developer website, privacy policy and terms of use URLs: must be full
https://URLs.
The form also shows the read-only Application ID URI to paste into Azure (see Step 1).
-
Click Generate & download. This produces a ready-to-upload
.zippackage (manifest plus icons) built from your input, yourMS_TEAMS_APP_CLIENT_ID, and your organization's own domain.
Each download carries the same app ID but a fresh, higher version number. Microsoft Teams therefore treats a re-upload as an update to the existing app rather than a new one — so if you need to correct the app name or a URL, just generate a new package and upload it over the old one.
Step 4: Install the app in Microsoft Teams
Upload the downloaded package via the Teams Admin Center: Manage apps → Upload. Alternatively, publish it to your organization's internal app catalog to make it available to everyone without manual sideloading.
Once installed, create matching user accounts the same way as for the Cloud version: each Microsoft Teams user needs a corresponding Seatsurfing account whose username matches the preferred_username (the user principal name) that Microsoft Entra ID reports for them. The comparison is case-insensitive, so Jane.Doe@example.com and jane.doe@example.com are treated as the same user.
Some tenants give users a UPN that differs from their primary email address. Seatsurfing matches on the UPN, so in that case the Seatsurfing username has to be the UPN.
Troubleshooting
- "invalid audience" during sign-in:
MS_TEAMS_APP_CLIENT_IDdoesn't match the Azure AD app's Client ID, or wasn't picked up after being set (restart theplus-plugincontainer). - Manifest download fails: the form shows the reason. Common causes are
MS_TEAMS_APP_CLIENT_IDnot being set or not being a GUID, an app or developer name over the length limit, or a URL that isn't a fullhttps://URL. - Teams rejects the uploaded package: make sure you're using the latest version of the
plus-plugincontainer image to ensure schema validity, then generate and upload a fresh package. - Teams shows the tab but it never loads: confirm your instance is reachable over HTTPS, with a certificate trusted by the client, at the domain used when generating the manifest — Teams loads the tab directly from your instance. Also confirm the Azure AD app's Application ID URI matches the Application ID URI shown in the manifest download form exactly.