Saya memiliki banyak API yang berjalan di Azure di belakang APIM yang memerlukan otentikasi OIDC oleh AAD saya dan semuanya berfungsi seperti yang diharapkan, tetapi saya bertanya-tanya apa cara terbaik untuk memantau/mencatat pengguna mana yang memanggil API mana. Informasi tersebut tersedia di JWT yang dihasilkan oleh layanan OIDC dari APIM jadi saya berharap hal itu dapat dilakukan.
Layanan APIM default, Analytics, mencatat beberapa informasi dasar misalnya, tanpa melakukan sesuatu yang khusus, setiap panggilan dicatat di bawah pengguna "Anonim" dengan id pengguna yang dibuat secara acak (persisten?).
Saya dapat membuat sekelompok Pengguna APIM dan membagikan kunci langganan yang sesuai kepada Pengguna AAD saya dan menambahkan kunci ke header mereka saat membuat permintaan. Dengan ini, panggilan-panggilan tersebut dicatat dengan nama mereka dan itulah yang saya inginkan. Masalahnya adalah hal ini tampaknya tidak terlalu aman. Apa yang mencegah pembagian kunci langganan dan/atau ketidakcocokan antara kredensial Pengguna AAD dan kunci langganan APIM?
Apa cara yang tepat untuk melakukan ini? Bisakah ini dilakukan dari dalam APIM/AAD atau apakah saya perlu menggunakan sesuatu seperti Event Hubs?
Sunting:
Saya menemukan solusi yang berhasil. Dengan mengaktifkan Application Insights, kebijakan API masuk berikut menyimpan bidang nama token JWT sebagai pelacakan.
<trace source="MyApi" severity="information">
<message>@(context.Request.Headers.GetValueOrDefault("Authorization","No auth header").AsJwt()?.Claims.GetValueOrDefault("name", "No name field"))</message>
</trace>
Mungkin saya juga harus menambahkan kebijakan jika JWT tidak berisi nama bidang dan menolak panggilan API (mungkin permintaan buruk).
Bagaimanapun, ini terdengar seperti sebuah cara namun bukan solusi yang tepat dan sepertinya bukan masalah yang unik.