5

在此处输入图像描述我正在尝试连接到 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();
        }
    }
}
4

1 回答 1

1

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

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

在此处输入图像描述

注意:如果您想为应用程序添加权限,您需要是 admin,然后您可以使用ClientIdandClientSecret获取 Authentication Token 并读取日志分析。

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

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

于 2018-07-31T03:32:53.230 回答