У меня есть несколько API, работающих в Azure за APIM, которые требуют проверки подлинности OIDC с помощью моего AAD, и все работает так, как ожидалось, но мне интересно, как лучше всего отслеживать / регистрировать, какой пользователь вызывает какой API. Информация доступна в JWT, созданном службой OIDC APIM, поэтому я ожидал, что это возможно.
Служба аналитики APIM по умолчанию регистрирует некоторую базовую информацию, например, не делая ничего особенного, каждый вызов регистрируется под пользователем «Анонимный» со случайно сгенерированным (постоянным?) Идентификатором пользователя.
Я могу создать группу пользователей APIM и раздать соответствующие ключи подписки моим пользователям AAD и добавить ключи в их заголовки при выполнении запроса. При этом звонки записываются под своими именами, что мне и хотелось бы. Проблема в том, что это не кажется особенно безопасным. Что предотвращает совместное использование ключей подписки и / или несоответствие между учетными данными пользователя AAD и ключом подписки APIM?
Как правильно это сделать? Можно ли это сделать из APIM / AAD или мне нужно использовать что-то вроде концентраторов событий?
Редактировать:
Я нашел решение, которое вроде работает. При включении 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 (возможно, неправильный запрос).
В любом случае, это звучит как , но не подходящее решение, которое не похоже на решение уникальной проблемы.