无法授权 Azure LogAnalytics 工作区

Unable to authorize Azure LogAnalytics Workspace

我正在尝试连接到我在 Azure 门户中的工作区。我收到错误

Operation returned an invalid status code 'Unauthorized'.

creds 对象已获取身份验证令牌,并且我已将资源权限添加到我的应用程序中,如此 link

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();
        }
    }
}

Operation returned an invalid status code 'Unauthorized'.

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

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

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

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