允許已批准的使用者使用 Keycloak 登入建立 Jitsi 會議室

為了限制只有特定人員才能建立 Jitsi Meet 會議室,請要求主持人必須經過身份驗證,並且僅向已批准的帳戶發放憑證。對於新的自架安裝,Jitsi 現在建議使用基於令牌的身份驗證;本指南使用 Keycloak 作為身份提供程序,並允許受邀嘉賓僅在已批准的主持人創建會議室後才能加入。

1. 檢查部署情況並選擇您的主機帳戶

本指南針對使用 Debian 或 Ubuntu 軟體包自行部署的 Jitsi Meet,並要求使用者擁有對 Prosody、Nginx 和 Jitsi Web 配置的管理員權限。指南假設 Keycloak 已安裝或可安全部署。 Prosody 是 XMPP 訊息伺服器;JSON Web Token (JWT) 是一種簽章憑證,用於證明使用者已通過身份驗證。 Keycloak 是一個身分識別提供程序,用於處理使用者登入。

Jitsi 手冊已將舊的使用者名稱和密碼安全性網域設定方法標記為已棄用,並建議新安裝的使用者使用令牌認證。其目前的認證說明已於 2026 年 10 月 5 日更新。如果您已在使用 Docker,請勿複製以下軟體包路徑:官方Docker 配置指南ENABLE_AUTH使用諸如` docker-compose up`、 ENABLE_GUESTS`docker-compose up` 和`docker-compose up`之類的環境變數AUTH_TYPE。

在編輯之前,請記下您的公開會議主機名,確認 HTTPS 連線正常,備份您計劃修改的設定文件,並確定哪些指定帳戶可以主持會議。在本例中,會議地址為 [此處填寫會議地址] jitsi.example.com;請將其替換為您實際的會議主機名稱。

2. 僅向 Keycloak 中已核准的主機授予存取權限

創建一個專用領域

在 Keycloak 管理控制台中,建立並選擇一個名為 `<realm_name>` 的網域jitsi-realm。網域是使用者和應用程式設定的獨立集合。停用開放使用者註冊,並避免自動匯入不受限制的公司目錄:在此配置下,任何能夠透過身分驗證存取已接受網域的帳戶都可以成為會議建立者。

Keycloak create-realm 表單,領域名稱為 jitsi-realm。
建立一個單獨的領域,以便將 Jitsi 會議創建者清單置於您的控制之下。

註冊 Jitsi Web 用戶端

建立一個名為 `<client_name>` 的 OpenID Connect 用戶端jitsi。 OpenID Connect (OIDC) 是 Keycloak 用於向 Jitsi 傳回身分識別資訊的登入協定。請依照 Jitsi 官方範例,輸入以下回呼值,並調整主機名稱:

  • 有效的重定向 URI:https://jitsi.example.com/static/sso.html
  • 有效的登出後重定向 URI:https://jitsi.example.com/static/logout.html
  • 網址原文:https://jitsi.example.com
Keycloak客戶端建立欄位用於識別Jitsi OpenID Connect客戶端。
Jitsi 用戶端已在 Keycloak 中註冊為 OpenID Connect 應用程式。
Keycloak客戶端設定中顯示了Jitsi單一登入重定向URL。
重定向 URI 在驗證後將已登入的主機傳回 Jitsi。

新增獲準人員

在「使用者」下,為每個授權主機建立一個帳戶,然後在「憑證」下設定該使用者的密碼。請使用單獨的帳戶,而不是共用一個管理員登入。不再需要建立會議的帳戶必須被停用,或被拒絕存取此網域。如果您只需要對共用網域中的一個群組進行限制,請新增一個單獨驗證的授權策略;此處的步驟不會自動強制執行 Keycloak 群組成員關係。

Keycloak 使用者列表,包含單獨核准的主機帳戶。
將符合條件的 Jitsi 主機清單限制為獨立管理的帳戶。
Keycloak 使用者憑證區域,包含密碼設定操作。
在測試登入之前,請為每個已核准的主機設定單獨的憑證。

3. 將 Keycloak 連接到 Jitsi 伺服器

透過 HTTPS 代理 Keycloak 領域端點

使用正確的公用主機名稱和受信任的反向代理程式標頭來設定 Keycloak,然後將/realms/來自 Jitsi 主機名稱的請求路由到其私人 Keycloak 監聽器。對於位於 `<Jitsi 主機名稱>` 的 Keycloak 實例127.0.0.1:18080,請在現有的 Jitsi Nginx HTTPS 伺服器設定區塊中,在通用 Jitsi 路由之前,新增下列 location 設定區塊:

location ~ ^/realms/(.*) {
    proxy_pass http://127.0.0.1:18080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

這假設 Keycloak 可以透過該連接埠在本地存取;請根據您的部署情況替換上游連接埠。請勿不必要地揭露 Keycloak 的管理控制台或後端連接埠。有關生產環境代理程式和主機名稱控制,請參閱Keycloak 的反向代理文件。

帶有 Nginx location 區塊的文字編輯器,將 realm 請求轉送到 Keycloak。
Nginx 編輯器會顯示 realm-proxy 部分;請保持其他 Jitsi 路由不變。

韻律學中需要標記

編輯/etc/prosody/conf.avail/jitsi.example.com.cfg.lua。新增發行者和受眾設置,然後更新現有主配置VirtualHost以使用令牌認證。將這些行與其其他設定合併-不要建立該主機區塊的第二個副本:

asap_accepted_issuers = { "https://jitsi.example.com/realms/jitsi-realm" }
asap_accepted_audiences = { "account" }
asap_require_room_claim = false

VirtualHost "jitsi.example.com"
    authentication = "token"
    app_id = "jitsi"
    allow_empty_token = false
    cache_keys_url = "https://jitsi.example.com/realms/jitsi-realm/protocol/openid-connect/certs"

若要實現訪客訪問,請按照 Jitsi 說明,新增一個單獨的guest.jitsi.example.com虛擬主機,並配置 `<host>` authentication = "jitsi-anonymous"、 `<module> c2s_require_encryption = false` 和 ` <module>` 模組。這是一個內部 XMPP 網域:請勿為其建立公共 DNS 或單獨的憑證。在現有主主機的模組清單中,加入 `<module> `;在現有MUC 元件的模組清單中,加入 ` <module>`。 MUC 是用於維護會議室的多用戶聊天元件。請保留已列出的模組。smackspersistent_lobbyconference.jitsi.example.commuc_wait_for_host

配置瀏覽器登入流程

在現有物件中新增以下內容。/etc/jitsi/meet/jitsi.example.com-config.js追加Jitsi 文件中記錄的 OIDC 設定:anonymousdomain: 'guest.jitsi.example.com'hosts

config.tokenAuthUrl='https://'+ config.hosts.domain + '/realms/jitsi-realm/protocol/openid-connect/auth?client_id=jitsi&response_type=code&scope=openid&state={state}&redirect_uri=https://'+ config.hosts.domain + '/static/sso.html&code_challenge={code_challenge}&code_challenge_method=S256';
config.tokenLogoutUrl='https://'+ config.hosts.domain + '/realms/jitsi-realm/protocol/openid-connect/logout?post_logout_redirect_uri=https://'+ config.hosts.domain + '/static/logout.html';
config.tokenAuthInline=true;
config.sso={ ssoService: config.hosts.domain, tokenService: config.hosts.domain + '/realms/jitsi-realm/protocol/openid-connect', clientId: "jitsi" };

這些值實作了基於 PKCE(程式碼交換證明金鑰)的授權碼登入流程,PKCE 是一種用於保護基於瀏覽器的授權機制。 Jitsi 手冊明確指出,jicofo.conf在令牌模式下應停用身份驗證;請勿複製其已棄用的 XMPP 安全域驗證碼區塊。

Jitsi Meet 登入表單,包含使用者名稱、密碼欄位和「登入」按鈕。
使用者登入表單代表在已批准的主持人建立房間之前進行的身份驗證檢查。

驗證並重新載入服務

檢查 Nginx 語法,然後僅重新啟動目前令牌認證說明中列出的服務。如果您的 Jitsi 伺服器正在使用中,請在維護視窗期間執行這些變更:

sudo nginx -t
sudo systemctl restart prosody
sudo systemctl restart nginx

4. 避免這些權限和登入錯誤

  • 所有人仍然可以創建房間:請確認主 Prosody 主持人已通過令牌認證,不允許使用空令牌,並且訪客主持人必須單獨設置。請在乾淨的瀏覽器會話中進行測試,不要在仍有有效登入資訊的會話中進行測試。
  • 已獲授權的使用者無法登入:請比較 Keycloak 網域頒發者、公用 HTTPS 主機名稱、用戶端 ID、重新導向 URI 和 Prosody cache_keys_url。瀏覽器重定向失敗並不能證明使用者權限正確。
  • 訪客從未進入過房間:請檢查 Prosody 和 Jitsi 中的匿名域config.js,以及等待主機模組。大廳或訪客等待狀態與身分驗證失敗不同。

5. 確認誰可以建立新會議

在不登入的情況下,使用隱私瀏覽視窗開啟一個從未使用過的會議室 URL。訪客應該無法以首位主持人的身份發起會議。接下來,使用已核准的 Keycloak 使用者身分登入並建立該會議室;如果您已啟用訪客網域,受邀訪客應該可以加入會議。最後,嘗試使用一個已停用或未經批准的帳戶,並確認該帳戶無法通過身份驗證並建立新會議室。

Jitsi Meet 會議建立介面,房間名稱為 team-sync,並帶有「建立會議」按鈕。
透過登入驗證後,已認證的主持人輸入房間名稱即可開始會議。

如果任何測試失敗,sudo journalctl -u prosody -u nginx --since "10 minutes ago"請結合 Keycloak 驗證事件進行檢查,但不要從日誌中發布令牌或密碼。只有當已批准的帳戶可以建立新房間而未經身份驗證的使用者無法建立新房間時,才能確認修復成功。

留下評論

使用 Systemd 定時器可靠地執行 ownCloud 後台作業

將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。

透過尋找故障路由來恢復 ownCloud WebDAV 同步

透過 Apache、Nginx 或反向代理程式追蹤 WebDAV 請求,然後使用經過驗證的 PROPFIND 測試確認 ownCloud 同步功能正常。

設定 Nextcloud 的公共 URL,以便它可以存取自身。

透過設定其規範 URL 並從伺服器本身檢查 DNS、HTTPS 和反向代理路由,修復 Nextcloud 缺少出站位址警告的問題。

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

透過本機 Unix 套接字配置 APCu 和 Redis,以實現 Nextcloud 快取和檔案鎖定,並提供目前和舊版 Nextcloud 的步驟。

使用 Systemd 定時器自動執行 Nextcloud Cron

檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。

使用 Redis 清除 Nextcloud 的檔案鎖定警告

啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。

如何才能獲得 Nextcloud A+ 安全評級

如何才能獲得 Nextcloud A+ 安全評級

使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。

啟用 Nextcloud 伺服器端加密,並評估其影響

為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。

將 Elasticsearch 全文搜尋功能新增至 Nextcloud

將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。

為 Nextcloud 已刪除檔案設定可靠的過期策略

為 Nextcloud 已刪除檔案設定可靠的過期策略

配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。