รูปแบบองค์กรสำหรับการรับรองความถูกต้อง JWT สำหรับแอปพลิเคชันที่ใช้ REST หรือไม่


9

ข้อมูลจำเพาะ JWT อธิบายถึงน้ำหนักบรรทุกและวิธีการส่ง แต่ปล่อยให้โปรโตคอลการตรวจสอบความถูกต้องเปิดซึ่งช่วยให้มีความยืดหยุ่น แต่น่าเสียดายที่ความยืดหยุ่นสามารถนำไปสู่การออกแบบและออกแบบที่ผิด

ฉันกำลังมองหาแนวคิดที่ดีและผ่านการทดสอบการใช้งานองค์กรสำหรับการรับรองความถูกต้อง JWT ซึ่งฉันสามารถใช้หรือปรับเปลี่ยนได้ แต่ฉันล้มเหลวในการค้นหาสิ่งที่สมบูรณ์

สิ่งที่ฉันคิดคือ

  • เมื่อไม่พบส่วนหัวการให้สิทธิ์หรือโทเค็น JWT ไม่ถูกต้องหรือหมดอายุให้ส่ง HTTP 401
  • เพื่อตรวจสอบสิทธิ์ใช้ / ล็อกอินช่อง REST ส่งชื่อผู้ใช้และรหัสผ่านเป็นวัตถุ JSON
  • เพื่อให้โทเค็นยังมีชีวิตอยู่ใช้ / keepalive REST ช่องเรียกมันทุก ๆ N (5) นาทีรับโทเค็น JWT ใหม่และแทนที่หนึ่งที่มีอยู่หลังจากแต่ละสาย (โทเค็นหมดอายุหลังจาก M (15) นาที)

อย่างไรก็ตามสิ่งที่รบกวนฉันคือความจำเป็นของช่องทางนั้น / keepalive ในทางกลับกันมันบังคับให้ฉันเพื่อป้องกันไม่ให้การรับรองความถูกต้องหมดอายุแม้ว่าผู้ใช้จะไม่อยู่ (การตัดสินใจถ้าเรายังต้องการ keepalive ยังไม่พบ) และแน่นอนการโทรเหล่านั้นเป็นพิเศษและมีความซับซ้อนเป็นพิเศษในโปรโตคอล สิ่งที่น่าสนใจก็คือเซิร์ฟเวอร์นั้นจะขยายโทเค็นโดยอัตโนมัติ ในสภาพแวดล้อมแบบเซสชันนั้นเกิดขึ้นโดยการรีเซ็ตเวลาประทับที่นี่อย่างไรก็ตามเซิร์ฟเวอร์จะต้องส่งโทเค็นใหม่อาจไม่ได้แต่ละครั้ง แต่เมื่อโทเค็นจะหมดอายุใน R (พูด 10 นาที) แต่การวางไว้ในเนื้อหาของการตอบสนองจะหมายถึงการแก้ไขโปรโตคอลการตอบสนอง JSON (ดังนั้นการแก้ปัญหาคือการบุกรุกและไม่โปร่งใส) และการวางส่วนหัว HTTP เพิ่มเติมที่ไคลเอ็นต์สามารถประมวลผลอาจไม่ได้เป็นรูปแบบที่ดี ผม'

มีรูปแบบองค์กรพร้อมที่ตอบจุดเปิดของฉันหรือไม่ โปรโตคอลของฉันเป็นแบบร่างความคิดที่เชื่อถือได้หรือไม่? ฉันต้องการใช้สิ่งที่พร้อมกว่าการออกแบบตั้งแต่เริ่มต้น


1
ใช่. JWT ได้นำผู้คนจำนวนมากในการใช้ 'โปรโตคอล' พื้นบ้านและทิ้งรหัสกรอบการพิสูจน์ เพื่อให้ได้ทางออกที่ถูกต้องสิ่งสำคัญคือต้องมีความชัดเจนในข้อกำหนด ดูเหมือนว่าการหมดอายุ 'เซสชัน' เป็นข้อกำหนด ถูกบังคับให้ออกจากระบบข้อกำหนดหรือไม่? เช่นที่ใครบางคนในฝั่งเซิร์ฟเวอร์สามารถพูดออกจากระบบผู้ใช้นี้หรือผู้ใช้สามารถพูดออกจากระบบการประชุมทั้งหมดของฉัน
joshp

คำตอบ:


4

JWT ( แนะนำ JSON Web Token ) เป็นเพียงรูปแบบโทเค็นการตรวจสอบความถูกต้องเป็นสิ่งที่เกินขอบเขตสำหรับข้อมูลจำเพาะนั้น โดยทั่วไปมักใช้ในระบบการตรวจสอบความถูกต้อง แต่คุณสามารถใช้สำหรับสถานการณ์ที่แตกต่างกันโดยสิ้นเชิงดังนั้นจึงไม่มีเหตุผลที่จะรวมข้อ จำกัด การรับรองความถูกต้องเฉพาะภายในข้อกำหนดนั้น

หากคุณกำลังมองหาคำแนะนำเกี่ยวกับการรับรองความถูกต้องคุณควรดูข้อมูลจำเพาะตระกูลOpenID Connect นอกจากนี้หากระบบของคุณประกอบด้วย HTTP API และคุณกำลังสนใจในการให้บริการการเข้าถึงมอบหมายให้ API เหล่านั้นเพื่อตัวเองหรือเพื่อการประยุกต์ใช้ลูกค้าของบุคคลที่สามแล้วคุณควรดูที่OAuth 2.0สเปค

มีโปรโตคอลที่เกี่ยวข้องกับการรับรองความถูกต้องเพิ่มเติมเช่น SAML และ WS- สหพันธรัฐที่ยังคงใช้กันอย่างแพร่หลายในสถานการณ์องค์กร แต่มีความซับซ้อนมากขึ้นในการใช้

เกี่ยวกับจุดเปิดของคุณโดยเฉพาะ:

  • โครงการการตรวจสอบผู้ถือโทเค็นถูกกำหนดไว้ในRFC 6750ซึ่งมีคำแนะนำเกี่ยวกับวิธีการดำเนินการร้องขอและรหัสข้อผิดพลาดที่เป็นไปได้
  • OAuth2 และ OpenID เชื่อมต่อทั้งสองพิจารณาความเป็นไปได้และกำหนดวิธีการแลกเปลี่ยนชื่อผู้ใช้ / รหัสผ่านด้วยโทเค็น
  • ปัญหาของการขยายการให้โทเค็นที่ตนเองมี / โดยมูลค่า (JWT) อายุการใช้งานอยู่ที่อยู่ภายใน OpenID เชื่อมต่อและ OAuth2 ด้วยวิธีการของราชสกุลรีเฟรช

แม้ว่า OAuth2 และ OpenID Connect นั้นสามารถนำไปใช้งานได้ง่ายกว่าผู้ใช้บางรุ่น แต่ก็ยังมีความซับซ้อนเพียงพอที่จะรับประกันความระมัดระวังและใช้งานได้เองหากคุณเต็มใจที่จะใช้เวลาและทรัพยากรจำนวนมาก โดยทั่วไปจะเป็นตัวเลือกที่ดีกว่าในการใช้ห้องสมุดหรือบริการของบุคคลที่สาม

ในที่สุดโปรโตคอลเหล่านี้ครอบคลุมสถานการณ์มากมายดังนั้นพวกเขาอาจ overkill ในบางสถานการณ์


2
+1 สำหรับรับประกันความระมัดระวัง & คำตอบที่สมบูรณ์สำหรับคำถามโดยนัยแทนที่จะเป็นข้อเขียน
พอล

3

ฉันไม่คิดว่าคุณต้องการช่องทางที่ติดตามได้ เพย์โหลดของคุณสามารถ (และแนะนำให้) มีข้อมูลการหมดอายุของเซิร์ฟเวอร์ (ในexpคีย์ตามมาตรฐาน ) เมื่อโทเค็นถูกสร้างขึ้นในการเข้าสู่ระบบ หากมีการใช้โทเค็นที่หมดอายุ (ซึ่งแน่นอนจะถูกกำหนดโดยเซิร์ฟเวอร์ซึ่งเชื่อถือได้ว่ามีอะไรอยู่ในโทเค็นหากการตรวจสอบลายเซ็น) เซิร์ฟเวอร์เพียงปฏิเสธ HTTP 401 เท่านั้นพร้อมท์ให้ลูกค้าตรวจสอบความถูกต้องอีกครั้ง

ลูกค้าในขณะเดียวกันสามารถเชิงรุก ส่วนของส่วนของข้อมูลไม่ได้เข้ารหัสและเนื่องจากไคลเอนต์สามารถอ่านได้ลูกค้าสามารถตรวจสอบได้เมื่อมีการส่งคำขอด้วยโทเค็นที่หมดอายุแล้วจึงโทร/loginอีกครั้งหากโทเค็นหมดอายุ

อีกวิธีหนึ่งคือ REST อนุญาตให้ส่งข้อมูลไฮเปอร์มีเดียในรูปแบบ 'เอ็นจิ้นแห่งรัฐ' และหากคุณต้องการคุณสามารถทำให้ JWT ใช้งานได้เพียงครั้งเดียวเท่านั้นและหมดอายุด้วยเช่นกัน จากนั้นทุกคำขอจะสร้าง JWT ใหม่ซึ่งถูกส่งคืนในการตอบกลับไปยังไคลเอนต์ไม่ว่าจะในเนื้อหาหรือมีแนวโน้มมากขึ้นในส่วนหัวการตอบสนองตามที่hapi-auth-jwt2ทำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.