เพื่อจำกัดการสร้างห้อง Jitsi Meet ให้เฉพาะบุคคลที่กำหนด ให้กำหนดให้โฮสต์ต้องได้รับการตรวจสอบสิทธิ์ และออกข้อมูลประจำตัวให้เฉพาะบัญชีที่ได้รับอนุมัติเท่านั้น สำหรับการติดตั้งแบบโฮสต์เองใหม่ Jitsi แนะนำให้ใช้การตรวจสอบสิทธิ์แบบใช้โทเค็น คู่มือนี้ใช้ Keycloak เป็นผู้ให้บริการข้อมูลประจำตัว โดยอนุญาตให้แขกที่ได้รับเชิญเข้าร่วมห้องได้ก็ต่อเมื่อโฮสต์ที่ได้รับอนุมัติเป็นผู้เริ่มต้นห้องแล้วเท่านั้น
1. ตรวจสอบการติดตั้งใช้งานและเลือกบัญชีโฮสต์ของคุณ
คำแนะนำเหล่านี้มุ่งเป้าไปที่การติดตั้ง Jitsi Meet บนระบบโฮสต์เองจากแพ็กเกจ Debian หรือ Ubuntu โดยมีสิทธิ์ผู้ดูแลระบบในการเข้าถึง Prosody, Nginx และการกำหนดค่าเว็บของ Jitsi โดยสมมติว่า Keycloak ได้รับการติดตั้งแล้วหรือสามารถติดตั้งได้อย่างปลอดภัย Prosody คือเซิร์ฟเวอร์รับส่งข้อความ XMPP; JSON Web Token (JWT) คือข้อมูลประจำตัวที่ลงนามแล้วซึ่งใช้เพื่อพิสูจน์ว่าบุคคลนั้นได้เข้าสู่ระบบแล้ว Keycloak คือผู้ให้บริการข้อมูลประจำตัวที่จัดการการเข้าสู่ระบบของผู้ใช้
คู่มือ Jitsi ระบุว่าวิธีการยืนยันตัวตนแบบใช้ชื่อผู้ใช้และรหัสผ่านแบบเก่า (Secure Domain) นั้นล้าสมัยแล้ว และแนะนำให้ใช้การยืนยันตัวตนด้วยโทเค็นแทนในการติดตั้งใหม่คำแนะนำการยืนยัน ตัวตนฉบับปัจจุบัน ได้รับการอัปเดตเมื่อวันที่ 5 ตุลาคม 2026 หากคุณใช้ Docker อยู่แล้ว อย่าคัดลอกเส้นทางแพ็กเกจด้านล่าง: คู่มือการกำหนดค่า Docker อย่างเป็นทางการ ใช้ตัวแปรสภาพแวดล้อม เช่นENABLE_AUTH, ENABLE_GUESTS, AUTH_TYPEและ
ก่อนทำการแก้ไข โปรดจดบันทึกชื่อโฮสต์การประชุมสาธารณะของคุณ ตรวจสอบว่า HTTPS ใช้งานได้ สำรองไฟล์การกำหนดค่าที่คุณวางแผนจะเปลี่ยนแปลง และตัดสินใจว่าบัญชีผู้ใช้ใดบ้างที่สามารถเป็นเจ้าภาพการประชุมได้ ในตัวอย่างนี้ ที่อยู่การประชุมคือjitsi.example.com; โปรดแทนที่ทุกที่ด้วยชื่อโฮสต์จริงของคุณ
2. ให้สิทธิ์การเข้าถึง Keycloak เฉพาะโฮสต์ที่ได้รับอนุมัติเท่านั้น
สร้างอาณาจักรเฉพาะ
ในคอนโซลผู้ดูแลระบบ Keycloak ให้สร้างและเลือกโดเมนชื่อ `<realm>` jitsi-realmโดเมนคือกลุ่มผู้ใช้และการตั้งค่าแอปพลิเคชันที่แยกต่างหาก ปิดใช้งานการลงทะเบียนผู้ใช้แบบเปิด และหลีกเลี่ยงการนำเข้าไดเร็กทอรีบริษัทที่ไม่จำกัดโดยอัตโนมัติ: ภายใต้การกำหนดค่านี้ บัญชีใด ๆ ที่สามารถตรวจสอบสิทธิ์กับโดเมนที่ยอมรับได้ จะสามารถกลายเป็นผู้สร้างการประชุมได้
สร้างโดเมนแยกต่างหากเพื่อควบคุมรายชื่อผู้สร้างการประชุม Jitsi ด้วยตนเอง
ลงทะเบียนไคลเอนต์เว็บ Jitsi
สร้างไคลเอ็นต์ 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
แอปพลิเคชัน Jitsi client ได้รับการลงทะเบียนเป็นแอปพลิเคชัน OpenID Connect ใน Keycloak แล้ว
URI สำหรับการเปลี่ยนเส้นทางจะส่งโฮสต์ที่ลงชื่อเข้าใช้กลับไปยัง Jitsi หลังจากตรวจสอบสิทธิ์เสร็จสิ้น
เพิ่มบุคคลที่ได้รับอนุญาต
ภายใต้หัวข้อ ผู้ใช้ ให้สร้างบัญชีสำหรับโฮสต์ที่ได้รับอนุญาตแต่ละราย จากนั้นตั้งรหัสผ่านของผู้ใช้นั้นภายใต้ ข้อมูลรับรอง ควรใช้บัญชีแยกต่างหากแทนการใช้บัญชีผู้ดูแลระบบร่วมกัน บัญชีที่ไม่ควรสร้างการประชุมอีกต่อไปจะต้องถูกปิดใช้งานหรือปฏิเสธการเข้าถึงโดเมนนี้ หากคุณต้องการจำกัดเฉพาะกลุ่มใดกลุ่มหนึ่งภายในโดเมนที่ใช้ร่วมกัน ให้เพิ่มนโยบายการอนุญาตที่ได้รับการตรวจสอบแยกต่างหาก ขั้นตอนเหล่านี้ไม่ได้บังคับใช้การเป็นสมาชิกกลุ่ม Keycloak โดยอัตโนมัติ
จำกัดรายชื่อโฮสต์ Jitsi ที่มีสิทธิ์ใช้งานเฉพาะบัญชีที่ได้รับการจัดการเป็นรายบุคคลเท่านั้น
ตั้งค่าข้อมูลประจำตัวแยกต่างหากสำหรับโฮสต์ที่ได้รับอนุมัติแต่ละรายการก่อนทดสอบการเข้าสู่ระบบ
3. เชื่อมต่อ Keycloak กับเซิร์ฟเวอร์ Jitsi
พร็อกซีปลายทางโดเมน Keycloak ผ่าน HTTPS
กำหนดค่า Keycloak ด้วยชื่อโฮสต์สาธารณะที่ถูกต้องและส่วนหัวพร็อกซีแบบย้อนกลับที่เชื่อถือได้ จากนั้นกำหนดเส้นทาง/realms/การร้องขอจากชื่อโฮสต์ Jitsi ของคุณไปยังตัวรับฟัง Keycloak ส่วนตัว สำหรับอินสแตนซ์ Keycloak ที่มีให้ใช้งานที่127.0.0.1:18080ให้เพิ่มบล็อกตำแหน่งต่อไปนี้ภายในบล็อกเซิร์ฟเวอร์ HTTPS ของ Jitsi Nginx ที่มีอยู่ ก่อนเส้นทางทั่วไปของ Jitsi:
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 จะแสดงส่วน realm-proxy; ให้คงเส้นทาง Jitsi อื่นๆ ไว้เหมือนเดิม
ต้องใช้โทเค็นใน Prosody
แก้ไข/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"
สำหรับการเข้าถึงของผู้เยี่ยมชม ให้เพิ่มguest.jitsi.example.comโฮสต์เสมือนแยกต่างหากที่มีauthentication = "jitsi-anonymous", c2s_require_encryption = false, และsmacksโมดูล ตามที่แสดงในคำแนะนำของ Jitsi นี่คือโดเมน XMPP ภายใน: อย่าสร้าง DNS สาธารณะหรือใบรับรองแยกต่างหากสำหรับโดเมนนี้ ในรายการโมดูลของโฮสต์หลักที่มีอยู่ ให้เพิ่มpersistent_lobby; ในconference.jitsi.example.comรายการโมดูลส่วนประกอบ MUC ที่มีอยู่ ให้เพิ่มmuc_wait_for_hostMUC คือส่วนประกอบแชทแบบหลายผู้ใช้ที่ดูแลห้องประชุม รักษาโมดูลที่แสดงไว้แล้ว
กำหนดค่าขั้นตอนการเข้าสู่ระบบของเบราว์เซอร์
ในส่วนนี้/etc/jitsi/meet/jitsi.example.com-config.jsให้เพิ่มanonymousdomain: 'guest.jitsi.example.com'เข้าไปในhostsอ็อบเจ็กต์ที่มีอยู่แล้ว เพิ่มการตั้งค่า OIDC ตามที่ระบุในเอกสารของ Jitsi:
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 (Proof Key for Code Exchange) ซึ่งเป็นการป้องกันการอนุญาตผ่านเบราว์เซอร์ คู่มือ Jitsi ระบุไว้อย่างชัดเจนว่าให้ปิดjicofo.confใช้งานการตรวจสอบสิทธิ์ในโหมดโทเค็น และอย่าคัดลอกบล็อกการตรวจสอบสิทธิ์ XMPP Secure Domain ที่ล้าสมัยแล้ว
แบบฟอร์มลงชื่อเข้าใช้ของผู้ใช้แสดงถึงการตรวจสอบข้อมูลประจำตัวก่อนที่โฮสต์ที่ได้รับอนุมัติจะสร้างห้องได้
ตรวจสอบและโหลดบริการใหม่
ตรวจสอบไวยากรณ์ของ Nginx จากนั้นรีสตาร์ทเฉพาะบริการที่ระบุไว้ในคำแนะนำการตรวจสอบสิทธิ์โทเค็นปัจจุบันเท่านั้น ดำเนินการเปลี่ยนแปลงเหล่านี้ในช่วงเวลาการบำรุงรักษาหากเซิร์ฟเวอร์ Jitsi ของคุณกำลังใช้งานอยู่
sudo nginx -t
sudo systemctl restart prosody
sudo systemctl restart nginx
4. หลีกเลี่ยงข้อผิดพลาดเกี่ยวกับการอนุญาตและการเข้าสู่ระบบเหล่านี้
- ทุกคนยังสามารถสร้างห้องสนทนาได้:โปรดยืนยันว่าโฮสต์หลักของ Prosody ได้รับการยืนยันตัวตนด้วยโทเค็นแล้ว โทเค็นว่างเปล่าจะไม่ได้รับอนุญาต และโฮสต์ผู้ร่วมสนทนาต้องแยกต่างหาก ทดสอบในเซสชันเบราว์เซอร์ที่สะอาด ไม่ใช่เซสชันที่ยังคงมีการลงชื่อเข้าใช้ที่ถูกต้องอยู่
- ผู้ใช้ที่ได้รับอนุญาตไม่สามารถเข้าสู่ระบบได้:โปรดเปรียบเทียบผู้ออกโดเมน Keycloak, ชื่อโฮสต์ HTTPS สาธารณะ, รหัสไคลเอ็นต์, URI การเปลี่ยนเส้นทาง และ Prosody
cache_keys_urlการเปลี่ยนเส้นทางเบราว์เซอร์ที่ล้มเหลวไม่ได้หมายความว่าสิทธิ์ของผู้ใช้ถูกต้อง - แขกจะไม่เข้าห้องโดยตรง:ตรวจสอบโดเมนที่ไม่ระบุตัวตนทั้งใน Prosody และ Jitsi
config.jsรวมถึงโมดูล wait-for-host ด้วย สถานะล็อบบี้หรือสถานะรอแขกนั้นแตกต่างจากความล้มเหลวในการตรวจสอบสิทธิ์
5. ตรวจสอบว่าใครสามารถสร้างการประชุมใหม่ได้บ้าง
เปิด URL ห้องประชุมที่ไม่เคยใช้งานมาก่อนในหน้าต่างเบราว์เซอร์แบบส่วนตัวโดยไม่ต้องลงชื่อเข้าใช้ ผู้เข้าร่วมที่เป็นแขกไม่ควรสามารถเริ่มการประชุมในฐานะโฮสต์คนแรกได้ จากนั้น ลงชื่อเข้าใช้ในฐานะผู้ใช้ Keycloak ที่ได้รับการอนุมัติและสร้างห้องประชุมนั้น แขกที่ได้รับเชิญควรจะสามารถเข้าร่วมได้หากคุณเปิดใช้งานโดเมนสำหรับแขก สุดท้าย ลองใช้บัญชีที่ถูกปิดใช้งานหรือไม่ได้รับการอนุมัติ และยืนยันว่าไม่สามารถตรวจสอบสิทธิ์และสร้างห้องประชุมใหม่ได้
หลังจากผ่านการตรวจสอบการเข้าสู่ระบบแล้ว โฮสต์ที่ได้รับการยืนยันตัวตนจะป้อนชื่อห้องเพื่อเริ่มการประชุม
หากการทดสอบใดล้มเหลว ให้ตรวจสอบsudo journalctl -u prosody -u nginx --since "10 minutes ago"ควบคู่ไปกับเหตุการณ์การตรวจสอบสิทธิ์ของ Keycloak โดยไม่ต้องเผยแพร่โทเค็นหรือรหัสผ่านจากบันทึก การแก้ไขจะได้รับการยืนยันก็ต่อเมื่อบัญชีที่ได้รับอนุมัติสามารถสร้างห้องใหม่ได้ และผู้ใช้ที่ไม่ได้รับการตรวจสอบสิทธิ์ไม่สามารถทำได้