Overview
Single Sign-On (SSO) allows your team members to authenticate through your organization’s Identity Provider (IdP) instead of using individual Google or magic link sign-in methods. This gives your IT team centralized control over who can access Qwairy, automatic onboarding for new employees, and a single point of revocation when someone leaves. Qwairy supports OIDC (OpenID Connect) with Authorization Code + PKCE flow, the most secure and widely supported SSO protocol.SSO is available on the Enterprise plan only. See pricing or book a demo.
Supported Identity Providers
Qwairy works with any OIDC-compliant Identity Provider, including:Okta
Full OIDC support with automatic discovery
Azure AD
Microsoft Entra ID (formerly Azure Active Directory)
Google Workspace
Google Cloud Identity / Workspace
Setup Guide
Okta
- Go to Applications > Create App Integration
- Select OIDC - OpenID Connect and Web Application
- Set the Sign-in redirect URI to:
https://qwairy.co/api/auth/sso/callback - Set Sign-out redirect URI to:
https://qwairy.co - Under Assignments, assign the app to the relevant groups
- Copy the Client ID and Client Secret
- Your Issuer URL is:
https://your-org.okta.com
Azure AD
- Go to Azure Portal > Microsoft Entra ID > App registrations > New registration
- Set Redirect URI (Web) to:
https://qwairy.co/api/auth/sso/callback - Under Certificates & secrets, create a new Client secret and copy its value
- Copy the Application (client) ID from the Overview page
- Your Issuer URL is:
https://login.microsoftonline.com/{tenant-id}/v2.0
Google Workspace
- Go to Google Cloud Console > APIs & Services > Credentials > Create OAuth client ID
- Select Web application
- Add Authorized redirect URI:
https://qwairy.co/api/auth/sso/callback - Copy the Client ID and Client Secret
- Your Issuer URL is:
https://accounts.google.com
acme.com)Click Test OIDC Connection to verify that Qwairy can reach your IdP’s discovery endpoint and JWKS. This validates the issuer URL without performing a full login.
Domain Verification
Domain verification proves that your organization owns the email domain you want to use for SSO. This prevents unauthorized teams from claiming your domain. When you add a domain, Qwairy generates a unique verification token. You add this as a DNS TXT record:Each domain can only be linked to one team. If you see “domain already claimed”, contact support.
JIT Provisioning
Just-In-Time (JIT) provisioning automatically creates user accounts when team members sign in via SSO for the first time. When a user authenticates through your IdP:- Qwairy receives their email, name, and profile picture from the OIDC claims
- If the user doesn’t exist, a new account is created automatically
- The user is added to your team with the Default Role you configured (Member or Viewer)
- If the user already exists (e.g., from a previous invitation), they are linked to your SSO connection
Enforce SSO
When Enforce SSO is enabled, team members with email addresses matching your verified domains are required to sign in through your IdP. Google sign-in and magic links are blocked for these users. To enable enforcement:- Ensure SSO is enabled and working
- Toggle Enforce SSO in Team > SSO settings
- Non-SSO sign-in attempts from your domain will be redirected to the SSO login
Troubleshooting
Discovery failed
Discovery failed
- Verify the Issuer URL is correct and accessible
- Ensure the URL points to the OIDC provider root (e.g.,
https://accounts.google.com, nothttps://accounts.google.com/.well-known/openid-configuration) - Check that your IdP is not blocking external requests
Invalid redirect URI
Invalid redirect URI
- Ensure your IdP has
https://qwairy.co/api/auth/sso/callbackas an authorized redirect URI - The URL must match exactly, including the protocol (
https)
Domain not verified
Domain not verified
- Verify the DNS TXT record is set on the correct domain
- DNS propagation can take up to 48 hours — try again later
- Use a DNS lookup tool to confirm the TXT record is visible
User not provisioned
User not provisioned
- Ensure the user’s email domain matches a verified SSO domain
- Check that the IdP is returning the
emailclaim in theid_token - Verify the
openid email profilescopes are configured in your IdP
Security
Qwairy’s SSO implementation follows security best practices:| Measure | Detail |
|---|---|
| PKCE (S256) | Code verifier stored server-side, never exposed to the client |
| State parameter | CSRF protection with cryptographically random state, 10-minute TTL |
| Nonce validation | Prevents token replay attacks |
| Client secret encryption | AES-256-GCM encrypted at rest |
| DNS verification | Prevents unauthorized domain claiming |
| One-time tokens | 60-second TTL, single use for session bridging |

