SSO Setup Guide¶
PRO Feature
SSO configuration requires a PRO tier license.
Configure Single Sign-On (SSO) to allow users to authenticate using your organization's identity provider.
Overview¶
CertifyClouds PRO supports SSO via OpenID Connect (OIDC):
| Provider Type | Description | Use When |
|---|---|---|
azure_ad | Azure AD / Entra ID (first-class support) | Your organization uses Microsoft 365 / Azure AD |
oidc | Generic OIDC | Using Okta, Auth0, Keycloak, PingFederate, or other OIDC providers |
SAML Support
CertifyClouds also supports SAML 2.0. To configure SAML, select SAML as the provider type in Settings → SSO Configuration and provide your IdP metadata URL. This guide focuses on OIDC configuration.
Prerequisites¶
Before configuring SSO:
- PRO tier license - SSO is not available in STARTER tier
- Admin access to your Identity Provider (IdP)
- CertifyClouds URL - Your deployment's base URL
Required Information¶
| Item | Description | Example |
|---|---|---|
| CertifyClouds URL | Your deployment's base URL | https://certifyclouds.yourcompany.com |
| Callback URL | SSO callback endpoint | https://certifyclouds.yourcompany.com/api/auth/sso/callback |
| Client ID | From your IdP app registration | 12345678-abcd-... |
| Client Secret | From your IdP app registration | secret_... |
| Issuer URL | OIDC discovery endpoint base | https://login.microsoftonline.com/{tenant}/v2.0 |
Multiple Environments (Important!)¶
If you access CertifyClouds from different URLs (localhost, ACI, CAE, custom domain), you must register all redirect URIs in your IdP:
| Environment | Redirect URI |
|---|---|
| Azure Container Instances | http://<ACI_PRIVATE_IP>:8080/api/auth/sso/callback |
| Container Apps (internal) | https://<CAE_FQDN>/api/auth/sso/callback |
| Custom domain | https://certifyclouds.yourcompany.com/api/auth/sso/callback |
Why is this needed?
OAuth 2.0 requires the redirect URI to exactly match one registered in the App Registration. CertifyClouds dynamically detects which URL you're accessing from, but your IdP must allow all of them.
Azure AD / Entra ID Setup¶
Step 1: Create App Registration¶
- Go to Azure Portal → Microsoft Entra ID → App registrations
- Click + New registration
- Configure:
- Name:
CertifyClouds SSO - Supported account types:
Accounts in this organizational directory only - Redirect URI:
- Platform:
Web - URI:
https://YOUR_CERTIFYCLOUDS_URL/api/auth/sso/callback
- Platform:
- Click Register
Step 2: Configure Authentication¶
- In your app registration, go to Authentication
- Under Implicit grant and hybrid flows, ensure:
- [ ] Access tokens - Unchecked (we use authorization code flow)
- [ ] ID tokens - Unchecked
- Under Advanced settings:
- Allow public client flows: No
Step 3: Create Client Secret¶
- Go to Certificates & secrets → Client secrets
- Click + New client secret
- Configure:
- Description:
CertifyClouds SSO - Expires: 24 months (recommended)
- Click Add
- Copy the secret Value immediately - it won't be shown again!
Step 4: Configure API Permissions¶
- Go to API permissions
- Click + Add a permission → Microsoft Graph → Delegated permissions
- Add these permissions:
openid(Sign users in)profile(View users' basic profile)email(View users' email address)User.Read(Sign in and read user profile)- Click Grant admin consent for [Your Organization]
- Verify all permissions show green checkmarks
Step 5: Collect Configuration Values¶
| Setting | Where to Find |
|---|---|
| Client ID | App registration → Overview → Application (client) ID |
| Client Secret | The value you copied in Step 3 |
| Tenant ID | App registration → Overview → Directory (tenant) ID |
| Issuer URL | https://login.microsoftonline.com/{TENANT_ID}/v2.0 |
Okta Setup¶
Step 1: Create Application¶
- Go to Okta Admin Console → Applications → Applications
- Click Create App Integration
- Select:
- Sign-in method: OIDC - OpenID Connect
- Application type: Web Application
- Click Next
Step 2: Configure Application¶
- App integration name:
CertifyClouds - Grant type:
- [x] Authorization Code
- [ ] Implicit (unchecked)
- Sign-in redirect URIs:
https://YOUR_CERTIFYCLOUDS_URL/api/auth/sso/callback- Controlled access: Select appropriate option
- Click Save
Step 3: Collect Values¶
| Setting | Where to Find |
|---|---|
| Client ID | General tab → Client Credentials |
| Client Secret | General tab → Client Credentials |
| Issuer URL | https://yourcompany.okta.com |
Step 4: Assign Users¶
- Go to Assignments tab
- Click Assign → Assign to People or Assign to Groups
- Select users/groups who should access CertifyClouds
Generic OIDC Provider¶
For other OIDC providers (Auth0, Keycloak, PingFederate, etc.):
Prerequisites¶
Your OIDC provider must support:
- Authorization Code flow
- Standard OIDC claims:
sub,email,name - OIDC Discovery endpoint (
/.well-known/openid-configuration)
Configuration¶
| CertifyClouds Setting | Your IdP Value |
|---|---|
| Provider Type | oidc |
| Issuer URL | Base URL for OIDC discovery |
| Client ID | From your IdP |
| Client Secret | From your IdP |
| Scopes | openid profile email |
CertifyClouds Configuration¶
Step 1: Access SSO Settings¶
- Log in to CertifyClouds as admin
- Go to Settings → SSO Configuration
- Click Configure SSO
Step 2: Enter Configuration¶
| Field | Description |
|---|---|
| Provider Type | Select: Azure AD, OIDC, or SAML |
| Issuer URL | Your IdP's OIDC issuer URL |
| Client ID | Application/Client ID from your IdP |
| Client Secret | Secret from your IdP (encrypted at rest) |
| Login Button Text | Custom text (e.g., "Sign in with Company SSO") |
Step 3: Configure User Provisioning¶
| Option | Description |
|---|---|
| Auto-create users | Automatically create accounts for SSO users |
| Default role | Role assigned to auto-created users |
| SSO-only mode | Disable local username/password login |
Step 4: Test and Save¶
- Click Test Connection to verify IdP connectivity
- If successful, click Save Configuration
- Test login in a private browser window
Troubleshooting¶
Common Issues¶
| Issue | Cause | Solution |
|---|---|---|
| "Invalid redirect URI" | Callback URL mismatch | Ensure IdP redirect URI exactly matches CertifyClouds callback URL |
| "Redirect to localhost" | Missing redirect URI for environment | Add all environment URLs (ACI IP, CAE FQDN, custom domain) to your IdP's redirect URIs |
| "Invalid client_id" | Wrong Client ID | Double-check Client ID in settings |
| "AADSTS50011" | Reply URL not registered | Add callback URL to Azure AD app registration — ensure you've added ALL environment URLs |
| "AADSTS700016" | App not found in tenant | Verify app registration is in the correct tenant |
| "User not authorized" | User not assigned to app | Assign user/group in IdP |
Debug Tips¶
- Enable SSO debug logging:
LOG_SSO_DEBUG=true - Test OIDC discovery:
- Check for required endpoints:
authorization_endpoint,token_endpoint,jwks_uri
Security Best Practices¶
- Use short-lived client secrets - Rotate every 12-24 months
- Limit application permissions - Only request necessary scopes
- Enable SSO-only mode - After testing, disable local password login
- Use conditional access - Configure MFA via your IdP
- Monitor SSO logins - Review audit logs for unusual activity
Environment Variable Configuration¶
For container deployments, SSO can be pre-configured:
SSO_PROVIDER_TYPE=oidc
SSO_ISSUER_URL=https://login.microsoftonline.com/YOUR_TENANT/v2.0
SSO_CLIENT_ID=your-client-id
SSO_CLIENT_SECRET=your-client-secret
SSO_AUTO_CREATE_USERS=true
SSO_DEFAULT_ROLE=user
SSO_LOGIN_BUTTON_TEXT="Sign in with Azure AD"
Note
Environment variables take precedence over database configuration.