Azure Data Lake服务到服务身份验证客户端密钥,AdalServiceException和WebException

时间:2017-03-29 01:39:52

标签: c# azure azure-active-directory azure-data-lake azure-authentication

Tyring使用以下文档来启动并运行我计划移植到Azure Functions的控制台应用程序。 https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-get-started-net-sdk

以下代码是我遇到的问题

CODE SNIP

// Service principal / appplication authentication with client secret / key
// Use the client ID of an existing AAD "Web App" application.
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

var domain = "<AAD-directory-domain>";
var webApp_clientId = "<AAD-application-clientid>";
var clientSecret = "<AAD-application-client-secret>";
var clientCredential = new ClientCredential(webApp_clientId, clientSecret);
var creds = await ApplicationTokenProvider.LoginSilentAsync(domain, clientCredential);

我的实施

SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
var domain = "https://microsoft.onmicrosoft.com";
var webApp_clientId = "<my-client-id>";
var clientSecret = "<my-client-secret>";
var clientCredential = new ClientCredential(webApp_clientId, clientSecret);
var creds = await ApplicationTokenProvider.LoginSilentAsync(domain, clientCredential);

SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());                       

_adlsClient = new DataLakeStoreAccountManagementClient(creds) { SubscriptionId = _subId };
_adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);

await _adlsFileSystemClient.FileSystem.MkdirsAsync("<name-of-my-dlstore>", "tempdir");

我还确保将我的应用权限授予Azure Data Lake实例中指定的文件夹: enter image description here

我还确保为此目录中的所有子文件夹提供相同级别或权限: enter image description here

指定文件路径的权限

enter image description here

当我运行我的实现时,我得到以下错误。有什么建议吗? System.AggregateException:&#39;发生了一个或多个错误。&#39;

内部异常1

AdalServiceException:AADSTS90002:请求的租户标识符&#39; https:&#39;无效。

追踪ID:d1718b0a-0533-4708-a311-4e1622840100

相关ID:a1544df2-692e-43d2-8acf-25a847956fb6

时间戳:2017-03-29 01:30:18Z

内部异常2

WebException:远程服务器返回错误:(400)Bad Request。

作为解决方案的一部分 需要确保为根文件夹提供读取,写入,执行权限(这将逐渐渗透到您希望为其提供这些权限的文件夹),然后从您不希望分配这些权限的所有其他文件夹中删除这些权限同样,请确保选择该选项以删除该子文件夹及其所有孩子/孩子的这些权限。

1 个答案:

答案 0 :(得分:1)

  
    

AdalServiceException:AADSTS90002:请求的租户标识符&#39; https:&#39;无效。

  

这是您的租户名称,例如&#34; microsoft.onmicrosoft.com&#34;

  
    

WebException:远程服务器返回错误:(400)Bad Request。

  

详细错误消息是什么,请参阅教程:

https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-get-started-net-sdk

我按照详细步骤使用带有客户端密钥的服务到服务身份验证,并成功创建了一个目录。以下代码供您参考:

  public static async Task  CreateDirectory()
    {

        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
        var domain = "microsoft.onmicrosoft.com";
        var webApp_clientId = "client id";
        var clientSecret = "client secret";
        var clientCredential = new ClientCredential(webApp_clientId, clientSecret);
        var creds = ApplicationTokenProvider.LoginSilentAsync(domain, clientCredential).Result;

        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

        _adlsClient = new DataLakeStoreAccountManagementClient(creds) { SubscriptionId = "_subId" };
        _adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);

        await _adlsFileSystemClient.FileSystem.MkdirsAsync("_adlsAccountName", "tempdir");

    }
    static void Main(string[] args)
    {
      CreateDirectory().Wait();
    }

修改

如果要创建目录,则需要为应用分配执行权限。租户ID和租户名称均可用,表示:

 var domain = "microsoft.onmicrosoft.com";
 //you could also use tenant id 
 var domain = "Your tenant ID";