C# azure数据湖授权

C# azure数据湖授权,c#,azure,azure-data-lake,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

我是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);. 
错误消息是:

对象id为“e83bb777-f3af-4526-ae34-f5461a5fde1c”的客户端“e83bb777-f3af-4526-ae34-f5461a5fde1c”无权执行操作“Microsoft.authorization/permissions/read'over scope'/subscriptions/a0fb08ca-a074-489c-bed0-

  • 为什么ClientID与我在代码中使用的不同
  • 这是代码问题还是权限问题?我假设它是代码,因为ClientID不是我创建的授权的

  • 注意:订阅ID是正确的。

    我假设您创建了Azure Active Directory应用程序,并且您是该应用程序的客户端和域ID。如果没有,你就需要这个。。。如果您确实拥有该权限,那么您是否可以检查该应用程序是否具有对您的Data Lake Store的权限:

    我假设您创建了一个Azure Active Directory应用程序,并且您是该应用程序的客户端和域ID。如果没有,你就需要这个。。。如果您确实有,那么您是否可以检查应用程序是否对您的Data Lake Store具有权限:

    具有完全相同的症状。WebApp最初是在门户中的AAD中创建的,用于访问Azure Data Lake Store,同样的代码片段工作得非常好。当我决定重新使用同一个WebApp(clientid/secret)时,它失败了,并出现了相同的错误,尽管我在sub/RG/ADLA上为该应用程序指定了读者/参与者角色

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

    Get-AzureRmADSpCredential -objectid <object_id_from_error_msg>
    
    Get AzureRmADSpCredential-objectid
    
    如前所述添加了新密码

    New AzureRmADSpCredential-objectid-password$password
    
    在LoginSilentAsync中将pwd用作机密,clientId与以前一样-WebApp clientId(不是错误中显示的主体对象id)


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

    有完全相同的症状。WebApp最初是在门户中的AAD中创建的,用于访问Azure Data Lake Store,同样的代码片段工作得非常好。当我决定重新使用同一个WebApp(clientid/secret)时,它失败了,并出现了相同的错误,尽管我在sub/RG/ADLA上为该应用程序指定了读者/参与者角色

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

    Get-AzureRmADSpCredential -objectid <object_id_from_error_msg>
    
    Get AzureRmADSpCredential-objectid
    
    如前所述添加了新密码

    New AzureRmADSpCredential-objectid-password$password
    
    在LoginSilentAsync中将pwd用作机密,clientId与以前一样-WebApp clientId(不是错误中显示的主体对象id)


    我在门户中找不到这个主要信息,只有PS。

    @Mike Waggoner:你能告诉我最新情况吗?有帮助吗?@Mike Waggoner:你能告诉我最新情况吗?有帮助吗?