所以我在Power BI中有一些图表,我想与我的客户分享。
我在我的服务器上创建了一个自定义页面,并尝试使用Power BI Embedded设置嵌入这些图形。
我关注此链接https://docs.microsoft.com/en-us/power-bi/developer/get-azuread-access-token
但是,如何通过javascript API获取访问令牌?
答案 0 :(得分:4)
生成EmbedToken基本上是一个REST API调用。您可以使用NodeJs或AJAX发出此请求并获取您的EmbedToken。
对于AAD身份验证,我可以将您推荐给ADAL.js:https://github.com/AzureAD/azure-activedirectory-library-for-js
可以帮助对抗AAD
答案 1 :(得分:1)
我认为目前Javascript不可能。我试图在很久以前用Javascript创建访问令牌,但未能找到办法做到这一点。
我最终做了一些服务器端代码(类似于此https://docs.microsoft.com/en-us/power-bi/developer/walkthrough-push-data-get-token)并将访问代码打印到隐藏的div。然后我用Javascript抓住了令牌并继续使用Javascript(创建了嵌入式令牌并嵌入了报告本身)。
可能可以使用代理执行某种Javascript解决方案,但这超出了我的专业知识(代理具有服务器端代码)。
我所知道的唯一纯粹的Javascript解决方案是Publish to web -solution(https://docs.microsoft.com/en-us/power-bi/service-publish-to-web),但它有一些限制和安全问题。
答案 2 :(得分:0)
我已经将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