หาก Nextcloud แจ้งว่า “โทเค็นไม่ถูกต้อง” เมื่อเชื่อมต่อกับ ONLYOFFICE Docs ให้ตรวจสอบให้แน่ใจว่ารหัสลับ JWT ของตัวเชื่อมต่อตรงกับรหัสลับที่ Document Server ใช้งานอยู่จริง ใน ONLYOFFICE Docs เวอร์ชัน 7.2 ขึ้นไป การตรวจสอบ JWT จะเปิดใช้งานโดยค่าเริ่มต้น และรหัสลับจะถูกสร้างขึ้นโดยอัตโนมัติ การเปลี่ยนแปลงเฉพาะการตั้งค่า Nextcloud หรือการแก้ไขไฟล์การกำหนดค่าที่สร้างขึ้นในคอนเทนเนอร์ Docker อาจทำให้ทั้งสองฝั่งไม่ตรงกันได้
เปิดใช้งาน JWT ไว้ก่อน ขั้นแรกให้ระบุรหัสลับที่ใช้งานอยู่และประเภทการปรับใช้ อัปเดตการกำหนดค่าให้ถูกต้อง จากนั้นเรียกใช้การตรวจสอบการเชื่อมต่อของตัวเชื่อมต่อ การตรวจสอบควรรายงานว่าเชื่อมต่อสำเร็จ การเปิดโปรแกรมแก้ไขในเบราว์เซอร์เพียงอย่างเดียวไม่ได้พิสูจน์ว่าการดาวน์โหลดเอกสารและการเรียกกลับทำงานได้
ข้อผิดพลาดนี้บอกอะไรคุณบ้าง?
JWT (JSON Web Token) คือโทเค็นที่ลงนามแล้วซึ่งใช้ในการตรวจสอบว่าคำขอระหว่าง Nextcloud และ ONLYOFFICE Docs นั้นเชื่อถือได้หรือไม่ ตัวเชื่อมต่อจะลงนามคำขอด้วยรหัสลับที่กำหนดค่าไว้ ในขณะที่เซิร์ฟเวอร์เอกสารจะตรวจสอบความถูกต้องโดยใช้รหัสลับที่กำหนดค่าไว้เช่นกัน หากรหัสลับที่ใช้ในการลงนามแตกต่างกัน ลายเซ็นโทเค็นจะไม่สามารถตรวจสอบความถูกต้องได้ และคำขอจะถูกปฏิเสธ
สาเหตุที่พบบ่อยที่สุดคือ รหัสลับที่คัดลอกมาจากระบบเก่า รหัสลับที่สร้างขึ้นโดยอัตโนมัติซึ่งไม่เคยป้อนใน Nextcloud ตัวแปรสภาพแวดล้อม Docker ที่เปลี่ยนแปลงไปแต่ไม่ได้นำไปใช้เมื่อสร้างคอนเทนเนอร์ใหม่ หรือค่ารหัสลับที่ไม่สอดคล้องกันในการกำหนดค่าเซิร์ฟเวอร์เอกสาร นอกจากนี้ ส่วนหัว JWT แบบกำหนดเองก็อาจทำให้เกิดความไม่ตรงกันได้ หากตัวเชื่อมต่อและเซิร์ฟเวอร์เอกสารไม่ได้ใช้ชื่อส่วนหัวเดียวกัน
บทความนี้กล่าวถึงปัญหาความไม่ตรงกันของ JWT หากข้อผิดพลาดระบุว่าไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้ ใบรับรองไม่ถูกต้อง หรือไม่สามารถดาวน์โหลดเอกสารได้ โปรดตรวจสอบที่อยู่เซิร์ฟเวอร์ ใบรับรอง TLS และเส้นทางเครือข่ายจาก Nextcloud ไปยังเซิร์ฟเวอร์เอกสารแยกต่างหาก การแก้ไข JWT จะไม่สามารถแก้ไขปัญหาเหล่านั้นได้
1. ค้นหารหัสลับของเซิร์ฟเวอร์เอกสารที่ใช้งานอยู่
ใช้การตั้งค่าที่มาจากเซิร์ฟเวอร์เอกสารที่กำลังทำงานอยู่ อย่าคิดว่ารหัสลับที่จำได้จากคอนเทนเนอร์หรือเซิร์ฟเวอร์ก่อนหน้านี้ยังคงใช้งานได้อยู่
- ลินุกซ์:ตรวจสอบ
/etc/onlyoffice/documentserver/local.json.
- Windows:ตรวจ
%ProgramFiles%\ONLYOFFICE\DocumentServer\config\local.jsonสอบ
- Docker:อ่านรหัสลับจากคอนเทนเนอร์ที่กำลังทำงานอยู่ อิมเมจอย่างเป็นทางการยังรองรับการอ่านรหัสลับเซสชันด้วยคำสั่งนี้:
sudo docker exec <containerID> /var/www/onlyoffice/documentserver/npm/json -f /etc/onlyoffice/documentserver/local.json 'services.CoAuthoring.secret.session.string'
แทนที่<containerID>ด้วยชื่อหรือรหัสคอนเทนเนอร์จริง โปรดถือว่าค่าที่ส่งกลับมาเป็นข้อมูลรับรอง: ห้ามคัดลอกไปวางในฟอรัมสนับสนุน ภาพหน้าจอ หรือบันทึกสาธารณะ
ในlocal.jsonไฟล์ ให้เปรียบเทียบค่าในservices.CoAuthoring.secret.inbox.string, services.CoAuthoring.secret.outbox.string, และservices.CoAuthoring.secret.session.stringค่าทั้งหมดควรเหมือนกันสำหรับการตั้งค่ามาตรฐานนี้ นอกจากนี้ โปรดตรวจสอบให้แน่ใจว่าได้เปิดใช้งานการตรวจสอบโทเค็นสำหรับเบราว์เซอร์ กล่องขาเข้าคำขอ และกล่องขาออกคำขอแล้ว เอกสารเวอร์ชันก่อน 7.2 กำหนดให้ต้องเปิดใช้งานการตรวจสอบโทเค็นอย่างชัดเจน ส่วนเวอร์ชันที่ใหม่กว่าจะเปิดใช้งานโดยค่าเริ่มต้น
2. อัปเดตตัวเชื่อมต่อ ONLYOFFICE ของ Nextcloud
- ลงชื่อเข้าใช้ในฐานะผู้ดูแลระบบ Nextcloud แล้วเปิดการตั้งค่า > การจัดการ > ONLYOFFICE
- ในการตั้งค่าเซิร์ฟเวอร์ ให้ป้อนรหัสลับที่พบใน Document Server ที่กำลังทำงานอยู่ลงใน ช่อง รหัสลับหลีกเลี่ยงการเว้นวรรคหน้าหรือหลัง และอย่าใส่เครื่องหมายอัญประกาศเว้นแต่จะเป็นส่วนหนึ่งของรหัสลับนั้นเอง
- ตรวจสอบการตั้งค่าส่วนหัว JWT หากการใช้งานของคุณใช้ส่วนหัวแบบกำหนดเอง
jwt_headerการตั้งค่าของตัวเชื่อมต่อและส่วนหัวโทเค็นที่กำหนดค่าไว้ในเซิร์ฟเวอร์เอกสารต้องตรงกัน หากคุณไม่ได้ปรับแต่งส่วนหัวโดยเจตนา อย่าเปลี่ยนแปลงส่วนหัวนั้นในระหว่างการแก้ไขนี้
- บันทึกการตั้งค่า และอย่าลืมเปิดใช้งาน JWT ทั้งสองฝั่ง
นอกจากนี้ ยังสามารถเปลี่ยนแปลงการตั้งค่าตัวเชื่อมต่อที่ระบุไว้ในเอกสารได้โดยใช้occคำสั่งของ Nextcloud จากไดเร็กทอรีการติดตั้ง Nextcloud:
sudo -u www-data php occ config:app:set onlyoffice jwt_secret --value='YOUR_SECRET'
แทนที่YOUR_SECRETด้วยค่าจริง การใช้เครื่องหมายอัญประกาศในเชลล์ช่วยรักษาเครื่องหมายวรรคตอน แต่ข้อมูลลับที่มีเครื่องหมายอัญประกาศเดี่ยวจำเป็นต้องใช้วิธีที่ปลอดภัยกว่าการแทรกเข้าไปในบรรทัดคำสั่งโดยตรง นอกจากนี้ อาร์กิวเมนต์ในบรรทัดคำสั่งอาจมองเห็นได้โดยการตรวจสอบกระบวนการที่มีสิทธิ์พิเศษหรือประวัติเชลล์ ควรใช้ส่วนติดต่อผู้ดูแลระบบหากทำได้ จากนั้นตรวจสอบค่าที่จัดเก็บไว้โดยไม่เปิดเผยค่าดังกล่าว
3. ปรับใช้การเปลี่ยนแปลงให้ถูกต้องตามวิธีการติดตั้งของคุณ
Docker หรือ Docker Compose
สำหรับการใช้งาน Docker ให้กำหนดค่า JWT ผ่านสภาพแวดล้อมของคอนเทนเนอร์ แทนที่จะแก้ไข JWT ที่สร้างขึ้นโดยอัตโนมัติด้วยตนเองlocal.jsonตั้งค่ารหัสลับเดียวกันในคำจำกัดความของบริการ Document Server:
environment:
- JWT_ENABLED=true
- JWT_SECRET=YOUR_SECRET
หลังจากแก้ไขไฟล์ Compose แล้ว ให้สร้างคอนเทนเนอร์ Document Server ขึ้นใหม่เพื่อให้การตั้งค่ามีผล ตัวอย่างเช่น จากไดเร็กทอรีที่มีไฟล์ Compose อยู่:
docker compose up -d --force-recreate <documentserver-service>
แทนที่ชื่อบริการด้วยชื่อจากไฟล์ Compose ของคุณเอง การรีสตาร์ทแบบธรรมดาจะไม่นำค่าสภาพแวดล้อมที่เปลี่ยนแปลงไปใช้กับคอนเทนเนอร์ที่มีอยู่ หากคุณใช้ ให้docker runสร้างคอนเทนเนอร์ใหม่ด้วยค่าที่อัปเดตแล้ว โดยJWT_ENABLEDคงJWT_SECRETพอร์ต วอลุ่ม และตัวเลือกอื่นๆ ที่จำเป็นไว้ อย่าลบคอนเทนเนอร์ที่ใช้งานจริงจนกว่าคุณจะยืนยันการตั้งค่าเหล่านั้นและการเมานต์ข้อมูลถาวรแล้ว
เมื่อคอนเทนเนอร์เริ่มต้นทำงาน ให้อ่านค่าความลับที่ใช้งานอยู่ (active secret) อีกครั้งด้วยคำสั่งข้างต้น และตรวจสอบให้แน่ใจว่าค่าดังกล่าวยังตรงกับ Nextcloud หลีกเลี่ยงการวางความลับสำหรับการใช้งานจริงไว้ในไฟล์ Compose หรือที่เก็บซอร์สโค้ดที่แชร์ต่อสาธารณะ
แพ็คเกจ Linux หรือการติดตั้ง Windows
หากคุณตั้งค่ารหัสลับแบบกำหนดเองในlocal.jsonONLYOFFICE โปรดตรวจสอบให้แน่ใจว่าฟิลด์รหัสลับทั้งสามตรงกัน และค่าการตรวจสอบโทเค็นที่จำเป็นเปิดใช้งานอยู่ บันทึกการเปลี่ยนแปลงโดยการรีสตาร์ทบริการ Document Server ที่เกี่ยวข้อง คำแนะนำ ONLYOFFICE ปัจจุบันระบุds-converter, ds-docservice, และds-metricsบน Linux; การติดตั้งที่จัดการโดยผู้ดูแลระบบบริการอื่นอาจต้องใช้วิธีการรีสตาร์ทที่เหมาะสมกับการตั้งค่าดังกล่าว บน Windows ให้รีสตาร์ทบริการ ONLYOFFICE หลังจากบันทึกการกำหนดค่าแล้ว
ความไม่ตรงกันที่ปรากฏขึ้นอีกครั้งหลังจากการรีสตาร์ท มักหมายความว่าการกำหนดค่าหรือสภาพแวดล้อมการปรับใช้ที่สร้างขึ้นโดยอัตโนมัติกำลังเขียนทับไฟล์ที่แก้ไข สำหรับ Docker ให้ย้ายการแก้ไขไปยังตัวแปรสภาพแวดล้อมและสร้างคอนเทนเนอร์ใหม่ สำหรับการปรับใช้แบบแพ็กเกจ ให้ตรวจสอบการกำหนดค่าที่ใช้งานอยู่และการกำหนดค่าการเริ่มต้นของบริการก่อนที่จะเปลี่ยนแปลงการตั้งค่าเพิ่มเติม
ตรวจสอบการซ่อมแซม
- ในไดเร็กทอรีการติดตั้ง Nextcloud ให้ทำการตรวจสอบตัวเชื่อมต่ออย่างเป็นทางการ:
sudo -u www-data php occ onlyoffice:documentserver --check
หากบัญชีเว็บเซิร์ฟเวอร์ไม่เหมาะสมกับการติดตั้งของคุณ ให้ใช้www-dataบัญชีนั้น คำสั่งควรรายงานว่าเชื่อมต่อสำเร็จ หากยังคงรายงานว่าโทเค็นไม่ถูกต้อง ให้ตรวจสอบอีกครั้งว่ารหัสลับที่ใช้งานอยู่ของ Document Server ตรงกับ Nextcloud อย่างถูกต้อง และส่วนหัว JWT แบบกำหนดเองก็ตรงกันด้วย
- เปิดเอกสารทดสอบขนาดเล็กจาก Nextcloud ด้วย ONLYOFFICE ตรวจสอบว่าโปรแกรมแก้ไขโหลดขึ้นมา ทำการเปลี่ยนแปลงเล็กน้อย บันทึก ปิดโปรแกรมแก้ไข แล้วเปิดไฟล์อีกครั้งเพื่อตรวจสอบว่าการเปลี่ยนแปลงได้รับการบันทึกแล้ว
- หากการตรวจสอบรายงานข้อผิดพลาดเกี่ยวกับเครือข่ายหรือใบรับรอง ให้หยุดการเปลี่ยนแปลงค่า JWT ตรวจสอบว่า Nextcloud สามารถเข้าถึงที่อยู่ของ Document Server และ Document Server สามารถเข้าถึงที่อยู่ callback ของ Nextcloud ได้ ใช้ใบรับรอง TLS ที่เชื่อถือได้หากเป็นไปได้ การปิดใช้งานการตรวจสอบใบรับรองเป็นวิธีแก้ปัญหาที่ไม่ปลอดภัยและไม่ได้แก้ไขปัญหาการตรวจสอบโทเค็น
การตรวจสอบเหล่านี้เป็นการยืนยันว่าการเชื่อมต่อที่กำหนดค่าไว้และเส้นทางการบันทึกพื้นฐานใช้งานได้ แต่ไม่ได้พิสูจน์ว่าเส้นทางพร็อกซีแบบย้อนกลับ การกำหนดค่าพื้นที่จัดเก็บข้อมูลภายนอก หรือโครงสร้างแบบหลายเซิร์ฟเวอร์ทุกเส้นทางนั้นถูกต้อง หากการใช้งานของคุณใช้เส้นทางเหล่านั้น ควรทดสอบเส้นทางเหล่านั้นแยกต่างหาก
ข้อมูลอ้างอิงอย่างเป็นทางการ
รายละเอียดการกำหนดค่าได้รับการตรวจสอบกับเอกสารอย่างเป็นทางการของ ONLYOFFICE และคลังเก็บตัวเชื่อมต่อเมื่อวันที่ 9 ตุลาคม 2569 ป้ายกำกับ UI และการจัดการบริการอาจแตกต่างกันไปตามตัวเชื่อมต่อ ระบบปฏิบัติการ และวิธีการติดตั้งใช้งาน