ไทย

เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · ตัวถอดรหัส JWT

การดีบัก 401: สิ่งที่ต้องตรวจสอบในการถอดรหัส JWT ก่อนที่จะตำหนิ API

· เหตุใดจึงสำคัญ

jwt การดีบัก การรับรองความถูกต้อง

JWT ที่ถูกปฏิเสธซึ่งผ่านรายการตรวจสอบการแก้ไขจุดบกพร่องที่มีโครงสร้าง
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

มันใช้งานได้เมื่อวานนี้ — 401 ที่ปรากฏโดยไม่มีการเปลี่ยนแปลงรหัส

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

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

คัดลอกข้อผิดพลาดก่อน — คำนำหน้า 'ผู้ถือ ' การขึ้นบรรทัดใหม่ต่อท้าย และโทเค็นที่ถูกตัดทอน

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

ส่วนหัวหรือเพย์โหลดว่างเปล่าล้มเหลวโดยเฉพาะ base64url ไม่ถูกต้อง UTF-8 ไม่ถูกต้อง และ JSON ไม่ถูกต้อง มีข้อผิดพลาดแยกกัน ความแตกต่างเหล่านี้ช่วยพิจารณาว่าการขนส่งทำให้โทเค็นเสียหายหรือไม่ ลายเซ็นอาจมีรูปแบบไม่ถูกต้องโดยไม่ปิดกั้นการตรวจสอบ แต่คำเตือนนั้นยังคงมีแนวโน้มว่าจะล้มเหลวในการตรวจสอบซึ่งต้องมีการยืนยันทางฝั่งเซิร์ฟเวอร์

exp และ nbf: ตรวจสอบค่าตามวินาทีโดยไม่ต้องเปลี่ยนการแสดงผลเป็นการตัดสินความถูกต้อง

ตรวจสอบค่าตัวเลข `exp` และ `nbf` ต่อไป ToolAcre คูณวินาทีด้วย 1,000 แสดง UTC และติดป้ายกำกับการหมดอายุก่อนหน้าหรืออนาคตที่ไม่มาก่อนซึ่งสัมพันธ์กับนาฬิกาของเบราว์เซอร์ ค่าสิบสามหลักอาจเปิดเผยหน่วยมิลลิวินาทีที่เขียนโดยที่คาดว่าจะเป็นวินาที

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

aud และ iss — โทเค็นนี้สำหรับ API นี้จากผู้ออก API นี้เชื่อถือหรือไม่

`aud` ควรระบุผู้รับที่ต้องการภายใต้นโยบายของ API ในขณะที่ `iss` ควรตรงกับความสัมพันธ์ของผู้ออกที่เชื่อถือได้ ToolAcre แสดงรายการทั้งเป็นค่าที่ถอดรหัสและอธิบายความหมายที่บันทึกไว้ ไม่ได้เปรียบเทียบกับการกำหนดค่า API หรือผูกสตริงผู้ออกกับชุดคีย์

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

ประเภทโทเค็นอาจแนะนำโดยส่วนหัวและการอ้างสิทธิ์ แต่การถอดรหัสไม่สามารถรับรองความถูกต้องของการจำแนกประเภทนั้นได้

โทเค็น ID และโทเค็นการเข้าถึงสามารถมีลักษณะเหมือน JWT สามส่วน ส่วนหัว `typ` ผู้ชม ขอบเขต และการอ้างสิทธิ์เฉพาะโปรไฟล์อาจแนะนำว่าโปรไฟล์ใดที่คุณถืออยู่ ToolAcre เตือนเกี่ยวกับสตริงที่ไม่คาดคิด `typ` แต่ไม่ได้ใช้ OpenID Connect หรือการจัดประเภทโทเค็น OAuth

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

kid หลังจากการหมุนเวียนคีย์ - โทเค็นที่ถูกต้องซึ่งอ้างอิงถึงคีย์ที่เซิร์ฟเวอร์ไม่มีอีกต่อไป

หลังจากการหมุนเวียนคีย์ ส่วนหัว `kid` อาจอ้างถึงคีย์ที่ขาดหายไปจากชุดที่เชื่อถือได้ในปัจจุบันของเซิร์ฟเวอร์ อ่านตัวระบุ จากนั้นตรวจสอบแคชและบันทึกชุดคีย์บนตัวตรวจสอบ อย่าดึงข้อมูล URL ที่ได้รับจากส่วนหัว หรือยอมรับเนื้อหาคีย์ที่ฝังไว้เป็นวิธีแก้ปัญหาชั่วคราว

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

ตัวอย่างการทำงาน — การเรียกใช้โทเค็นที่ถูกปฏิเสธผ่านรายการตรวจสอบในตัวถอดรหัส ToolAcre JWT

สำหรับการทดสอบที่ใช้งานได้ ให้ใช้โทเค็นที่ถูกปฏิเสธที่มีการควบคุม ยืนยันสามส่วน ตรวจสอบข้อผิดพลาด จากนั้นบันทึก `exp`, `nbf`, `aud`, `iss`, `typ` และ `kid` โดยไม่ต้องแก้ไข เปรียบเทียบแต่ละฟิลด์กับเป้าหมายของคำขอ API และการกำหนดค่าที่เชื่อถือได้ของผู้ตรวจสอบ เปิดบันทึกเซิร์ฟเวอร์ไว้สำหรับประเภทความล้มเหลวที่เกิดขึ้นจริง

หากค่าที่มองเห็นทั้งหมดเป็นไปตามที่คาดไว้ อย่าสรุปว่า API ผิด การทุจริตของลายเซ็น เนื้อหาคีย์ไม่ถูกต้อง สถานะถูกเพิกถอน หรือนโยบายที่ไม่แสดง ยังคงสามารถอธิบาย 401 ได้ `signatureVerified` ของ ToolAcre ยังคงเป็นเท็จ ไม่ว่า JSON จะปรากฏจะเป็นระเบียบเรียบร้อยเพียงใด

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

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

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