【问题标题】:DataBricks API PowershellDataBricks API Powershell
【发布时间】:2021-08-11 13:56:33
【问题描述】:

我在使用 databricks api 2.0 时遇到问题

invoke-rest 方法因以下错误而失败: “错误 400 io.jsonwebtoken.IncorrectClaimException:预期的 aud 声明为:https://management.core.windows.net/,但为: https://management.azure.com。”

我按照微软文档中的说明进行操作。

cls

$DataBrick = <DataBrickURL>

$DataBricksResourceID = <ResourceID>

$VaultName = <KeyVault>
$KeyName = <Key>

$apiEndpointUri = "https://management.azure.com"  
$tenantId = <TenantID>  
$applicationId = <ApplicationID> 
$secret = Get-AzKeyVaultSecret -VaultName $VaultName -Name $KeyName -AsPlainText

$RequestAccessTokenUri = "https://login.microsoftonline.com/$tenantId/oauth2/token"
$body = "grant_type=client_credentials&client_id=$applicationId&client_secret=$encodedSecret&resource=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d" 
$Managementbody = "grant_type=client_credentials&client_id=$applicationId&client_secret=$encodedSecret&resource=$apiEndpointUri"  
$contentType = 'application/x-www-form-urlencoded' 

$AccessToken = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $body -ContentType $contentType  
Write-Output $AccessToken
$ManagementToken = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $Managementbody -ContentType $contentType
Write-Output $Token

$apiuri = $DataBrick +"/api/2.0/clusters/get"
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer " + $AccessToken.access_token)
$headers.Add("X-Databricks-Azure-SP-Management-Token", $ManagementToken.access_token)
$headers.Add("X-Databricks-Azure-Workspace-Resource-Id", $DataBricksResourceID)

Invoke-RestMethod -Uri $apiuri -Headers $headers

【问题讨论】:

    标签: powershell databricks azure-databricks


    【解决方案1】:

    按照documentationresource 参数(你的apiEndpointUri 变量)应该是https://management.core.windows.net/,但你有https://management.azure.com

    【讨论】:

      【解决方案2】:

      基于例如问题中提到,正在发生以下步骤:

      1. 从 Microsoft 登录服务获取令牌,以获取提供的 databircs 资源 ID。
      2. 获取管理令牌。在您的示例中,它以“https://management.azure.com”的形式提供,这是不正确的。您还需要使用错误响应中提到的“https://management.core.windows.net/”。您可以参考 https://docs.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token#--api-access-for-service-principals-that-are-not-workspace-users 以供参考,该参考不适用于 Powershell,但足以了解身份验证流程
      3. 使用这两个令牌调用 Databricks API

      简而言之,如果您根据错误更正 apiEndpointUri。如果其他详细信息正确并配置了正确的权限,它应该可以工作。

      【讨论】:

      • 是的,现在我在尝试获取管理令牌时遇到了另一个错误“AADSTS500011:在名为 的租户中找不到名为 management.core.azure.com 的资源主体。如果应用程序尚未由租户管理员安装或租户中任何用户同意。您可能将身份验证请求发送给了错误的租户"
      • 您似乎没有在请求中为 client_id 提供正确的服务主体 ID。你为 applicationId 设置了什么?
      • 我直接从门户中设置了服务原则的应用注册中复制了它。我知道这两个项目是正确的。否则,仅获取访问令牌就会失败。但这行得通。只是在尝试获取管理令牌时才会发生该错误。
      • 只有其他可能性是 DatabricksResourceID 不正确或无权访问提供的租户。根据文档,格式为:/subscriptions//resourceGroups//providers/Microsoft.Databricks/workspaces/
      • 是的,我可以访问两者。我是我们所有订阅的所有者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多