蔚蓝数据湖授权

时间:2017-04-05 17:08:36

标签: c# azure azure-data-lake

我是Azure Data Lake Analytics的新手,在将存储过程提交到Azure Data Lake Analytics之前,我正在转换C#批处理作业以使用服务进行身份验证。

public void AuthenticateADLUser()               
{
    //Connect to ADL

    // Service principal / appplication authentication with client secret / key
    SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());           
    cTokenCreds = ApplicationTokenProvider.LoginSilentAsync(strDomain, strWebApp_clientId, strClientSecret).Result;           
    SetupClients(cTokenCreds,  strSubscriptionID);
}



public static void SetupClients(ServiceClientCredentials tokenCreds, string subscriptionId)
{
     _adlaClient = new DataLakeAnalyticsAccountManagementClient(tokenCreds);
     _adlaClient.SubscriptionId = subscriptionId;

     _adlaJobClient = new DataLakeAnalyticsJobManagementClient(tokenCreds);

     _adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(tokenCreds);
}

即使我已经给它正确的ClientId,当我执行以下代码时,错误会返回错误中的不同ClientID:

var jobInfo = _adlaJobClient.Job.Create(_adlsAccountName, jobId, parameters);. 

错误消息是:

  

客户' e83bb777-f3af-4526-ae34-f5461a5fde1c'对象id' e83bb777-f3af-4526-ae34-f5461a5fde1c'没有授权执行操作' Microsoft.Authorization / permissions / read'超范围' / subscriptions / a0fb08ca-a074-489c-bed0 -....

  1. 为什么ClientID与我在代码中使用的不同?
  2. 这是代码问题还是权限问题?我认为它是代码,因为ClientID不是我创建的授权。
  3. 注意:SubscriptionId是正确的。

2 个答案:

答案 0 :(得分:0)

我假设您创建了一个Azure Active Directory应用程序,并且您是此应用程序的客户端和域ID。如果没有,您将需要...如果您有,那么您可以检查应用程序是否具有Data Lake Store的权限:https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-authenticate-using-active-directory

答案 1 :(得分:0)

有完全相同的症状。 WebApp最初是在门户网站的AAD中创建的,用于访问Azure Data Lake Store,并且相同的代码片段运行良好。当我决定重新使用相同的WebApp(clientid / secret)时,即使我已经将sub / RG / ADLA上的读者/参与者角色发送到应用程序,它也会出现相同的错误。

我认为原因是下面的WebApp有一个“服务主体”对象(因此错误信息显示不同的对象ID),ADLA出于某种原因使用它。我没有凭证设置 - 空结果:

lon <- sample(1:5, size = 200, replace = TRUE)
lat <- sample(35:40, size = 200, replace = TRUE)
sst <- 1:200
time_years <- rep(rep(1:10, each = 10), 2)
time_months <- rep(rep(1:10, times = 10), 2)
time_year_months <- paste(time_years, time_months, sep = "-")
library(dplyr)
tibble(lat = as.numeric(lat), lon = as.numeric(lon), sst = as.numeric(sst), time_years, time_months, time_year_months) %>%
  filter(lon > -2, lon < 10, lat > 35, lat < 40) %>%
  group_by(time_year_months) %>%
  summarise(mean_sst = mean(sst))

添加了here

所述的新密码
Get-AzureRmADSpCredential -objectid <object_id_from_error_msg>

在LoginSilentAsync中使用pwd作为秘密,clientId与以前一样 - WebApp clientId(不是错误中显示的主要对象id)

我无法在门户网站中找到此主要信息,只有PS。