无法授权Azure LogAnalytics Workspace

Har*_*ddy 5 c# azure azure-active-directory azure-application-insights azure-log-analytics

在此输入图像描述我正在尝试连接到Azure门户中的工作区.我收到的错误是

操作返回无效的状态代码"未授权".

creds对象已经获取了身份验证令牌,我已经在我的应用程序中添加了资源权限,如此链接中所述

using System;
using Microsoft.Azure.OperationalInsights;
using Microsoft.Rest.Azure.Authentication;

namespace LogAnalytics
{
    class Program
    {
        static void Main(string[] args)
        {
            var workspaceId = "**myworkspaceId**";
            var clientId = "**myClientId**";

            var clientSecret = "**myClientSecret**";
            //<your AAD domain>
            var domain = "**myDomain**";
            var authEndpoint = "https://login.microsoftonline.com";
            var tokenAudience = "https://api.loganalytics.io/";

            var adSettings = new ActiveDirectoryServiceSettings
            {
                AuthenticationEndpoint = new Uri(authEndpoint),
                TokenAudience = new Uri(tokenAudience),
                ValidateAuthority = true
            };

            var creds = ApplicationTokenProvider.LoginSilentAsync(domain,clientId, clientSecret, 
                strong textadSettings).GetAwaiter().GetResult();            

            var client = new OperationalInsightsDataClient(creds);
            client.WorkspaceId = workspaceId;

            //Error happens below
            var results = client.Query("union * | take 5");

            Console.WriteLine(results);
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*Cai 1

操作返回无效状态代码“未经授权”。

根据错误消息和您提供的代码,您需要在Azure AD中注册的应用程序中添加权限。

在此输入图像描述

注意:如果您想向应用程序添加权限,您需要成为 admin,然后您可以使用ClientIdClientSecret来获取身份验证令牌并读取日志分析。

但是,如果您不是admin,您可以将权限委托给用户并使用用户名和密码访问 Azure AD。

要获取用户的身份验证令牌,您可以使用该函数UserTokenProvider.LoginSilentAsync(nativeClientAppClientid, domainName, userName, password).GetAwaiter().GetResult()来获取我们的凭据。