使用AAD对Application Insights REST API进行身份验证

时间:2017-03-23 14:04:28

标签: rest api authentication azure-application-insights

到目前为止,我成功使用了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);
    });
  }
});

enter image description here

我收到以下错误消息 The provided authentication is not valid for this resource The given API Key is not valid for the requested resource

我怀疑我错过了什么:)

1 个答案:

答案 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&timespan=PT2H&interval=PT20M&aggregation=min'

此处链接了文档 - 虽未明确说明:https://dev.applicationinsights.io/documentation/Authorization

这将使您获得更高的速率限制,并仍然返回与REST API相同的响应。