Jitsi and Keycloak SSO integration

Connect a self-hosted Jitsi Meet to Keycloak so only signed-in staff can create rooms, using the token authentication method the Jitsi handbook documents. Guests join from the anonymous domain once a host arrives.

On this page

Jitsi Keycloak SSO: who can create rooms and how the handbook connects them

If your organization runs self-hosted Jitsi Meet and wants only authenticated staff to create rooms while guests join without an account, the supported method is OpenID Connect token authentication with Keycloak as the identity provider, as the Jitsi handbook documents it. Staff sign in once through Keycloak, and Jitsi trusts the signed token that comes back, so the rest of the meeting flow stays the same for everyone else. The roles divide cleanly. Keycloak issues the identity: it holds the users, the realm and the client that Jitsi is registered as, and it signs the tokens. Prosody, the XMPP server inside your Jitsi deployment, verifies each token against the Keycloak certificate endpoint before it grants moderator rights. The wait_for_host module, combined with persistent_lobby in the handbook's Keycloak guide, holds guests in a lobby until an authenticated host has joined, then admits them. Guests never receive credentials; they use the anonymous domain that the handbook pairs with the token domain. This page covers the handbook method only. It does not describe a custom connector or a modified Prosody module, and it does not cover LDAP or Active Directory, which have their own route. Plan to stay close to the handbook's configuration, because the realm and client names, the token settings and the config.js SSO URLs must match one another exactly, and any deviation is where room creation silently fails. The older secure domain method, which relied on a shared username and password for room creation, is marked deprecated for new installations in the handbook. If a colleague suggests it because it looks simpler, treat that as a reason to confirm the current handbook guidance before you build anything. Existing deployments on that method should plan a migration rather than extend it. Before you start, confirm three things with your team: which Keycloak version and database you will run, who owns the Keycloak realm and its client secrets, and whether Jitsi will be served on a domain with a valid certificate, since the handbook notes that HTTPS with a proper certificate is necessary for working audio and video. Those decisions shape the rest of the build sequence.

What a Jitsi and Keycloak SSO integration needs before work starts

Keycloak sign-in for Jitsi room creation depends on six things being in place before any configuration begins: a working Jitsi Meet, a supported host operating system, a trusted certificate, open network ports, a running Keycloak realm and client, and a production database behind Keycloak. Each card below is a go or no-go check. Gaps found here are cheaper to close before the Prosody and config.js changes start.

Working self-hosted Jitsi Meet

Start with a Jitsi Meet deployment that already opens a meeting in a browser before any SSO work begins. The Debian or Ubuntu quick start installs the web server, Prosody, Jicofo and Jitsi Videobridge from packages, while the official Docker setup runs them as separate containers configured through a .env file. Choose one method now, because the token authentication steps differ between them. Confirm that a test room loads and carries audio and video from an internal network before you add identity settings.

Supported Debian and Ubuntu versions

The Debian or Ubuntu quick start supports Debian 12 (Bookworm) or newer and Ubuntu 24.04 or newer, and it requires OpenJDK 17 on the host. Check the operating system you plan to standardize on against that support matrix before you order servers or build images, since an older release sits outside the documented path. Confirm that OpenJDK 17 is the Java runtime in use on the Jitsi host and that no other service on the same machine depends on a different JDK. Record the OS and Java versions in the build record so later upgrades can be planned against them.

Proper domain certificate

The Jitsi handbook states that HTTPS with a proper domain certificate is necessary for working audio and video. Self-signed certificates cause problems, especially with mobile clients, so a meeting that loads in a desktop browser can still fail to carry media on a phone. Confirm which certificate authority your organization uses, that the certificate covers the exact hostname users type, and who renews it. Renewal ownership matters because an expired certificate stops meetings in the same way a missing one does.

Network port requirements

The Debian or Ubuntu quick start needs 80/TCP and 443/TCP open for the web application and 10000/UDP for media traffic. Port 5349/TCP serves as a TCP fallback and 3478/UDP serves STUN, and the handbook lists both as optional. Map these ports against your firewalls, load balancers and any traffic inspection appliances before the change window, since a blocked media path can produce meetings that connect but fail to carry audio or video. Confirm the Docker setup's published ports with your network team, because container networking determines which ports are exposed on the host.

Keycloak realm and client ownership

Keycloak must be running before Jitsi can validate tokens, and the handbook's approach relies on a realm with an OpenID Connect client that Prosody and the web app reference. Keycloak is Apache 2.0 licensed and supports OpenID Connect, OAuth 2.0 and SAML 2.0. Confirm the version you will run against the current Keycloak release notes, since the project plans four minor releases a year and the current release listed on keycloak.org is 26.8.1, published October 13, 2026. Name one owner for the realm and client configuration who is accountable for redirect URIs, signing keys and later changes.

Production database for Keycloak

Keycloak stores realm, user and client data in a relational database, and its default dev-file database is for development only. Supported production options include PostgreSQL 14 to 18, along with MariaDB, MySQL, Microsoft SQL Server, Oracle Database and other engines on the Keycloak database list. Choose a database your organization already backs up and monitors, and confirm the exact version against that list. Plan high availability early, because the supported Keycloak high availability designs require a synchronously replicated database. Decide whether your team lets Keycloak migrate its schema at startup or applies migrations manually.

How Keycloak tokens reach Prosody and the Jitsi room

Token authentication in the Jitsi handbook depends on three parties agreeing on one signed token: the browser, Keycloak and Prosody. The browser starts the flow by sending the user to Keycloak's OpenID Connect authorization endpoint with a PKCE code challenge. The handbook's config.js sets tokenAuthUrl to that realm endpoint, along with tokenLogoutUrl and tokenAuthInline. After the user signs in, Keycloak redirects the browser back to the static sso.html page served by the Jitsi web app, which hands the token back to the Jitsi client. Before you build anything, map this path on a whiteboard so every hop has a named owner.

The signed token is presented when the user creates a room. Prosody, the XMPP server that manages conferences, does not trust the token on its own. It checks the token's signature against keys it fetches from the realm's OpenID Connect certs endpoint, which the handbook configures through cache_keys_url, and it runs with authentication set to "token". Keys are fetched and cached, so the Jitsi server needs a working network route to Keycloak and a certificate chain it trusts. Confirm the exact certs URL, the hostname Prosody resolves and the TLS trust store on the Jitsi host before testing sign-in.

Token-related settings live in different places depending on the install method. On a Debian or Ubuntu install, the handbook installs the jitsi-meet-tokens package, which writes app_id, app_secret and authentication = "token" into the Prosody configuration and enables token_verification on the conference MUC. Review what the package generates instead of assuming the defaults match your realm. On Docker, the handbook's settings sit in the .env file that feeds the containers. Confirm which variables your guide version uses for token mode, and where the cache_keys_url value ends up inside the Prosody container, because the containers run with read-only filesystems.

Each component should have exactly one owner, because most failed sign-ins come from a value that changed on one side only. The identity team owns the Keycloak realm, the client and its redirect URIs, which must match the sso.html path exactly. The Jitsi operators own the Prosody and jitsi-meet-tokens settings, and the Docker operator owns the .env file. Whoever maintains the web deployment owns config.js and sso.html. Write these owners into your runbook, along with the rule that any change to a realm key, client or URL requires a matching change on the Jitsi side.

Test the path before users depend on it. After a test sign-in, inspect the token's issuer and audience and compare them with what Prosody expects. Then try to create a room with no token and with an expired or altered token, and confirm that room creation is refused. Repeat the test after any Keycloak or Jitsi upgrade, because a change to the realm endpoint or key set affects the verification step even when the browser flow still appears to work.

Configuring Jitsi Keycloak SSO in the order the handbook follows

This sequence moves a self-hosted Jitsi Meet from open room creation to a setup where only Keycloak-authenticated hosts can start meetings, while guests wait in a lobby or join from a separate anonymous domain. Each step ends with a check so you can confirm the previous layer works before adding the next.

  1. Create the Keycloak realm and OpenID Connect client

    The Keycloak administrator runs Keycloak (the handbook uses Docker), creates a dedicated realm for Jitsi users, and defines an OpenID Connect client for Jitsi Meet. Enable PKCE for the client and set the valid redirect URI to the sso.html page on your Jitsi web host. Create at least one test user who will act as a meeting host. Check: the test user can sign in through the realm's account login page, and the client appears in the realm's client list with the redirect URI saved exactly as written.

  2. Confirm HTTPS endpoints for the realm

    Before touching Jitsi, verify that the realm's OpenID Connect certificate endpoint and authorization endpoint respond over HTTPS from the Jitsi server and from a browser on the user network. The Jitsi handbook warns that self-signed certificates cause problems, especially with mobile clients, so use a certificate from a domain your organization controls. Check: both endpoints return valid responses with a trusted certificate chain from the Jitsi host, and the certs endpoint returns a JSON key set.

  3. Install token authentication for Prosody

    On a Debian or Ubuntu package install, the administrator installs the jitsi-meet-tokens package, which sets the app ID, app secret and authentication to token in the Prosody configuration and turns on token verification for the conference MUC. On Docker, set the matching token-related values in the .env file and restart the containers. Record the app ID and secret in your secrets store, not in shared documents. Check: after restart, Prosody loads without configuration errors, and a meeting URL opened with a valid token is admitted while the same room opened without a token is refused.

  4. Point cache_keys_url at the realm certs endpoint

    Set cache_keys_url in the Prosody token configuration to the realm's OpenID Connect certs endpoint. This is how Prosody obtains the public keys it uses to verify token signatures, so the value must match the realm you created in step one. Restart Prosody so the setting takes effect. Check: Prosody logs show that it fetched the keys from the realm, and a token signed by Keycloak is accepted while a token with an altered signature is rejected.

  5. Set the SSO URLs in config.js

    Edit the Jitsi web configuration (config.js) to set tokenAuthUrl to the realm's OpenID Connect authorization endpoint, including the PKCE code challenge and the redirect to the sso.html page, along with tokenLogoutUrl and tokenAuthInline as the handbook describes. Clear the browser cache after changing the file, since the web app loads it at page load. Check: selecting the sign-in option in the Jitsi interface sends the browser to the Keycloak login page, and after login the browser returns to Jitsi as the authenticated user.

  6. Enable wait for host with persistent lobby

    Enable the wait_for_host module with persistent_lobby in the Prosody configuration, as the handbook's Keycloak guide does. With this setting, authenticated users create rooms, and guests remain in a lobby until an authenticated host joins. Test with two browsers: one signed in through Keycloak as host and one anonymous guest. Check: the guest sees the lobby screen and cannot enter the conference until the authenticated host joins, after which the guest is admitted.

  7. Confirm the anonymous guest domain is separate

    Verify that guests reach the meeting through the anonymous domain configured for the guest path, not through the authenticated domain. Keep the authenticated domain limited to users who sign in through Keycloak. Review the domain settings against the handbook's secure domain and anonymous domain guidance, and confirm that a guest cannot create a room on the authenticated domain. Check: an anonymous guest joining through the guest path can enter once a host is present, and an attempt to create a room on the authenticated domain without a token is rejected.

Which Keycloak identities and Jitsi roles map to each other

This table compares each Keycloak object and Jitsi or Prosody setting involved in token authentication, and states what each one controls. Read it top to bottom to trace a signed-in user from the Keycloak realm to the authenticated host path, then confirm each claim name against the handbook version you deploy. The main takeaway is that Keycloak decides who signs in and what the token says, while Jitsi decides what a token-holder may do in a room.

Keycloak or Jitsi objectJitsi or Prosody settingWhat it controls
RealmRealm named in the OpenID Connect issuer and certs URLKeeps Jitsi users, clients and keys separate from other applications in the same Keycloak server
OpenID Connect clientClient ID and redirect settings used by the sign-in flow in config.jsDefines which applications may request tokens and where Keycloak returns the user after sign-in
Certs endpointcache_keys_url in the Prosody token configurationSupplies the public keys Prosody uses to verify token signatures; a wrong URL causes every token to fail
Application ID and secretapp_id and app_secret set by the jitsi-meet-tokens packageIdentifies the Jitsi deployment as the expected token audience or issuer; must match the values in the token you issue
Sign-in and sign-out URLstokenAuthUrl and tokenLogoutUrl in config.jsSend room creators to Keycloak to authenticate and return them to Jitsi with a token attached
Authenticated host pathToken-bearing users create rooms under the main domainUsers with a valid token can open a room and become its host, subject to the claims Jitsi reads
Guest pathAnonymous domain and wait_for_host with persistent_lobbyGuests without a token wait in the lobby until an authenticated host joins, then enter the room
Anonymous domainSeparate guest domain in the Jitsi configurationLets unauthenticated participants join only after a host is present, without a Keycloak login

How wait-for-host and the anonymous domain shape guest access

Wait-for-host and the anonymous domain decide who can start a meeting and who has to wait for someone else to start it. The handbook's Keycloak guide enables the wait_for_host module together with persistent_lobby. Under that model, authenticated users who sign in through Keycloak can create rooms, while other participants join from the anonymous domain and wait until a host arrives. Settle this policy before anyone edits the Prosody settings or config.js. The same settings apply to internal staff, partners, patients or customers, so the organization should first decide which groups must be able to start a meeting and which groups only attend.

Guests who open a link before a host is present are the case to test first. The handbook describes these participants as waiting for a host rather than entering an active conference, so the first test is to open a meeting link as an unauthenticated guest with no host in the room and confirm that the guest is held in the waiting state. Then have an authenticated host join and confirm that the waiting guest proceeds. Repeat the test from a browser and from a mobile client, because the reader's experience can differ by client. Record exactly what the guest sees in your build instead of assuming the handbook's wording describes the screen.

Rejoin behavior and the persistent lobby setting need their own tests. Confirm what happens when the host leaves a meeting, whether the room stays open for guests already waiting, and what happens when the host returns through the same link. Then toggle persistent_lobby in a staging environment and repeat the same sequence, so you can see which behavior depends on that setting. Ask your Keycloak and Jitsi administrators to document the exact sequence, including what happens to guests who joined the lobby before the host left. Treat these results as the baseline for user guidance, and retest after each Prosody or Jitsi Meet upgrade.

The main trade-off is between strict host-only room creation and meetings that external participants must start. Host-only creation keeps control with your authenticated staff and limits who can open rooms on your domain. The cost is that an external party cannot begin a meeting unless a staff member is already signed in and present, which affects client calls, patient visits and partner reviews that run outside business hours. Loosening creation rights for external participants solves the scheduling problem but requires a separate identity route or accepting room creation with less control. Make this decision with the business owners and your security and compliance leads, record it in the configuration plan, and only then set wait_for_host and the anonymous domain behavior.

Securing the Keycloak to Jitsi trust path

Single sign-on for Jitsi depends on several components agreeing on who issued a token, where it may be used and how it is protected. The cards below cover the settings that connect Keycloak and Jitsi, and each one should be confirmed against your own threat model before go-live.

Serve every component over HTTPS

Serve the Jitsi web app, Keycloak, and the redirect pages over HTTPS with a certificate issued for a proper domain name. The Jitsi handbook says HTTPS with a proper domain certificate is necessary for working audio and video and warns that self-signed certificates cause problems, especially with mobile clients. Check that the certificate chain is trusted by every browser and client your users run, and that the Keycloak issuer URL in the token configuration uses the same hostname.

Protect the token app secret

The token authentication setup stores an app ID and app secret in the Prosody configuration, which the jitsi-meet-tokens package writes. Keep that secret out of shared or version-controlled configuration files and provide it through your secret management process. Restrict read access to the Prosody configuration files to the service account and administrators who need them, and confirm that backups of those files are protected to the same standard.

Limit the Keycloak client URLs

Configure the Keycloak client with only the redirect and logout URLs that your Jitsi deployment uses, rather than wildcards or the development addresses from a demo. A broad redirect list lets an attacker who controls another page on the same host receive authorization responses. Review the list whenever you add a domain, change the sso.html path or move Jitsi to a new hostname.

Use PKCE as the handbook configures

The handbook's config.js sets the token auth URL with a PKCE code challenge, which binds the authorization code to the browser that started the login. Keep the challenge in the sign-in URL and confirm that the Keycloak client is set up to accept it, so that an intercepted authorization code cannot be exchanged by another party. Test a failed or replayed login during verification to confirm the flow rejects it.

Run Keycloak in production mode

The Keycloak demo setup uses a development database and development configuration that are not suitable for production. Use one of the supported production databases, such as PostgreSQL, and follow the production configuration guide for hostname, proxy and TLS settings. Confirm that administrator accounts, database credentials and the admin console are protected separately from the realm that serves Jitsi users.

Plan Keycloak updates with manual approval

Where Keycloak runs on the Keycloak Operator, the Operator documentation strongly recommends manual approval mode for operator updates to avoid unintended automatic upgrades. Pair this with a review of the upgrading guide before each minor release, since token formats, client settings and database migrations can change. Schedule the update in a test realm that mirrors the Jitsi client configuration before it reaches production.

Know what SSO leaves unchanged

Jitsi encrypts all audio and video on the network with DTLS-SRTP, and the videobridge decrypts packets in memory while routing and does not store them. End-to-end encryption covers audio, video and screen sharing in supported browsers, but not chat or polls. Adding Keycloak SSO controls who can create rooms and does not alter these media protections, so document that boundary for your compliance reviewers and confirm each point against your threat model.

Testing the SSO path before staff depend on it

Before anyone outside the pilot group relies on Keycloak sign-in for Jitsi, run a fixed set of test cases that prove each access rule works in the deployed system, not only in the configuration files. The first case is the signed-in path: sign in as a user from the Keycloak realm, open the meeting domain and create a room. The room should open with that user as host. Repeat the test with a second authenticated account so you confirm that token claims, not a shared browser session, decide who is the moderator. Next, test the refusal cases, which matter more than the happy path. Attempt room creation with no token at all and confirm the request is refused and the room is not created. Then join as a guest from the anonymous domain while no host is present and confirm the wait-for-host behavior holds the guest in the lobby. Once an authenticated host arrives, confirm the guest is admitted. Record the exact sequence of timestamps and states so the result can be compared after any configuration change.

Test the token boundaries directly. Present a token issued by an expired session or by a realm other than the one Prosody trusts, and confirm the conference is rejected. Check that the cache_keys_url in Prosody points at the expected realm certs endpoint, because a mismatch there can make a valid token fail or an unrelated token pass. Also sign out from Keycloak and then from Jitsi, and confirm the tokenLogoutUrl in config.js sends the browser where you intend. Confirm with your own identity team how long a Keycloak session stays valid after sign-out, since that window is set in Keycloak, not in Jitsi. Run the same cases from the mobile clients your handbook covers and from at least one browser that your staff use. Certificate problems tend to appear first on mobile, so use a certificate chain that matches production and do not substitute a self-signed certificate for the test. If a mobile client fails while desktop browsers pass, treat that as a blocking finding for the SSO path rather than a client quirk.

Keep the evidence in a form an auditor or internal reviewer can follow. Store the test cases with their preconditions, expected results, actual results, tester and date. Keep the Prosody log lines and web server access and error logs covering each test window, and note which log entries correspond to which case. Record the versions of the Keycloak realm and client settings, the Prosody token configuration, the config.js SSO settings and the Jitsi package or container image used. Confirm the exact Keycloak and Jitsi versions with your own environment, because the release numbers you test against must match the ones you deploy. Finally, decide who signs off. The platform owner should own the configuration evidence, the identity team should own the realm and session results, and a security reviewer should confirm that the refusal cases were executed and not assumed. Re-run the full set after upgrades to Keycloak, Jitsi or the web server, and after any change to realm keys or client secrets.

Why Jitsi Keycloak SSO logins fail and how to fix them

This table maps common Jitsi and Keycloak SSO failures to their likely causes and a fix you can verify. Start from the symptom you see, check the cause against your Prosody, config.js and Keycloak client settings, then apply the fix and retest with both a signed-in account and a guest. Most failures trace back to values that do not match between Prosody, config.js and the Keycloak client, so compare those first.

SymptomLikely causeFix
Room creation refused for signed-in usersapp_id or app_secret does not match the values the token issuer uses, or token_verification is not enabled on the conference MUCMatch app_id and app_secret to the token settings and confirm token_verification is enabled on the conference MUC. Restart Prosody and retest.
Prosody cannot verify tokenscache_keys_url is unreachable from the Prosody host or points at the wrong Keycloak realmFrom the Prosody host, fetch the realm certs URL and confirm it returns keys. Correct cache_keys_url, then restart Prosody.
Redirect loop or error after Keycloak loginRedirect URI missing from the Keycloak client, the sso.html path is wrong, or PKCE settings in config.js do not match the clientAdd the exact sso.html redirect URI to the client, confirm the path in tokenAuthUrl, and check the PKCE code challenge settings match the client.
Audio or video fails after SSO sign-inSelf-signed or invalid certificate on the Jitsi domain, which the handbook says causes problems, especially on mobile clientsServe the Jitsi domain with a certificate issued for that hostname that clients trust, then test audio and video on desktop and mobile.
Guests stuck in the lobbywait_for_host or persistent_lobby is misconfigured, or no authenticated host has joined the room yetConfirm the wait_for_host module and persistent_lobby are enabled, then join as an authenticated user and check guests enter after the host arrives.
Logout does not clear the sessiontokenLogoutUrl in config.js is missing or points at the wrong Keycloak logout endpointSet tokenLogoutUrl to the realm's OpenID Connect logout endpoint, then sign out and confirm the next room creation asks for sign-in again.
Login breaks after a Keycloak upgradeBreaking changes in the new release, changed client settings, or database schema migrated automatically at startupRead the release notes, export the realm and client settings, and test the upgrade in staging. Consider manual schema migration for large databases.

Questions buyers ask before hiring help for Jitsi Keycloak SSO

What drives the cost and effort of a Jitsi Keycloak SSO project?

The main drivers are how many environments you need, whether Jitsi and Keycloak are already running, and how much certificate and DNS work sits in front of them. Other drivers:

  • Production database setup for Keycloak, since the handbook's examples are for a development-style Docker run and production needs a supported database.
  • Guest policy decisions, such as whether anonymous users can join before a host arrives and how the anonymous domain is set up.
  • Testing scope, from a single room-creation check to tests across browsers, mobile clients and account states.

Ask any provider for a quote that lists each of these items separately, so you can see which ones your environment already covers.

Which parts of Jitsi Keycloak SSO are one-time work and which recur?

Design, initial configuration and testing are one-time work. Upgrades and recurring care are ongoing costs that you should plan for from the start.

One-time:

  • Architecture and realm design, including the client and token settings.
  • Initial Prosody, Jicofo and config.js changes, and the wait-for-host setup.
  • Test plan execution and sign-off.

Recurring:

  • Keycloak and Jitsi upgrades, which follow their own release cycles.
  • Certificate renewal for the Jitsi and Keycloak hostnames.
  • Monitoring of login failures, token errors and service health.

Confirm with any provider whether upgrades and monitoring are included in the fixed scope or sold as a separate retainer.

Can our internal team set up Jitsi Keycloak SSO without outside help?

Yes, a team can do it alone if it has the handbook and owns the right pieces. The work is well documented, but it crosses identity, Prosody configuration and testing.

The team needs:

  • Someone who can own the Keycloak realm and client, including token settings and the OpenID Connect endpoints.
  • Someone who can edit the Prosody configuration and the jitsi-meet-tokens settings, and who can restart and check the services.
  • Someone who can run structured tests with real test users before release.

If one of these roles is missing, outside help usually costs less than learning it during a live rollout.

How long does a Jitsi Keycloak SSO integration take?

The duration depends on scope and readiness, and no fixed figure applies to every environment. A team that already runs Jitsi and Keycloak with working certificates will move faster than one starting from a new install.

Factors that change the timeline:

  • How many environments need the same configuration.
  • Whether DNS records and certificates are ready when the work starts.
  • How quickly your change board approves the production window.

DeployOpen gives a time estimate only in the written scope, after the environment and requirements are reviewed. Ask for the estimate to name its assumptions.

What does DeployOpen need from our team to start the SSO work?

DeployOpen needs named owners, a set of test users and agreed change windows before configuration begins. Missing owners are the most common cause of delay in identity projects.

Named owners for:

  • Identity, who manages the Keycloak realm, users and groups.
  • DNS, who creates and changes the records for the Jitsi and Keycloak hostnames.
  • Certificates, who issues and renews the certificates both services use.

You also need a test user set that covers hosts, guests and disabled accounts, and approved change windows for each environment. These are confirmed in the written scope.

Does DeployOpen issue compliance evidence for Jitsi SSO?

No. DeployOpen prepares the configuration, the documentation and the evidence that an assessor will ask for, but it does not issue audit reports, attestations or certifications.

What we prepare:

  • Documented authentication settings and the reasons for them.
  • Test records showing that room creation requires a verified identity.
  • Configuration records for the realm, client and Prosody settings.

Independent auditors and certification bodies decide whether your controls meet a given standard. Confirm with your assessor which evidence they need before the scope is agreed.

What should we check first if SSO login to Jitsi fails?

Check the token path first: the Keycloak certificate, the realm's certs endpoint and the Prosody token settings. Most failures come from a mismatch in one of these three places.

Typical checks:

  • The cache_keys_url in Prosody points at the correct realm certs endpoint and the service can reach it.
  • The app_id and app_secret in the Prosody token configuration match what the team expects.
  • The tokenAuthUrl and redirect in config.js match the Keycloak client's redirect settings.
  • HTTPS on both hostnames uses a certificate the browsers trust, since self-signed certificates cause problems with audio and video.

Record each setting you change so you can roll back cleanly.

How DeployOpen scopes, delivers and supports Jitsi Keycloak SSO

DeployOpen plans and implements Jitsi Meet and Keycloak together inside infrastructure you control, following the token and OpenID Connect approach documented in the Jitsi handbook. Work is scoped in writing before it starts, built and tested against your own realm and domains, and handed over with documentation and a support option.

How we scope

  • Confirm which Jitsi deployment method applies, Docker or Debian packages, and where each component runs.
  • Define the Keycloak realm, client, roles and which users may create rooms versus join as guests.
  • Record the domains, certificates and anonymous guest domain that the written scope will cover.

How we build

  • Run Keycloak and configure the Prosody token settings, cache keys URL and conference token verification.
  • Set the config.js SSO URLs, PKCE code challenge, redirect path and logout behavior for your domains.
  • Enable wait-for-host with persistent lobby and test room creation, guest joins and sign-out end to end.

How we hand over

  • Deliver written configuration records, realm and client settings, and the list of secrets stored outside source control.
  • Document the test cases used to confirm host-first room creation, guest access and token expiry handling.
  • Walk your operations and identity staff through upgrade steps, including how Keycloak and Jitsi changes are rolled out.

How we support

  • Support is available as a retainer covering Keycloak and Jitsi updates, patching and troubleshooting after handover.
  • Confirm with us during scoping how upgrade testing, staging environments and change approvals will be handled.
  • Ask for the support boundary in writing, including which components, versions and hours the retainer covers.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.