到目前为止,我成功使用了Application Insights REST API来获取带有X-Api-Key标头的指标。 https://api.applicationinsights.io/beta/apps/xxxxxxxxxx/metrics/customMetrics%2FmetricName?timespan=PT2H&interval=PT20M&aggregation=min
然而,通过新的信息中心,抓取多个指标,我们严格按照1500请求/ API密钥限制。
有人建议玩几个api键,但我想阻止这种方法。
根据文档,使用AAD进行身份验证会删除每日上限(https://dev.applicationinsights.io/documentation/Authorization/Rate-limits)
但我无法通过AAD进行身份验证(在nodejs中,但我怀疑它在任何语言中都是相同的)
我将adal-node
用于一个简单的应用,我成功获得了一个令牌,但是我无法将其转发到Request
var context = new AuthenticationContext(authorityUrl);
context.acquireTokenWithClientCredentials(resource, clientId, clientSecret, function(err, tokenResponse) {
if (err) {
console.log('well that didn\'t work: ' + err.stack);
} else {
console.log(tokenResponse);
request({'url' : 'https://api.applicationinsights.io/beta/apps/xxxxxxxxx/metrics/customMetrics%2Fmetrics?timespan=PT2H&interval=PT20M&aggregation=min',
headers: {
'Authorization': 'Bearer ' + tokenResponse.accessToken
}
}, function (error,response,body){
console.log(body);
});
}
});
我收到以下错误消息
The provided authentication is not valid for this resource
The given API Key is not valid for the requested resource
我怀疑我错过了什么:)
答案 0 :(得分:1)
我们不直接在REST API中支持AAD。您的资源由Azure资源管理器管理,只有它可以验证某个用户是否有权访问此资源。 API密钥是我们将授权直接短路到资源而不是用户上下文的方式。
您为此AAD应用程序提供了此资源的访问权限,因此身份验证仍在用户的上下文中。必须转而致电ARM:'https://management.azure.com/subscriptions/xxxxxx/resourcegroups/xxxxx/providers/microsoft.insights/components/xxxxx/api/metrics/customMetrics%2Fmetrics?api-version=2014-12-01-preview×pan=PT2H&interval=PT20M&aggregation=min'
此处链接了文档 - 虽未明确说明:https://dev.applicationinsights.io/documentation/Authorization
这将使您获得更高的速率限制,并仍然返回与REST API相同的响应。