สิทธิ์การเข้าถึงและบทบาทควรรวมอยู่ในน้ำหนักบรรทุกของ JWT หรือไม่


9

ข้อมูลเกี่ยวกับสิทธิ์และบทบาทของลูกค้าควรรวมอยู่ใน JWT หรือไม่?

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

หรือ,

ข้อมูลอย่างที่กล่าวถึงข้างต้นไม่ควรเป็นส่วนหนึ่งของ JWT และควรใช้เฉพาะฐานข้อมูลเพื่อตรวจสอบบทบาทการเข้าถึงและการอนุญาตของผู้ใช้หรือไม่

คำตอบ:


7

วัตถุประสงค์ของการรวมการอ้างสิทธิ์ในโทเค็นคือคุณไม่จำเป็นต้องมีการสื่อสารระหว่างทรัพยากรกับผู้ให้บริการการตรวจสอบสิทธิ์

ทรัพยากรสามารถตรวจสอบว่าโทเค็นมีลายเซ็นที่ถูกต้องและเชื่อถือเนื้อหา

สมมติว่ารหัสส่วนตัวเป็นรหัสส่วนตัวของเซิร์ฟเวอร์รับรองความถูกต้องของคุณ ผู้ให้บริการบางรายเปลี่ยนกุญแจเพื่อลดความเสี่ยง

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


ขอขอบคุณสำหรับคำตอบที่สวยงามฉันขอทราบเพิ่มเติมเกี่ยวกับสิ่งที่คุณหมายถึงจากคำสั่งของคุณ "ผู้ให้บริการบางรายเปลี่ยนกุญแจของพวกเขาเพื่อลดความเสี่ยง" ?
Anshul Sahni

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

ดังนั้นโทเค็นทั้งหมดจะไม่ถูกต้องทุกครั้งที่มีการเปลี่ยนแปลงลายเซ็นคีย์โดยบริการ
Anshul Sahni

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

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

1

จากประสบการณ์ของฉันหากระบบทั้งหมดของคุณใช้บทบาทศูนย์กลางและฐานข้อมูลสิทธิ์คุณสามารถเพิ่มทั้งหมดนั้นลงใน JWT

อย่างไรก็ตามวิธีนี้อาจทำงานได้ไม่ดีในสถานการณ์ SSO เมื่อเซิร์ฟเวอร์รับรองความถูกต้องไม่มีความคิดใด ๆ เกี่ยวกับระบบเป้าหมายที่จะรับและเชื่อถือโทเค็น

บทบาทและการอนุญาตของผู้ใช้นั้นขึ้นอยู่กับผู้รับโทเค็น JWT โดยเฉพาะอย่างยิ่งเมื่อคุณรวมการรับรองความถูกต้อง SSO กับ JWT เข้ากับระบบดั้งเดิมบางระบบที่มีระบบย่อยการอนุญาตอยู่แล้วดังนั้นพวกเขาจึงต้องการการเรียกร้องเพียงครั้งเดียวเพื่อแสดงตนใน JWT - การอ้างสิทธิ์ตัวตนของผู้ใช้


ฉันเห็นด้วยกับสิ่งนี้ สิทธิ์ของผู้ใช้ไม่ควรเป็นส่วนหนึ่งของ jwt เป็นพิเศษใน SSO เนื่องจาก idp ไม่ทราบว่าบริการอื่น ๆ ที่ผู้ใช้รายนี้ jwt กำลังจะพูดถึงคือ .. ทรัพยากรควรดำเนินการส่วนการอนุญาตทันทีที่ตัวตนได้รับการยืนยันสำหรับผู้ใช้
Manish Rawat

ฉันยังเห็นด้วยว่าการขออนุญาตใน JWT ไม่ใช่ความคิดที่ดีเกินกว่า API เสาหินธรรมดา ฉันเขียนโพสต์บล็อกเกี่ยวกับเรื่องนี้: sdoxsee.github.io/blog/2020/01/06/…
sdoxsee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.