Google OAuth App Setup
Create a Google OAuth app to enable Google Login, Google Calendar sync, and Google Meet room creation.
Connect Tymeslot to any OAuth 2.0 / OpenID Connect identity provider for single sign-on. Works with Keycloak, Authentik, Lemonldap::NG, Okta, Azure AD, and others.
Technical Product Builder & AI Developer
By the end of this guide, users will be able to sign in to Tymeslot using your organization's identity provider. This replaces or supplements email/password authentication with centralized SSO.
Tymeslot implements a standard OAuth 2.0 Authorization Code flow. When a user clicks the SSO button:
sub
(subject) claim.
sub, email, email_verified, name) from the userinfo endpoint. The
sub
claim is required.
Create a new OAuth 2.0 / OIDC client application in your IdP. The exact steps depend on the provider, but you will typically need to supply:
Tymeslot
https://yourdomain.com/auth/oauth/callback
openid email profile
After creating the client, note down the Client ID and Client Secret.
You need three endpoint URLs from your identity provider. Most OIDC providers publish these in their discovery document at:
https://your-idp.example.com/.well-known/openid-configuration
From the discovery document (or your IdP's documentation), note:
authorization_endpoint)
token_endpoint)
userinfo_endpoint)
Add the following to your Tymeslot environment configuration and restart the server.
# Enable generic OAuth / OIDC SSO
ENABLE_OAUTH_AUTH=true
# OAuth client credentials (from Step 1)
OAUTH_CLIENT_ID=your-client-id
OAUTH_CLIENT_SECRET=your-client-secret
# Identity provider URLs (from Step 2)
OAUTH_PROVIDER_URL=https://your-idp.example.com
OAUTH_AUTHORIZE_URL=https://your-idp.example.com/authorize
OAUTH_TOKEN_URL=https://your-idp.example.com/token
OAUTH_USERINFO_URL=https://your-idp.example.com/userinfo
# Scopes (optional — defaults to "openid email profile")
# OAUTH_SCOPE=openid email profile
OAUTH_AUTHORIZE_URL, OAUTH_TOKEN_URL, and
OAUTH_USERINFO_URL
must use HTTPS. Tymeslot will refuse to start if any of these URLs use plain HTTP, because they carry security-sensitive material (authorization codes, client credentials, access tokens).
After restarting, an SSO button appears on the login and registration pages.
Below are example configurations for popular identity providers. Replace placeholder values with your actual credentials and domain.
ENABLE_OAUTH_AUTH=true\nOAUTH_CLIENT_ID=tymeslot\nOAUTH_CLIENT_SECRET=your-keycloak-client-secret\nOAUTH_PROVIDER_URL=https://keycloak.example.com\nOAUTH_AUTHORIZE_URL=https://keycloak.example.com/realms/your-realm/protocol/openid-connect/auth\nOAUTH_TOKEN_URL=https://keycloak.example.com/realms/your-realm/protocol/openid-connect/token\nOAUTH_USERINFO_URL=https://keycloak.example.com/realms/your-realm/protocol/openid-connect/userinfo
ENABLE_OAUTH_AUTH=true\nOAUTH_CLIENT_ID=your-authentik-client-id\nOAUTH_CLIENT_SECRET=your-authentik-client-secret\nOAUTH_PROVIDER_URL=https://authentik.example.com\nOAUTH_AUTHORIZE_URL=https://authentik.example.com/application/o/authorize/\nOAUTH_TOKEN_URL=https://authentik.example.com/application/o/token/\nOAUTH_USERINFO_URL=https://authentik.example.com/application/o/userinfo/
ENABLE_OAUTH_AUTH=true\nOAUTH_CLIENT_ID=your-lemonldap-client-id\nOAUTH_CLIENT_SECRET=your-lemonldap-client-secret\nOAUTH_PROVIDER_URL=https://auth.example.com\nOAUTH_AUTHORIZE_URL=https://auth.example.com/oauth2/authorize\nOAUTH_TOKEN_URL=https://auth.example.com/oauth2/token\nOAUTH_USERINFO_URL=https://auth.example.com/oauth2/userinfo
When a user clicks SSO, they are redirected to your identity provider's login page. After authenticating, they are redirected back to Tymeslot and signed in automatically.
On first login, Tymeslot creates a new account using the email and name from the IdP's userinfo response. If the IdP returns email_verified: true, the email is marked as verified immediately. Otherwise, a verification email is sent.
SSO users cannot set or reset a password in Tymeslot — authentication is fully managed by the identity provider. The account settings page shows that the account is managed by SSO and the password change option is disabled.
SSO button does not appear on the login page
Confirm that
ENABLE_OAUTH_AUTH=true
is set and that you have restarted Tymeslot. Environment variables are read at startup only.
"SSO authentication failed" after clicking the button
Check the Tymeslot server logs for the specific error. The most common causes are: incorrect OAUTH_TOKEN_URL, wrong client secret, or a redirect URI mismatch. The callback URI registered in your IdP must be exactly https://yourdomain.com/auth/oauth/callback.
"invalid_user_info" error in server logs
The userinfo endpoint must return a JSON object containing a unique user identifier. Tymeslot requires the standard
sub
claim by default. If your IdP returns
id
or user_id
instead, set
OAUTH_ALLOW_ID_FALLBACK=true
to accept those alternative claims. Without this flag, authentication will fail if
sub
is missing.
Tymeslot fails to start with a configuration error
When ENABLE_OAUTH_AUTH=true, Tymeslot validates that all required environment variables are set at startup. If any are missing, the application will refuse to start and print the list of missing variables. Ensure all of the following are set: OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_PROVIDER_URL, OAUTH_AUTHORIZE_URL, OAUTH_TOKEN_URL, OAUTH_USERINFO_URL.
Yes. All three can be enabled simultaneously. Each appears as a separate button on the login page. Users must continue using their original sign-in method — Tymeslot identifies accounts by email, so the same email address cannot be used across multiple providers. A user who initially signed in via Google cannot later sign in via SSO if they use the same email.
No. SSO users do not have a local password. If they visit the password reset page, they see a message explaining that their account is managed by an external authentication provider. Password management should happen in your identity provider.
Yes. Set
REGISTRATION_ENABLED=false
to hide the email signup form and block email-based registration. SSO login will still work for existing users. Note that new SSO users will also be blocked from creating accounts when registration is disabled — this is a global gate that applies to all registration methods.
Tymeslot reads four claims:
sub
(required unless
OAUTH_ALLOW_ID_FALLBACK
is enabled), email, email_verified, and name. If
email
is missing, the user will be prompted to provide one during account creation.
Not automatically. You must provide each endpoint URL explicitly via environment variables. This gives you full control over which endpoints are used and works with providers that do not publish a discovery document.
Tymeslot stores a single generic SSO provider slot. If you change the IdP (e.g., from Keycloak to Authentik), existing SSO accounts will no longer match because the user identifiers (sub claims) differ between providers. Before switching, remove or reassign the old SSO accounts in the database. New users will be created automatically when they sign in through the new IdP.
Create a Google OAuth app to enable Google Login, Google Calendar sync, and Google Meet room creation.
Register a Microsoft Azure app to enable Microsoft Login, Outlook Calendar sync, and Teams room creation.
Let users sign in with their GitHub account. A two-minute setup with no special API scopes required.