Skip to content

Support for Multi-Instance Apps #51

@dlozlla

Description

@dlozlla

Summary
This proposal considers a protocol-level solution for scenarios where a user needs to connect to a specific instance (e.g., tenant, organziation, workspace) of a Resource App, particularly when these multiple instances share a common issuer URL. The goal is to create a mechanism that allows a Requesting App to specify the target instance and ensures this choice is communicated end-to-end, so it can be correctly interpreted by both the IdP and the Resource App's authorization server.

Problem
In many enterprise environments, a single application may offer multiple distinct instances. For example, consider an observability platform with separate instances for development and production logs. Often, these instances share a single audience (i.e., issuer URL) and resource identifier for their APIs. In these cases, access to the Resource App's API is managed by a custom claim injected into the access_token after the user authenticates with a specific instance.

The current Identity Assertion Authorization Grant does not define a standard way for a Requesting App to specify a target instance under these conditions. This ambiguity prevents a seamless user experience, which should ideally mirror selecting an application from an SSO dashboard and being directed to the correct instance.

This overall challenge can be broken down into two parts:

1. The Discovery Problem
Before a user can make a choice, the Requesting App must first know what choices are available. How can the Requesting App learn which Resource Apps, and their specific instances, the logged-in user is permitted to connect to?

While solving discovery is critical for the end-to-end experience, it is handled separately in issue #52. For this issue, we will assume the Requesting App has a method to determine which instance the user wants to access.

2. The Request Problem
This is the focus of the proposal. Once the user has selected an instance, how does the Requesting App communicate this choice to the IdP? The current protocol lacks a standard parameter to differentiate the target instance when it shares an audience/issuer URL with others.

Proposal
We propose using the client_id of the target Resource App instance within the IdP as the unique identifier. This client_id would be included in the initial Token Exchange request and the resulting Identity Assertion (ID-JAG).

Rationale:

  • Uniqueness & Existing Trust: Each Resource App instance registered with the IdP for SSO already has a unique client_id. This identifier is known and trusted by both the IdP and the Resource App.
  • IdP Policy Enforcement: The IdP can use the provided client_id to locate and apply the specific authorization policies associated with that instance.
  • Resource App Tenant Mapping: The Resource App's Authorization Server already relies on this client_id for its OIDC federation with the IdP. It can therefore use the client_id from the assertion to unambiguously map the request to the correct internal tenant, organization, or workspace.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions