ฉันมี API จำนวนมากที่ทำงานอยู่ใน Azure ด้านหลัง APIM ซึ่งต้องมีการรับรองความถูกต้อง OIDC โดย AAD ของฉันและทุกอย่างทำงานได้ตามที่คาดไว้ แต่ฉันสงสัยว่าอะไรจะเป็นวิธีที่ดีที่สุดในการตรวจสอบ / การบันทึกว่าผู้ใช้รายใดเรียก API ใด ข้อมูลมีอยู่ใน JWT ที่สร้างโดยบริการ OIDC ของ APIM ดังนั้นฉันคาดหวังว่าจะเป็นไปได้
การวิเคราะห์บริการ APIM เริ่มต้นจะบันทึกข้อมูลพื้นฐานบางอย่าง เช่น โดยไม่ต้องทำอะไรพิเศษ การโทรแต่ละครั้งจะถูกบันทึกภายใต้ผู้ใช้ "ไม่ระบุชื่อ" ด้วยรหัสผู้ใช้ที่สร้างขึ้นแบบสุ่ม (ถาวร?)
ฉันสามารถสร้างกลุ่มผู้ใช้ APIM และแจกคีย์การสมัครสมาชิกที่เกี่ยวข้องให้กับผู้ใช้ AAD ของฉัน และเพิ่มคีย์ลงในส่วนหัวของพวกเขาเมื่อทำการร้องขอ ด้วยเหตุนี้การโทรจึงถูกบันทึกไว้ภายใต้ชื่อซึ่งเป็นสิ่งที่ฉันต้องการ ปัญหาคือมันดูไม่ปลอดภัยเป็นพิเศษ อะไรป้องกันการแชร์คีย์การสมัครสมาชิกและ/หรือความไม่ตรงกันระหว่างข้อมูลรับรองผู้ใช้ AAD กับคีย์การสมัครสมาชิก APIM
วิธีที่เหมาะสมในการทำเช่นนี้คืออะไร? สามารถทำได้จากภายใน APIM/AAD หรือฉันจำเป็นต้องใช้บางอย่างเช่น Event Hubs
แก้ไข:
ฉันพบวิธีแก้ปัญหาที่ใช้งานได้ดี ด้วยการเปิดใช้ Application Insights นโยบาย API ขาเข้าต่อไปนี้จะจัดเก็บฟิลด์ชื่อของโทเค็น JWT ไว้เป็นการติดตาม
<trace source="MyApi" severity="information">
<message>@(context.Request.Headers.GetValueOrDefault("Authorization","No auth header").AsJwt()?.Claims.GetValueOrDefault("name", "No name field"))</message>
</trace>
บางทีฉันควรเพิ่มนโยบายด้วยหาก JWT ไม่มีชื่อฟิลด์และปฏิเสธการเรียก API (อาจเป็นคำขอที่ไม่ถูกต้อง)
อย่างไรก็ตาม ดูเหมือนวิธี a แต่ไม่ใช่วิธีแก้ปัญหาที่เหมาะสมซึ่งดูเหมือนจะไม่เป็นปัญหาเฉพาะตัว