Power BI Workspace-数据集凭证补丁程序收到401未经授权的

问题描述

我正在尝试通过混合使用PowerShell和PowerBI REST API将Power BI报表和数据集从一个工作区部署到另一个工作区。在新的工作区中,我正在更新数据集参数以指向新的数据库名称。

数据集指向Azure SQL数据库,并且在我的DEV工作区(克隆的源)中,数据集将访问用户的凭据传递到数据库。

我正在使用我创建的服务主体进行身份验证,然后以管理员身份添加到数据集中。

这是我为此编写的PowerShell代码:

$config = gc .\EnvConfig.json -raw | ConvertFrom-Json

$envSettings = $config.Dev
$toEnvSettings = $config.QA

# Convert to SecureString
[securestring]$secStringPassword = ConvertTo-SecureString $config.ServicePrincipalSecret -AsPlainText -Force
$userId = "$($config.ServicePrincipalId)@$($config.ServicePrincipalTenant)"
[pscredential]$credObject = New-Object System.Management.Automation.PSCredential ($userId,$secStringPassword)

Connect-PowerBIServiceAccount -Tenant $config.ServicePrincipalTenantName -ServicePrincipal -Credential $credObject

Get-PowerBIReport -WorkspaceId $envSettings.PBIWorkspaceId | ForEach-Object {
    $filename ="c:\temp\$($_.Name).pbix"
    Remove-Item $filename
    Invoke-PowerBIRestMethod -Method GET `
        -Url "https://api.powerbi.com/v1.0/myorg/groups/$($envSettings.PBIWorkspaceId)/reports/$($_.Id)/Export" `
        -ContentType "application/zip" -OutFile $filename

    New-PowerBIReport -WorkspaceId $toEnvSettings.PBIWorkspaceId -ConflictAction CreateOrOverwrite -Path $filename
}

$datasets = Get-PowerBIDataset -WorkspaceId $toEnvSettings.PBIWorkspaceId
$datasetId = $datasets[0].Id

$updateDBParam = "{`"updateDetails`": [ { `"name`": `"DBName`",`"newValue`": `"$($toEnvSettings.DBName)`" }]}"
$updateUri = "https://api.powerbi.com/v1.0/myorg/groups/$($toEnvSettings.PBIWorkspaceId)/datasets/$datasetId/Default.UpdateParameters"
Invoke-PowerBIRestMethod -Method POST -Url $updateUri -Body $updateDBParam

克隆了报表和数据集后,在新工作区中打开报表时,我看到一个错误,即数据集没有凭据:

Error on report header that the dataset does not have credentials

如果我使用我的个人登录信息来接管此数据集,则将加载报告。这还不够,我想设置凭据以编程方式通过用户的ID。

我在PowerBI网站上发现了this discussion,他们说您可以使用数据集中的数据集ID和网关ID,并将PATCH请求发送到https://api.powerbi.com/v1.0/myorg/gateways/[gateway id] / datasources / [datasource id ]

我怀疑这仅与“我的工作区”数据集有关,而与工作区中的数据集无关。

当我尝试使用通过对https://api.powerbi.com/v1.0/myorg/groups/[workspace id] / datasets / [dataset id] / datasources执行GET获取的网关和数据源ID发送该补丁请求时,出现401错误。我尝试使用自己的PowerBI Tenant Admin登录名以及通过PowerBI应用程序注册工具创建的Admin应用程序进行发布,并且还在AAD门户中为我的服务主体添加了租户级PowerBI读/写权限。什么都没用,我一直收到401。

两个问题:

  1. 我可以在工作区中的数据集上设置凭据吗?
  2. 如果没有,我如何在工作空间之间克隆数据集,以使其具有凭证传递开始?

解决方法

解决了问题。

401错误源于我自己发布的凭据,而不是源于我没有发布权限。我正在使用OAuth凭据方法,并且传递的令牌无效。 PowerBI API的响应只是一个简单的401错误,没有告诉用户问题在于该API验证了OAuth令牌并且失败了。

我使用无效的基本证书进行了测试,在这种情况下,您会收到400错误的请求错误,这更有意义。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...