我有一堆 API 在 APIM 后面运行在 Azure 中,这些 API 需要我的 AAD 进行 OIDC 身份验证,一切都按预期工作,但我想知道监视/记录哪些用户调用哪个 API 的最佳方法是什么。这些信息在 APIM 的 OIDC 服务生成的 JWT 中可用,所以我希望它是可能的。
默认的 APIM 服务分析记录一些基本信息,例如,没有做任何特殊的事情,每次调用都记录在用户“匿名”下,并带有一个随机生成的(持久的?)用户 ID。
我可以创建一堆 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 调用(可能是错误请求),也许我还应该添加一个策略。
无论如何,这听起来像是一种方法,但不是正确的解决方案,看起来不像是一个独特的问题。