0

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

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

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

实际上我会得到报告嵌入的 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"
    }
};

现在我尝试在组中获取嵌入式令牌以进行报告

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

但是当我 为仪表板生成嵌入令牌时,我得到了一个有效的令牌。但这当然不适用于获取报告 API

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

4

1 回答 1

3

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

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) };
于 2020-10-07T13:27:22.060 回答