问题描述
我试图了解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
我的目标是获取报告信息。有关信息,我可以使用访问令牌获得,但这并不安全
解决方法
对于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) };