JSON Web Token - ทำไมส่วนของข้อมูลสาธารณะจึงเป็นเช่นนั้น?


30

ฉันไม่เข้าใจเหตุผลที่ทำให้การเรียกร้อง / น้ำหนักบรรทุกของ JWT เปิดเผยต่อสาธารณชนหลังจาก base64 ถอดรหัส

ทำไม?

ดูเหมือนว่ามันจะมีประโยชน์มากกว่าที่จะเข้ารหัสด้วยความลับ

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


เมื่อคุณเขียน JWT คุณอาจหมายถึง JWS เพราะ JWE (ซึ่งก็คือ "subclass" ของ JWT) เป็นเนื้อหาที่เข้ารหัสลับ
Alexey

คำตอบ:


28

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

สิ่งที่คุณต้องการป้องกันส่วนใหญ่คือคนที่ยุ่งเกี่ยวกับข้อมูลเพื่อให้มีการอัปเดตระเบียนที่ไม่ถูกต้องหรือบัญชีตรวจสอบของใครบางคนได้รับเงินในบัญชีที่ไม่ควรมี ลายเซ็นของ JSON Web Token ทำเช่นนั้นเพราะการเปลี่ยนส่วนใด ๆ ของการรวมกันของส่วนหัว / น้ำหนักบรรทุก / ลายเซ็นจะทำให้แพ็กเก็ตใช้ไม่ได้

โปรดทราบว่าคุณยังสามารถรักษาความปลอดภัยแพ็กเก็ตที่ Transport Layer โดยใช้ SSL


ฉันเข้าใจแล้ว JWT นั้นเป็นโทเค็น CSRF ใหม่ ขอบคุณสำหรับคำอธิบายของคุณมันได้เคลียร์ความสับสน
ineedhelp

6
ไม่มี JWT ไม่ใช่โทเค็น CSRF ใหม่ นั่นคือ 2 สิ่งที่แตกต่าง
Ash

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

@RobertHarvey คุณใช้ JWT ไม่ถูกต้อง JST เป็นคำว่า "umbrella" สำหรับ JWS และ JWE JWS คือการตรวจสอบ JWE คือการเข้ารหัส ดังนั้น "วัตถุประสงค์ของโทเค็นเว็บ JSON คือการตรวจสอบสิทธิ์" ควรเป็นจริง "JWS คือการตรวจสอบสิทธิ์"
Alexey

@ Alexey: ฉันมีการเปลี่ยนแปลงเล็กน้อยในคำตอบของฉันเพื่อรองรับ
Robert Harvey

4

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

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

และตามที่ @Robert พูดถึง JWTs สามารถ / ควรยังคงถูกเข้ารหัสด้วย TLS

นี่คือคำอธิบายที่ดีของ JWTs และลายเซ็นซึ่งเป็นภาพด้านล่างที่มา 5 ขั้นตอนง่ายๆในการทำความเข้าใจ JSON Web Tokens (JWT)

asdfasdf


2

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

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


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