Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 在AAD凭据下记录API调用_Azure_Logging_Azure Active Directory_Azure Api Management_Apim - Fatal编程技术网

Azure 在AAD凭据下记录API调用

Azure 在AAD凭据下记录API调用,azure,logging,azure-active-directory,azure-api-management,apim,Azure,Logging,Azure Active Directory,Azure Api Management,Apim,我有一堆API在Azure中运行在一个APIM后面,它需要我的AAD进行OIDC身份验证,一切正常,但我想知道监视/记录哪个用户调用哪个API的最佳方式是什么。这些信息在APIM的OIDC服务生成的JWT中可用,因此我希望它是可能的 默认的APIM服务分析记录一些基本信息,例如,在不做任何特殊操作的情况下,每个调用都会以随机生成的(持久的?)用户id记录在用户“匿名”下 我可以创建一组APIM用户,将相应的订阅密钥分发给我的AAD用户,并在发出请求时将密钥添加到他们的头中。有了这个,这些电话就会

我有一堆API在Azure中运行在一个APIM后面,它需要我的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>

@(context.Request.Headers.GetValueOrDefault(“授权”,“无授权标头”).AsJwt()?.Claims.GetValueOrDefault(“名称”,“无名称字段”))
如果JWT不包含字段名并拒绝API调用(可能是错误的请求),也许我还应该添加一个策略


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

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

  • 你找到的那个。即,将额外信息输出到AppInsights日志中,并使用这些信息查看用户
  • 第二个“不干净”的解决方案是将额外的信息放入一个将发送到后端的头中。不过,我们不需要后端对其进行任何处理,相反,您可以设置Azure Monitor日志记录,将此额外的头与每个请求一起记录。然后解析Azure Monitor日志(可能使用日志分析)以获取所需信息

  • 你能添加你的解决方案作为答案吗?但它是解决方案吗。我的意思是,它是有效的,但可能不是真正干净的。