Skip to main content

Single Sign-On (OIDC)

An organization can connect Qumo Deploy to its own identity provider (IdP) over OpenID Connect. Once the connection is active, people at your organization’s verified domains sign in with your IdP. Setup has the same four steps for every IdP. In the console they are all on Organization settings → Single sign-on (/organization/sso); each step also shows the API call that does the same. The IdP guides cover the IdP side:

Before you start

  • A plan with SSO. Single sign-on is on Pay as you go and Enterprise. On Free, saving a connection or starting a test login is refused with 402; see Pricing & Plans. Disabling or deleting a connection is never refused.
  • Organization Admin. The connection’s permissions (organization.sso_connection_*) are held by Organization Admin, and a token needs the organization:admin scope; see Scopes & Permissions.
  • A verified domain. A connection is used only for sign-ins at the organization’s verified domains (exact domain only). Add a domain with POST /v1/organizations/{id}/domains, publish the TXT record it returns at _qumo-verification.<domain>, then verify it with POST /v1/organizations/{id}/domains/{domainID}/verify.
An organization has one OIDC connection.

1. Create the app at your IdP

Create an OIDC web application that uses the authorization code flow, and register this redirect URI:
For example https://console.qumo-deploy.com/oauth/sso/callback. The console’s Single sign-on page shows the exact value with a copy button, as does the connection’s redirect_uri field (GET /v1/organizations/{id}/sso/oidc). Note the app’s issuer, client ID and client secret.

2. Save the connection

In the console, enter the issuer URL, client ID and client secret on the Single sign-on page and select Save; the scopes and the claim mapping (under Claim mapping) have the defaults below. With the API:
Every save fetches <issuer>/.well-known/openid-configuration and is refused with 422 unless the document states the same issuer, its endpoints are https, it supports the code response type and RS256 or ES256 ID tokens, and it does not rule out S256 PKCE. The issuer must be reachable on the public internet. The client secret is encrypted at rest and never shown again: the API returns only whether one is set and its last four characters.

3. Run a test login

Start a test login from the console while signed in as an Organization Admin: Run test login on the Single sign-on page (POST /v1/organizations/{id}/sso/oidc/test). It must be started on the console’s host, where the sign-in returns; elsewhere it is refused with 409. You are sent to your IdP, sign in there, and come back to the console with the result, which is also recorded on the connection (last_test_result): The test login only checks the connection; it never signs you in or creates an account.

4. Activate

In the console, select Activate on the Single sign-on page; it is available once the current configuration has passed a test login. With the API:
A connection becomes active only once the latest test login of its current configuration has passed (409 otherwise). Changing the issuer, client ID, scopes or claims later clears the test result and puts an active connection back to draft: test it again, then activate it again. Saving the scopes in another order changes nothing. Rotating the client secret is not a new configuration: send the new client_secret and the connection stays active. A wrong secret shows as failed sign-ins, so run a test login after rotating. To turn single sign-on off, select Disable (save with "status": "disabled"), or Delete connection (DELETE /v1/organizations/{id}/sso/oidc). Every change to the connection is recorded in the organization’s audit log, and a deletion is recorded at high severity.

Signing in

Once the connection is active, the sign-in page asks for the email first. People at your verified domains enter their email and are sent straight to your IdP; any other address continues with Google or GitHub as before.
  • MFA is your IdP’s. An SSO sign-in does not ask for a Qumo two-factor code: the IdP’s own policies (MFA, device checks, conditional access) apply instead. To have Qumo refuse sign-ins your IdP reports no MFA for, set an MFA policy.
  • First sign-in. The first SSO sign-in of someone without a Qumo account creates a managed account for them, managed by your organization and with no personal organization of its own.
  • If the sign-in cannot complete (for example the IdP refuses it, or the email the IdP returns is not at one of your verified domains), the person is sent back to the sign-in page with the reason.

Enforce it

An active connection lets people sign in with your IdP but does not stop them using Google or GitHub. To require SSO for your managed accounts, require MFA at the IdP, and keep a break-glass administrator for when the IdP is down, see Enforce Single Sign-On.