Azure Data Lake 服务到服务身份验证客户端密码、AdalServiceException 和 WebException
Azure Data Lake Service-to-service authentication client secret, AdalServiceException and WebException
尝试使用以下文档来完成此操作,并 运行ning 我计划移植到 Azure Functions 的控制台应用程序。 https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-get-started-net-sdk
下面的代码是我卡住的地方
代码片段
// 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 实例中的指定文件夹:
我还确保为该目录中的所有子文件夹赋予相同级别或权限:
已为文件路径分配权限
当我 运行 我的实现出现以下错误。有什么建议吗?
System.AggregateException: 'One or more errors occurred.'
内部异常 1
AdalServiceException:AADSTS90002:请求的租户标识符 'https:' 无效。
跟踪 ID:d1718b0a-0533-4708-a311-4e1622840100
关联 ID:a1544df2-692e-43d2-8acf-25a847956fb6
时间戳:2017-03-29 01:30:18Z
内部异常 2
WebException:远程服务器返回错误:(400) 错误请求。
作为解决方案的一部分
需要确保授予根文件夹读取、写入、执行权限,(这将滴落到您要为其授予这些权限的一个文件夹)然后从您不希望分配这些权限的所有其他文件夹中删除这些权限,确保您 select 删除该子文件夹及其所有权限的选项 kiddos/children。
AdalServiceException: AADSTS90002: Requested tenant identifier 'https:' is not valid.
那是你的租户名字,比如"microsoft.onmicrosoft.com"。
WebException: The remote server returned an error: (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";
尝试使用以下文档来完成此操作,并 运行ning 我计划移植到 Azure Functions 的控制台应用程序。 https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-get-started-net-sdk
下面的代码是我卡住的地方
代码片段
// 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 实例中的指定文件夹:
我还确保为该目录中的所有子文件夹赋予相同级别或权限:
已为文件路径分配权限
当我 运行 我的实现出现以下错误。有什么建议吗? System.AggregateException: 'One or more errors occurred.'
内部异常 1
AdalServiceException:AADSTS90002:请求的租户标识符 'https:' 无效。
跟踪 ID:d1718b0a-0533-4708-a311-4e1622840100
关联 ID:a1544df2-692e-43d2-8acf-25a847956fb6
时间戳:2017-03-29 01:30:18Z
内部异常 2
WebException:远程服务器返回错误:(400) 错误请求。
作为解决方案的一部分 需要确保授予根文件夹读取、写入、执行权限,(这将滴落到您要为其授予这些权限的一个文件夹)然后从您不希望分配这些权限的所有其他文件夹中删除这些权限,确保您 select 删除该子文件夹及其所有权限的选项 kiddos/children。
AdalServiceException: AADSTS90002: Requested tenant identifier 'https:' is not valid.
那是你的租户名字,比如"microsoft.onmicrosoft.com"。
WebException: The remote server returned an error: (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";