在 AAD 凭据下记录 API 次调用

Logging API calls under AAD credentials

我在 Azure 中有一堆 API 的 运行 在 APIM 后面,需要我的 AAD 进行 OIDC 身份验证,一切都按预期工作,但我想知道是什么将是关于 monitoring/logging 哪个用户调用哪个 API 的最佳方式。该信息在 APIM 的 OIDC 服务生成的 JWT 中可用,因此我希望它是可能的。

默认 APIM 服务 Analytics 会记录一些基本信息,例如,无需执行任何特殊操作,每次调用都会记录在用户 "Anonymous" 下,并随机生成(持久?)用户 ID。

我可以创建一堆 APIM 用户并将相应的订阅密钥分发给我的 AAD 用户,并在发出请求时将密钥添加到他们的 headers。有了这个,电话就会被记录在他们的名字下,这正是我想要的。这样做的问题是它似乎不是特别安全。是什么阻止了订阅密钥的共享 and/or 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 调用(可能是错误的请求),也许我还应该添加一个策略。

无论如何,这听起来像是 a 方式,但不是正确的解决方案,看起来不像是一个独特的问题。

你说得对,开箱即用是不可能的。我可以看到两种解决方案:

  1. 你找到的那个。 IE。将额外信息输出到 AppInsights 日志并使用它们来查看用户。
  2. 第二个 "not clean" 解决方案是将额外信息输出到 header 中,然后发送到您的后端。不过,我们不需要后端对其执行任何操作,相反,您可以设置 Azure Monitor 日志记录来记录这个额外的 header 以及每个请求。然后解析 Azure Monitor 日志(可能使用 Log Analytics)以获取您想要的信息。