Matrix user verification auth for Prosody for Jitsi Meet widget usage.
Contains two Prosody modules:
Prosody auth for glue between Jitsi widgets utilizing the Jitsi Meet external API and Matrix user verification service to handle verifying a given Matrix user exists and that they are in a room that matches the Jitsi room ID.
Optional. Ensures that only users who have power level equal to state_default
or more
in the room are made owners. Jitsi will not give room ownership to the first joiner
if they don't have the right power level and auto-owner cycling on owners leaving
the conference room is disabled.
Requires mod_auth_matrix_user_verification
to also be enabled to work.
These diagrams explain how the different components fit together around these Prosody modules.
When loading the Jitsi widget, the Jitsi Meet external API should be initialized with the following options:
roomName
: base32 encoded Matrix room ID to check the user is in (without padding)jwt
: a JWT token, example;
{
"context": {
"user": {
"avatar": "https:/gravatar.com/avatar/abc123",
"name": "John Doe"
},
"matrix": {
"token": "DX81zuBbR1Qt7WGnyiIQYdqbDSm2ECnx",
"room_id": "!qwertyasdfgh:matrix.org",
// OPTIONAL
"server_name": "matrix.org"
}
},
"aud": "jitsi",
"iss": "issuer",
"sub": "jitsi.example.com",
"room": "*"
}
For generating the token, note the following:
content.user
will be used for the Jitsi Meet session.matrix.token
is an OpenID token from the Matrix C2S API, see here.matrix.room_id
should be the Matrix room ID we want to check the user is in. When base32 encoded (without padding) it must match the Jitsi room ID.matrix.server_name
(optional) is the server name thematrix.token
relates to. If not given, we assume UVS will be configured for a single server.aud
can be for example "jitsi", should match Prosody token auth issuers/audience if needed.iss
issuer of the token, must matchapp_id
below in Prosody config.sub
should be the Jitsi Meet domain.room
is not used at the moment, a*
works here.
NOTE! The JWT can be signed with any kind of secret string. The backend Prosody module does not verify the signature, we're only interested in passing data through Jitsi to the Prosody module piggybacking on the token auth mechanism.
On the Jitsi Meet domain, you'll need to host a /.well-known/element/jitsi
JSON file containing the following:
{"auth": "openidtoken-jwt"}
An instance of Matrix user verification service needs to be running and configured to point to the same Synapse server that issues the OpenID tokens.
Copy the mod_auth_matrix_user_verification.lua
and (if needed) mod_matrix_power_sync.lua
files to your Prosody plugins folder.
Add the auth to your Jitsi Meet Prosody virtualhost section:
VirtualHost "example.com"
authentication = "matrix_user_verification"
-- Must be set for the auth token to be passed through
-- Must match what is being set as `iss` in the JWT
app_id = "issuer"
-- Base URL to the matrix user verification service (without ending slash)
uvs_base_url = "https://uvs.example.com"
-- (optional) UVS auth token, if authentication enabled
-- Uncomment and set the right token if necessary
--uvs_auth_token = "changeme"
-- (optional) Make Matrix room moderators owners of the Prosody room.
-- Enabling this will mean once a participant, authed using this module,
-- joins a call, their power in the relevant Matrix room will be checked
-- via UVS and if they have more or equal the configured power here,
-- they will be made an owner of the Prosody room.
-- This is disabled by default, uncomment to enable below and ensure
-- you also add the muc module as below.
--uvs_sync_power_levels = true
If you want to sync power levels (ie have uvs_sync_power_levels
above enabled),
you'll also need to add the power level module to your MUC config, for example as follows:
Component "conference.example.com" "muc"
modules_enabled = {
"matrix_power_sync";
}
Apache 2.0