【问题标题】:azure data lake authorization天蓝色数据湖授权
【发布时间】:2017-08-31 10:35:14
【问题描述】:

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

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”操作“/订阅/a0fb08ca-a074-489c-bed0-....

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

注意:SubscriptionId 是正确的。

【问题讨论】:

    标签: c# azure azure-data-lake


    【解决方案1】:

    我假设您创建了一个 Azure Active Directory 应用程序,并且您是该应用程序的客户端 ID 和域 ID。如果没有,您将需要...

    【讨论】:

    • @Mike Waggoner:你能提供一个更新吗?有帮助吗?
    【解决方案2】:

    有完全相同的症状。 WebApp 最初是在门户中的 AAD 中创建的,用于访问 Azure Data Lake Store,并且相同的代码-sn-p 运行良好。当我决定重新使用相同的 WebApp(clientid/secret)时,它失败并出现同样的错误,即使我已将 sub/RG/ADLA 上的读者/贡献者角色分配给了该应用程序。

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

    Get-AzureRmADSpCredential -objectid <object_id_from_error_msg>
    

    here所述添加新密码

    New-AzureRmADSpCredential -objectid <object_id_from_error_msg> -password $password
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      相关资源
      最近更新 更多