oflok000
Hola
Me preguntaba si es posible obtener un token de acceso usando js. Si es así, sería posible mostrarme una muestra.
var getAccessToken = function () { return new Promise(function (resolve, reject) { var url="https://login.microsoftonline.com/common/oauth2/token"; var username="login"; // Username of PowerBI "pro" account - stored in config var password = 'password'; // Password of PowerBI "pro" account - stored in config var clientId ='id' // Applicaton ID of app registered via Azure Active Directory - stored in config var headers = { 'Content-Type': 'application/x-www-form-urlencoded' }; var formData = { grant_type: 'password', client_id: clientId, resource: 'https://analysis.windows.net/powerbi/api', scope: 'openid', username: username, password: password }; console.log(request.post) request.post({ url: url, form: formData, headers: headers }, function (err, result, body) { console.log(result); }) }); }
Esto es lo que traté de hacer pero siempre tengo un problema.
Solicitud de origen cruzado bloqueada: la política de mismo origen no permite leer el recurso remoto en https://login.microsoftonline.com/common/oauth2/token. (Razón: falta el encabezado CORS ‘Access-Control-Allow-Origin’).
Traté de agregarlo en la cabeza para mi consulta de publicación, pero todavía no funciona
v-ljerr-msft
Hola @ oflok000,
Según mi investigación, es posible que deba utilizar ADAL.js para obtener el access_token en código js puro. Aquí hay un hilo similar para su referencia.
Código de muestra:
<!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>
Saludos
victordavid
Parece que esto ya no funciona. ¿Alguien tiene una solución para usar msal o adal para conectarse a powerbi api? ¿Cómo puedo obtener un token de powerbi como lo haría con OneDrive?
nnm
En respuesta a victordavid
¿Pudiste encontrar alguna solución para generar token de inserción usando javascript?
Si es así, publique aquí, estoy buscando lo mismo.
v-ljerr-msft
Hola @ oflok000,
Según mi investigación, es posible que deba usar ADAL.js para obtener el access_token en código js puro. Aquí hay un hilo similar para su referencia.
Código de muestra:
<!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>
Saludos
gmisslinwigo
En respuesta a v-ljerr-msft
Hola,
Me gustaría obtener el accesToken de un cliente.
Tengo su nombre de usuario, su contraseña y el enlace para un informe emebbed.
este es mi enlace: https://app.powerbi.com/groups/me/reports/mi-id-informe? ctid =mi-identificación-de-cliente
Entonces, con toda esta información, ¿puedo obtener el token de acceso para poder embed el informe por mi cuenta?
Traté de usar el código javascript de «v-ljerr-msft» pero no funciona con mi clientId.
Me sale este error:
Christy
En respuesta a gmisslinwigo
Estoy tratando de que este flujo funcione por mí mismo, así que sigue mi consejo con un grano de sal, pero parece que tienes una combinación incorrecta de identificación de inquilino e identificación de cliente. Intente usar solo «común» en lugar del ID de inquilino