Power BI嵌入式 - 访问令牌

8
3个回答

4

1
我已经将Power BI报告嵌入到我的Web应用程序中。在将报告嵌入到应用程序时,我遇到了一些问题,但最终我成功地嵌入了报告。以下是可以帮助您获取访问令牌的代码。
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.12/js/adal.min.js"></script>
        <script 

src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
            <script>
window.config = {
 instance: 'https://login.microsoftonline.com/',
 tenant: 'common', //COMMON OR YOUR TENANT ID
 clientId: '49df1bc7-db68-4fb4-91c0-6d93f770d1a4', //This is your client ID
 redirectUri: 'https://login.live.com/oauth20_desktop.srf', //This is your redirect URI
 callback: userSignedIn,
 popUp: true
};

var ADAL = new AuthenticationContext(config);

function signIn() {
 ADAL.login();
}

function userSignedIn(err, token) {
 console.log('userSignedIn called');
 if (!err) {
  showWelcomeMessage();
  ADAL.acquireToken("https://analysis.windows.net/powerbi/api", function(error, token) {
   // Handle ADAL Error
   if (error || !token) {
    printErrorMessage('ADAL Error Occurred: ' + error);
    return;
   }
   // Get TodoList Data
   $.ajax({
    type: "GET",
    url: "https://api.powerbi.com/v1.0/myorg/datasets",
    headers: {
     'Authorization': 'Bearer ' + token,
    },
   }).done(function(data) {
    console.log(data);
    // Update the UI
    $loading.hide();
   }).fail(function() {
    printErrorMessage('Error getting todo list data')
   }).always(function() {
    // Register Handlers for Buttons in Data Table
    registerDataClickHandlers();
   });
  });
 } else {
  console.error("error: " + err);
 }
}

function getDataSets() {
 var trythis = "Bearer " + token;
 var request = new XMLHttpRequest();
 request.open('GET', 'https://api.powerbi.com/v1.0/myorg/datasets'); request.setRequestHeader('Authorization', trythis);
 request.onreadystatechange = function() {
  if (this.readyState === 4) {
   console.log('Status:', this.status);
   console.log('Body:', this.responseText);
  }
 };
 request.send();
}

function showWelcomeMessage() {
 var user = ADAL.getCachedUser();
 var divWelcome = document.getElementById('WelcomeMessage');
 divWelcome.innerHTML = "Welcome " + user.profile.name;
}
</script>
    </head>
    <body>
        <button id="SignIn" onclick="signIn()">Sign In</button>
        <h4 id="WelcomeMessage"></h4>
    </body>
</html>

如果需要更多信息,您可以通过我提供的链接了解。 链接:https://community.powerbi.com/t5/Developer/get-Access-token-using-js/m-p/352093#M10472


1
我认为目前在Javascript中这是不可能的。 我曾经尝试过在Javascript中创建访问令牌,但无法找到方法。
最终我使用了一些服务器端代码(类似于此https://learn.microsoft.com/en-us/power-bi/developer/walkthrough-push-data-get-token),并将访问代码打印到隐藏的div中。 然后我用Javascript获取令牌,并从那里继续使用Javascript(创建嵌入式令牌并嵌入报告本身)。
可能可以通过代理实现一种Javascript解决方案,但这超出了我的专业领域(代理具有服务器端代码)。
我所知道的唯一纯Javascript解决方案是发布到Web -solution(https://learn.microsoft.com/en-us/power-bi/service-publish-to-web),但它存在一些限制和安全问题。

谢谢您的回复。请问您能告诉我获取嵌入式令牌的确切流程吗? - asn559
这是我所遵循的材料链接:https://github.com/Microsoft/PowerBI-JavaScript/wiki/Refresh-token-using-JavaScript-SDK-example 和 http://community.powerbi.com/t5/Developer/Refresh-a-Token-in-JavaScript/td-p/222867。 - Gigga
最近几天一直在尝试,但是仍然无法解决。你能帮我几个小时吗?我很愿意给你报酬。 - asn559
当然可以,您遇到了什么麻烦吗? 我的回答中少了一个链接,这是一个生成嵌入令牌函数的参考,但没有明确的实现说明。 这里有详细描述:https://msdn.microsoft.com/library/mt784614.aspx。因此,通过使用JavaScript的XMLHttpRequest,您就能够进行post请求。 - Gigga
我又在和EmbedToken搏斗,哈哈。 请问您能提供您的电子邮件或其他联系方式吗? - asn559
哈哈。我的意思是,你现在有什么,下一步是什么?是发POST请求吗?我会将电子邮件地址显示在我的个人资料中。 - Gigga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接