ไทย

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

อธิบายส่วนหัว JWT: alg, typ, kid และฟิลด์ที่ไม่น่าเชื่อถือ

· มันทำงานอย่างไร

jwt ความปลอดภัย การรับรองความถูกต้อง

ส่วนหัว JWT ที่ถอดรหัสแล้วหยุดทำงานที่ขอบเขตความน่าเชื่อถือของผู้ตรวจสอบ
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

วัตถุ JSON ขนาดเล็กที่ไม่มีใครอ่าน — และการตัดสินใจในการตรวจสอบที่มีอิทธิพลต่อ

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

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

alg display: ตัวถอดรหัสจะอธิบายเฉพาะอัลกอริธึมที่มีชื่อในการใช้งานเท่านั้น

`alg` ประกาศอัลกอริทึมที่ใช้การอ้างสิทธิ์โทเค็น ToolAcre มีหมายเหตุอธิบายสำหรับ HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384 และ PS512 พร้อมคำเตือนสำหรับ `none` สตริงอื่นๆ จะแสดงว่าไม่รู้จัก แทนที่จะถือว่าได้รับการสนับสนุน

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

typ และ cty — การประกาศประเภทโทเค็น โปรไฟล์ at+jwt สำหรับโทเค็นการเข้าถึง และ JWT ที่ซ้อนกัน

`typ` อธิบายประเภทสื่อหรือโปรไฟล์ที่ผู้ผลิตตั้งใจ ToolAcre เตือนเมื่อค่าสตริงแตกต่างจาก `JWT`; มันไม่ได้บังคับใช้ซีแมนทิกส์โปรไฟล์ ฟิลด์ `cty` สามารถอธิบายเนื้อหาที่ซ้อนกันได้ แต่ตัวถอดรหัสปัจจุบันไม่มีเส้นทางการประมวลผลโทเค็นที่ซ้อนกัน และไม่ตีความฟิลด์นั้น

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

kid — ตัวระบุคีย์ที่ช่วยให้ผู้ตรวจสอบสามารถหมุนเวียนคีย์ได้โดยไม่ต้องหยุดทำงาน

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

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

jku, x5u, jwk และ x5c — ฟิลด์ส่วนหัวที่ชี้ไปที่คีย์ และเหตุใดผู้ตรวจสอบจะต้องไม่ดึงข้อมูลหรือเชื่อถือพวกเขาแบบสุ่มสี่สุ่มห้า

ช่องต่างๆ เช่น `jku` และ `x5u` สามารถตั้งชื่อสถานที่ได้ ในขณะที่ `jwk` และ `x5c` สามารถส่งข้อมูลที่เกี่ยวข้องกับคีย์ได้ การปรากฏตัวของพวกเขาไม่ได้ทำให้สถานที่หรือคุณค่าเหล่านั้นเชื่อถือได้ การดึงข้อมูล URL หรือการยอมรับเนื้อหาที่ฝังไว้เพียงอย่างเดียว เนื่องจากส่วนหัวที่ไม่ได้รับการยืนยันได้มอบการตัดสินใจด้านความปลอดภัยให้กับผู้ร้องขอ

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

crit — ส่วนขยายที่ผู้ตรวจสอบต้องเข้าใจหรือปฏิเสธ

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

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

ตัวอย่างการทำงาน — การอ่านส่วนหัวที่สมจริงและตัดสินใจว่าฟิลด์ใดแจ้งการตรวจสอบ และฟิลด์ใดเป็นเพียงข้อมูลเท่านั้น

พิจารณา `{"alg":"RS256","typ":"JWT","kid":"rotate-7"}` ToolAcre พิมพ์ทั้งสามช่องอย่างสวยงามและอธิบายว่าการตรวจสอบ RS256 จำเป็นต้องมีรหัสสาธารณะของผู้ออก ผู้ตรวจสอบสามารถบันทึกอัลกอริธึมและตัวระบุคีย์ที่ประกาศไว้ จากนั้นเปรียบเทียบกับนโยบายที่ปักหมุดไว้ของเซิร์ฟเวอร์และชุดคีย์ที่เชื่อถือได้

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

ประเด็นสำคัญ: ส่วนหัวเป็นอินพุต ไม่ใช่สิทธิ์ - ตัวถอดรหัส ToolAcre JWT จะแสดงส่วนหัวเพื่อให้คุณสามารถอ่านได้ ผู้ตรวจสอบจะต้องตัดสินใจอย่างอิสระว่าจะเชื่อถืออะไร

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

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