ไทย

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

ID Token กับ Access Token: เหตุใด OpenID Connect JWT ไม่ใช่คีย์ API

· พื้นหลัง

jwt คำสาบาน การรับรองความถูกต้อง

ID และโทเค็นการเข้าถึงที่กำหนดเส้นทางไปยังผู้บริโภคที่แตกต่างกัน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

API ปฏิเสธโทเค็นที่ดูถูกต้องสมบูรณ์ — เพราะไม่เคยมีไว้สำหรับ API

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

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

การอ้างสิทธิ์โทเค็น ID อาจแนะนำให้ใช้ข้อมูลระบุตัวตน ตัวถอดรหัสทั่วไปนี้ไม่ตรวจสอบโปรไฟล์ OpenID Connect

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

ตัวถอดรหัสถือว่า `auth_time` เป็นฟิลด์ที่มีรูปทรงตามเวลา และแสดงชื่ออื่นๆ เป็นการเฉพาะแอปพลิเคชัน เว้นแต่ว่าจะอยู่ในกลุ่มแกนหลักเจ็ด ไม่ได้ตรวจสอบ nonce, `at_hash`, `amr` หรือซีแมนทิกส์ผู้ชมของลูกค้า เพย์โหลดข้อมูลระบุตัวตนที่อ่านได้จะยังคงไม่น่าเชื่อถือจนกว่าไคลเอ็นต์จะตรวจสอบความถูกต้อง

โทเค็นการเข้าถึงอาจเป็น JWT หรือทึบแสง JWT สามส่วนเท่านั้นที่เหมาะกับตัวถอดรหัสนี้

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

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

โทเค็นการรีเฟรช — โดยทั่วไปจะทึบแสง ไม่ได้ตั้งใจให้ถอดรหัส และไม่เคยส่งไปที่ API

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

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

ผู้ชมแตกต่างกัน — รหัสไคลเอ็นต์ในโทเค็น ID กับทรัพยากรในโทเค็นการเข้าถึง

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

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

ตัวอย่างการทำงาน: เปรียบเทียบฟิลด์ที่มองเห็นโดยไม่ถือว่าเป็นหลักฐานประเภทโทเค็น

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

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

สิ่งนี้ไม่ครอบคลุมถึง - โฟลว์ OAuth ที่ออกโทเค็นเหล่านี้ ซึ่งเป็นหัวข้อแยกต่างหาก

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

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

ประเด็นสำคัญ: ดู aud และพิมพ์ก่อนส่ง — ตัวถอดรหัส ToolAcre JWT ให้คุณตรวจสอบว่าโทเค็นประเภทใดที่คุณถืออยู่

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

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