ฉันกำลังสร้าง RESTful API ที่ใช้โทเค็น JWT สำหรับการรับรองความถูกต้องของผู้ใช้ (ที่ออกโดยlogin
ปลายทางและส่งในส่วนหัวทั้งหมดหลังจากนั้น) และโทเค็นต้องได้รับการรีเฟรชหลังจากระยะเวลาคงที่ (เรียกrenew
จุดสิ้นสุด )
เป็นไปได้ว่าเซสชัน API ของผู้ใช้จะไม่ถูกต้องก่อนที่โทเค็นจะหมดอายุดังนั้นจุดสิ้นสุดทั้งหมดของฉันเริ่มต้นด้วยการตรวจสอบว่า: 1) โทเค็นยังคงถูกต้องและ 2) เซสชันของผู้ใช้ยังคงถูกต้อง ไม่มีวิธีในการทำให้โทเค็นเป็นโมฆะโดยตรงเนื่องจากไคลเอนต์เก็บไว้ในเครื่อง
ดังนั้นจุดสิ้นสุดของฉันทั้งหมดต้องส่งสัญญาณให้ลูกค้าทราบถึงสองเงื่อนไขที่เป็นไปได้: 1) ถึงเวลาต่ออายุโทเค็นหรือ 2) เซสชันนั้นไม่ถูกต้องและพวกเขาไม่ได้รับอนุญาตให้เข้าถึงระบบอีกต่อไป ฉันสามารถนึกถึงทางเลือกสองทางสำหรับจุดสิ้นสุดของฉันในการส่งสัญญาณลูกค้าเมื่อเกิดหนึ่งในสองเงื่อนไข (สมมติว่าลูกค้าสามารถปรับให้เข้ากับตัวเลือกใดตัวเลือกหนึ่ง):
- ส่งคืนรหัส http 401 (ไม่ได้รับอนุญาต) หากเซสชันไม่ถูกต้องหรือส่งคืนรหัส 412 (เงื่อนไขเบื้องต้นล้มเหลว) เมื่อโทเค็นหมดอายุและถึงเวลาเรียก
renew
จุดสิ้นสุดซึ่งจะส่งคืนรหัส 200 (ok) - ส่งคืน 401 สำหรับการส่งสัญญาณว่าเซสชันไม่ถูกต้องหรือโทเค็นหมดอายุแล้ว ในกรณีนี้ลูกค้าจะโทรหา
renew
ปลายทางทันทีถ้ามันคืน 200 โทเค็นจะถูกรีเฟรช แต่ถ้าrenew
กลับ 401 ก็หมายความว่าไคลเอนต์ออกจากระบบ
คุณจะแนะนำทางเลือกใดจากสองข้อด้านบน อันไหนจะเป็นมาตรฐานมากขึ้นเข้าใจง่ายและ / หรือสงบมากขึ้น? หรือคุณจะแนะนำวิธีการอื่นโดยสิ้นเชิง? คุณเห็นปัญหาที่ชัดเจนหรือความเสี่ยงด้านความปลอดภัยที่มีตัวเลือกอย่างใดอย่างหนึ่ง? คะแนนพิเศษหากคำตอบของคุณมีการอ้างอิงภายนอกที่สนับสนุนความคิดเห็นของคุณ
UPDATE
พวกโปรดมุ่งเน้นไปที่คำถามจริง - ตัวเลือกรหัส http สองตัวใดในการส่งสัญญาณการตรวจสอบความถูกต้องของการต่ออายุ / เซสชันนั้นดีที่สุด? ไม่ต้องสนใจความจริงที่ว่าระบบของฉันใช้ JWT และเซสชันฝั่งเซิร์ฟเวอร์นั่นเป็นลักษณะเฉพาะของ API ของฉันสำหรับกฎเกณฑ์ทางธุรกิจที่เฉพาะเจาะจงไม่ใช่ส่วนที่ฉันต้องการความช่วยเหลือ;)