【问题标题】:Cannot generate embed token using access token in power bi无法在 power bi 中使用访问令牌生成嵌入令牌
【发布时间】:2020-10-05 17:22:34
【问题描述】:

我正在尝试了解 power bi API 中的授权机制

我会在我的网络应用程序中嵌入一个报告。

我已经完成了docs中提到的步骤

其实我会得到报告嵌入的 url,然后使用 power bi JS API 嵌入报告。

获取access_token成功

var options = {
    'method': 'POST',
    'url': `https://login.microsoftonline.com/${process.env.TENANT_ID}/oauth2/token`,
    'headers': {
        'Content-Type': 'multipart/form-data'
    },
    formData: {
        'grant_type': process.env.GRANT_TYPE,
        'client_id': process.env.CLIENT_ID,
        'client_secret': process.env.CLIENT_SECRET,
        'resource': "https://analysis.windows.net/powerbi/api",
        'Scope': "https://analysis.windows.net/powerbi/api/.default"
    }
};

现在我尝试获取embedded token for report in group

var data = { accessLevel: "View", datasetId: "5b11d62a-803e-46c9-83f3-*****" };

var config = {
    method: 'post',
    url: `https://api.powerbi.com/v1.0/myorg/groups/${process.env.GROUP_ID}/reports/${process.env.Report_ID}/GenerateToken`,
    headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${JSON.parse(response).access_token}`
    },
    data: data
};
let embedtoken
try {
    embedtoken = await axios(config)
}
catch (e) {
    console.log(e)
}

context.res = {
    // status: 200, /* Defaults to 200 */
    body: JSON.parse(response).access_token
};

我收到错误400 response

但是当我生成an embed token for dashboard 时,我得到了一个有效的令牌。但这当然不适用于get report API

我的目标是获取报告信息。有关信息,我得到了使用访问令牌但它不安全的信息

【问题讨论】:

  • 没有尝试您的代码。但datasetId 用于创建报告。仅在生成 EmbedToken 以创建报告时适用。您的accessLevel 是“查看”而不是“创建”。也许他们彼此冲突。如果您只需要“查看”,请尝试删除 datasetId
  • 您好,您尝试我的建议了吗?有更新吗?
  • 试过但没用..

标签: azure-active-directory powerbi powerbi-embedded powerbi-api


【解决方案1】:

对于 POST API 请求,数据应以字符串格式传递。这可以通过使用例如 JSON.stringify(data) 来完成。 请参阅下面的代码 sn-p 应该可以解决错误。

var config = {
 method: 'post',
 url: `https://api.powerbi.com/v1.0/myorg/groups/${process.env.GROUP_ID}/reports/${process.env.Report_ID}/GenerateToken`,
 headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${JSON.parse(response).access_token}`
 },
data: JSON.stringify(data) };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2023-02-03
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多