obtener token de acceso usando js

Un usuario Pregunto ✅

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

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. Smiley feliz

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.

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. Smiley feliz

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:

AADSTS70001: Aplicación con identificador mi-identificación-de-cliente no se encontró en el directorio mi-directorio
Alguien me puede ayudar ?
Geoffrey

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *