我在Azure的APIM后面有很多正在运行的API,这些API需要通过我的AAD进行OIDC身份验证,并且一切正常,但是我想知道监视/记录哪个用户调用哪个API的最佳方法是什么。该信息在APIM的OIDC服务生成的JWT中可用,因此我希望它是可能的。
例如,默认的APIM服务Analytics(分析)会记录一些基本信息,而无需执行任何特殊操作,每个调用都会记录在用户“ Anonymous”下,并带有一个随机生成的(持续的)用户ID。
我可以创建一堆APIM用户并将相应的订阅密钥分发给我的AAD用户,并在发出请求时将密钥添加到其标头中。这样,这些呼叫将以他们的名字记录下来,而这正是我想要的。问题在于它似乎并不特别安全。是什么阻止订阅密钥的共享和/或AAD用户凭据与APIM订阅密钥之间的不匹配?
执行此操作的正确方法是什么?可以在APIM / AAD中完成此操作,还是需要使用事件中心之类的东西?
编辑:
我找到了一种可行的解决方案。通过启用Application Insights,以下入站API策略将JWT令牌的名称字段存储为跟踪。
X = ['sequence, A, 1, 2, 3',
'sequence, B, 10, 20, 30',
'sequence, C, 100, 200, 300']
Y = ['VEQ','1','map','2','cap',]
my_list = []
for x in map(lambda x: str.split(x, ','), X):
retval = Y[:]
retval[2] = x[1]
retval[4] = x[2]
my_list.append(retval)
如果JWT不包含字段名称并且拒绝API调用(也许是错误的请求),也许我还应该添加一个策略。
无论如何,这听起来像是 a 的方式,但却不是看起来像一个独特问题的正确解决方案。
答案 0 :(得分:0)
您是对的,不可能开箱即用。我可以看到两种解决方案: