passbolt/passbolt_api · error · BadRequestException

No valid SSO settings found.

Error message

No valid SSO settings found.

What it means

Catch-all in SsoPingOneService::assertAndGetSsoSettings: every failure while fetching/validating active SSO settings (none active, wrong provider, wrong data DTO) is rethrown as BadRequestException 'No valid SSO settings found.' with the underlying exception attached as previous.

Solutions

  1. Create/activate valid PingOne SSO settings via the admin SSO configuration flow
  2. If a different provider is active, use its endpoint instead of the PingOne service
  3. Inspect the chained previous exception in logs to identify whether it was not-found vs validation mismatch
  4. Confirm the app talks to the environment/database containing the expected SSO settings
Defensive patterns

Strategy: try-catch

Validate before calling

try {
    $settings = (new SsoSettingsGetService())->getActiveOrFail(true);
    $hasValidPingOne = $settings->provider === SsoSetting::PROVIDER_PINGONE
        && $settings->data instanceof SsoSettingsPingOneDataDto;
} catch (RecordNotFoundException $e) {
    $hasValidPingOne = false;
}

Try / catch

try {
    $settings = $pingOneService->assertAndGetSsoSettings();
} catch (BadRequestException $e) {
    $previous = $e->getPrevious();
    // not-found => run SSO setup; else provider/data mismatch
}

Prevention

When it happens

Trigger: getActiveOrFail(true) finds no active settings (SSO unconfigured, deleted, or draft); or one of the PingOne provider/data validation errors fired inside the try and got wrapped by this catch.

Common situations: SSO never set up or removed by admin; settings in draft state; request hit the PingOne endpoint while another provider is active; wrong database/environment without settings.

Understand the failure class

Background: "missing required config value" errors: why libraries refuse to start when a configuration key is empty, unset, or blank — this error's family across 48 libraries.

Related errors


AI-assisted analysis of passbolt/passbolt_api@31c1bbc10f (2026-09-17). Data as JSON: /api/errors/4a0553d136f9061e. Report an issue: GitHub.

Appendix: source

Thrown at plugins/PassboltEe/Sso/src/Service/Sso/PingOne/SsoPingOneService.php:72

            ['httpClient' => $this->getCustomHttpClient()]
        );
    }

    /**
     * @return \Passbolt\Sso\Model\Dto\SsoSettingsDto
     */
    protected function assertAndGetSsoSettings(): SsoSettingsDto
    {
        try {
            $ssoSettings = (new SsoSettingsGetService())->getActiveOrFail(true);
            if ($ssoSettings->provider !== SsoSetting::PROVIDER_PINGONE) {
                throw new BadRequestException(__('Invalid provider. Expected PingOne.'));
            }
            if (!($ssoSettings->data instanceof SsoSettingsPingOneDataDto)) {
                throw new BadRequestException(__('Invalid provider data. Expected PingOne settings.'));
            }
        } catch (Exception $exception) {
            throw new BadRequestException(__('No valid SSO settings found.'), 400, $exception);
        }

        return $ssoSettings;
    }
}

View on GitHub (pinned to 31c1bbc10f)