Skip to main content

Design Decisions

The shape of Wayfinder Enterprise, from the B2B model through the quick start and each journey, rests on the choices below. Each decision names the default this section uses and when the alternative fits better.

Every organization in this section is an organization unit (OU), a node in the hierarchy that owns its own users, groups, and roles, beneath one platform OU. See Manage Organization Units.

Where Accounts Live​

The two organization sign-up templates differ in where the new account is created.

Account in the organizationAccount in the platform organization, shared in
TemplateOrganization Sign-upOrganization Sign-up with Shared Account
The account lives inThe new organizationThe user type's OU, the platform organization
One person in several organizationsNo: an invitation shares an account only into a direct child of the OU that owns it, so a Northstar Labs account cannot be invited into Initech, its siblingYes: the platform organization's direct children are the companies, so the account can be shared into any of them
  • Default in this section: a company's first admin lives in their organization, through Organization Sign-up. Each company's people belong to that company, which matches how most business customers think about their staff. Accounts that an invitation creates are the exception: they live in the platform organization and are shared in, so an invited person can later join another company.
  • Choose shared accounts when one person works across organizations, such as consultants, agencies, or a support team serving every customer. See Switch Organizations.

See Go Further in Build a Multi-Factor Sign-In Flow for both templates.

How a Sign-In Picks the Organization​

A shared application's sign-in must land in exactly one organization before ThunderID issues a token. Three places can decide it:

Decided byHowFits when
The requestThe application sends the organization's ID, at /ou/{ouId}/oauth2/authorize or as ouId on the flow start.The application already knows the organization, such as from a company-specific link or subdomain your application maps to an ID.
The person, before sign-inA Resolve OU step with directChildrenOnly asks for the organization's handle, such as northstar.Each organization signs in differently, such as with its own identity provider, so the organization must be known before the credentials.
The flow, after sign-inA Resolve OU step after the credential check picks the person's organization, and asks only when there are several.People sign in with one method everywhere, and most belong to one organization.
  • Default in this section: the Basic + Enterprise SSO template uses both flow-based options: a handle prompt before enterprise SSO, and a pick after password sign-in.
  • Choose the request when your application can tell the organization from context. It saves the person a step.

See Sign Users In to Organization Units for the full set of rules and refusals.

Shared Roles or Per-Organization Roles​

  • Default in this section: Wayfinder Admin and Wayfinder Member are defined once in the platform organization and shared with every child organization. Every company gets the same roles, a sign-up flow can assign them in a company that did not exist a moment earlier, and a permission change reaches every company at once.
  • Choose per-organization roles when organizations need roles of their own. An organization can own roles, and a role name must be unique only among the roles an organization owns and those shared with it.
  • Restrict shared roles when an organization may use a role but not hand it out. A sharing policy can turn assignments off for some organizations. Only a resource file or the Role Sharing API sets this rule. See Assignments Turned Off.

Who Configures Enterprise SSO​

Each organization's identity provider is a connection that organization owns, chosen through the shared sign-in flow's enterpriseIdp variable.

  • Default in this section: the organization's admin connects their own identity provider from inside your application, with FlowVariablesForm behind a backend route. Onboarding a company's identity provider needs nobody from the platform team.
  • Choose platform-managed SSO when enterprise customers expect a guided setup, or the connection details must not pass through an admin's browser. The platform team creates the connection in the organization and sets its enterpriseIdp value through the API.

See Share a Flow for how an organization's values override a shared flow, and Plug In an Enterprise IdP for both paths.

How Admins Reach the Management API​

  • Default in this section: a backend route checks the admin's own application permission, pins every call to the admin's organization, and calls ThunderID with a backend client's token issued for that organization. The client holds the root system permission, so the route, not ThunderID, keeps each call inside that organization. The admin's token never carries a ThunderID management permission. See Let Organization Admins Manage Teams.
  • Choose direct calls when an internal tool's admins sign in with tokens that name their organization in ouId and carry organization-confined permissions such as system:user:view. On the Data Plane, each of those permissions acts only in the OU the token names. If the deployment sets server.security.rest.audience, the tokens must also be issued for that audience. See System Permissions.
warning

Never let an organization admin's token carry the root system permission. It acts in every OU of the deployment, not only the admin's organization.

One Shared Application or One per Organization​

  • Default in this section: one application, shared with every company. A new company can sign in the moment it signs up, and one client ID serves every company.
  • Choose an application per organization when each customer needs its own client registration, such as different redirect URIs, or a dedicated deployment of your product. An application that is not shared signs people in to its own OU only, so no organization step is needed in the flow.

A shared application's flow must decide the organization, or the sign-in is refused at its assertion step with FET-1124.

Flat or Nested Organizations​

  • Default in this section: companies are direct children of the platform organization. A handle such as northstar names one company, and a role shared with all child organizations reaches each of them.
  • Choose nested organizations when customers have departments, regions, or subsidiaries of their own. OUs nest to any depth, and a sharing policy can reach one OU or its whole subtree. Resolve OU without directChildrenOnly offers OUs by their handle path from the top of the tree, such as default/wayfinder-enterprise/northstar/engineering.

Two rules shape a nested tree:

  • A sign-up or invitation flow shares an account only into a direct child of the OU that owns it. A sharing policy set through the API or a resource file can reach a whole subtree.
  • Groups are never shared: a group belongs to one OU, and its members must live in that OU or be shared into it.

See Resource Sharing Across Organization Units for every sharing mode.

What You Have Now​

You have a platform where each business customer is its own organization. Companies sign themselves up, and people sign in to the organization they belong to, switching when they work in several. Each company can bring its own identity provider, and each company's admin manages its own team. Every sign-in lands in one organization, and only the roles assigned there count.

Most of these decisions can change later without unraveling the rest. Adding nested organizations, per-organization roles, or platform-managed SSO adds to the tree you have. Moving accounts between the organization and the platform organization is the expensive one to revisit, because it changes where existing people live, so settle it before you onboard customers at scale.

Next Steps​

Explore with AI

ThunderID LogoThunderID Logo

Product

DocsAPIsSDKs
© Copyright Linux Foundation Europe.For web site terms of use, trademark policy and other project policies please see https://linuxfoundation.eu/en/policies.