【问题标题】:Logging API calls under AAD credentials在 AAD 凭据下记录 API 调用
【发布时间】:2019-11-09 07:01:39
【问题描述】:

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

默认的 APIM 服务 Analytics 记录一些基本信息,例如,没有做任何特别的事情,每次调用都记录在用户“匿名”下,并带有一个随机生成的(持久的?)用户 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 调用(可能是错误请求),也许我还应该添加一个策略。

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

【问题讨论】:

  • 您可以添加您的解决方案作为答案吗?
  • 这是否是解决方案。我的意思是,它有效,但可能不是一个干净的。

标签: azure logging azure-active-directory azure-api-management apim


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多