การบันทึกการเรียก API ภายใต้ข้อมูลรับรอง AAD

ฉันมี 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 แต่ไม่ใช่วิธีแก้ปัญหาที่เหมาะสมซึ่งดูเหมือนจะไม่เป็นปัญหาเฉพาะตัว


comment
คุณสามารถเพิ่มโซลูชันของคุณเป็นคำตอบได้หรือไม่?   -  person Tony Ju    schedule 31.10.2019
comment
มันเป็นวิธีแก้ปัญหาหรือเปล่า ฉันหมายความว่ามันใช้งานได้ แต่อาจจะไม่สะอาดจริงๆ   -  person Jurgy    schedule 31.10.2019


คำตอบ (1)


คุณพูดถูกว่ามันเป็นไปไม่ได้นอกกรอบ มีสองวิธีแก้ปัญหาที่ฉันเห็น:

  1. ที่คุณได้พบ เช่น. ส่งออกข้อมูลเพิ่มเติมไปยังบันทึกของ AppInsights และใช้ข้อมูลเหล่านั้นเพื่อตรวจสอบผู้ใช้
  2. วิธีแก้ปัญหาที่สองที่ "ไม่สะอาด" คือการใส่ข้อมูลเพิ่มเติมลงในส่วนหัวที่จะถูกส่งไปยังแบ็กเอนด์ของคุณ เราไม่จำเป็นต้องมีแบ็กเอนด์ในการทำอะไรกับมัน แต่คุณสามารถตั้งค่าการบันทึก Azure Monitor เพื่อบันทึกส่วนหัวพิเศษนี้พร้อมกับทุกคำขอได้ จากนั้นแยกวิเคราะห์บันทึก Azure Monitor (อาจมี Log Analytics) เพื่อรับข้อมูลที่คุณต้องการ
person Vitaliy Kurokhtin    schedule 08.11.2019