Skip to content

Understand the pieces

Imagine you are building a project-management app. People sign in, join a company, and work on that company's projects. These are the pieces that connect the identity service to your product.

Your service configuration

TermIn your project-management app
TenantThe user directory and sign-in policy for your product
ApplicationAn OAuth2 client registration for your web app, mobile app, or backend service
IssuerThe trusted identity-service URL that issues credentials
Identity providerAn external sign-in connection, such as Google or your configured OIDC provider
AdministratorA person with permission to configure your Udibo tenant

A development application and a production application can share a tenant, but then they share its user directory. Use separate tenants if you need separate test users or different tenant-wide policy.

Your customers

A user is a person in your tenant. An organization groups those users into a customer company or team. One user can belong to several organizations. A consumer app can have users without using organizations at all.

Use the validated identity's subject (sub) as an identity key. If your app accepts more than one issuer, key the external identity by both issuer and subject. An email address can change; it is not a durable authorization key.

An organization's Owner, Admin, and Member membership tiers manage the organization. Your application's roles bundle the permission strings you define, such as projects:read and projects:archive. Keep those concepts separate: being an organization admin does not automatically make someone an administrator of your Udibo tenant.

A login creates more than one session

  1. The browser visits the tenant's sign-in pages. The tenant establishes its identity session.

  2. The browser returns an authorization code to your application's callback.

  3. Your backend exchanges the code for tokens and creates its own application session. The browser carries an HttpOnly session cookie for your app.

An access token authorizes requests to an API. A refresh token lets the backend obtain a new access token. An ID token describes an authentication result; it is not a substitute for an API access token.

Your application's session and the tenant's SSO session have separate lifecycles. Clearing your app's cookie does not necessarily sign the person out of the identity service. Decide which outcome your sign-out button promises, and test that outcome.

Authentication is the first check

Suppose Alice belongs to Acme and Bob belongs to Beacon. Both can sign in. That does not give Bob permission to read an Acme project.

Your backend should establish the caller, find the project's actual organization from trusted application data, and check authority for that organization or resource. A browser-supplied organization ID is a requested target, not proof of membership.

The permissions guide covers three useful questions:

  • Tenant-wide: may this person use a capability throughout my product?

  • Organization-specific: may this person act in this named company?

  • Resource-specific: may this person act on this particular document?

The active organization in a credential answers for one organization. It does not confer authority over all organizations a browser can name. A React guard can hide a button; the backend must still refuse an unauthorized request.

Choose the right source for each answer

What you needRead it from
Session presentation in the browserYour BFF's session response
The caller of a protected API requestValidated access-token information
Profile and email verificationUserInfo with the relevant scopes
Current access to a named organization or resourceThe permission mechanism described in the public permissions guide
Application records and their ownersYour application's database

A cached session projection is useful for rendering. It can be older than the permissions resolved during token introspection. Do not make a backend access decision from the browser's copy.

Next: Choose a starter, or add organizations to a connected application.

Last verified 2026-09-06.