0

我有一堆 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 调用(可能是错误请求),也许我还应该添加一个策略。

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

4

1 回答 1

0

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

  1. 你找到的那个。即将额外信息输出到 AppInsights 日志并使用它们来查看用户。
  2. 第二个“不干净”的解决方案是将额外的信息放入将发送到后端的标头中。不过,我们不需要后端对其执行任何操作,相反,您可以设置 Azure Monitor 日志记录来记录这个额外的标头以及每个请求。然后解析 Azure Monitor 日志(可能使用 Log Analytics)以获取所需的信息。
于 2019-11-08T23:01:39.647 回答