Forum Discussion

nunovalente's avatar
nunovalente
New Member
9 years ago
Solved

Rest API - No GUI

I need to develop an API that when invoked via an endpoint will run an automatic data gathering service and add the results to a PowerBI Streaming Dataset, yet I can't seem to be able to achieve auth...
  • Eric_Zhang's avatar
    9 years ago

    nunovalente

    Anonymous

    I register a native app but generate the token not via the ADAL library. Instead I'm calling the REST API directly and the token generated could help me to refresh/retrive datasets etc.

     

     static string getAccessTokenSilently()
            {
                string resourceUri = "https://analysis.windows.net/powerbi/api";
                HttpWebRequest request = System.Net.HttpWebRequest.CreateHttp("https://login.windows.net/common/oauth2/token");
                //POST web request to create a datasource.
                request.KeepAlive = true;
                request.Method = "POST";
                request.ContentLength = 0;
                request.ContentType = "application/x-www-form-urlencoded"; 
    
                NameValueCollection parsedQueryString = HttpUtility.ParseQueryString(String.Empty);
                parsedQueryString.Add("client_id", clientID);
                parsedQueryString.Add("grant_type", "password");
                parsedQueryString.Add("resource", resourceUri);
                parsedQueryString.Add("username", username);
                parsedQueryString.Add("password", password);
                string postdata = parsedQueryString.ToString();
    
    
                //POST web request
                byte[] dataByteArray = System.Text.Encoding.ASCII.GetBytes(postdata); ;
                request.ContentLength = dataByteArray.Length;
    
                //Write JSON byte[] into a Stream
                using (Stream writer = request.GetRequestStream())
                {
                    writer.Write(dataByteArray, 0, dataByteArray.Length);
                    var response = (HttpWebResponse)request.GetResponse();
                    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                    dynamic responseJson = JsonConvert.DeserializeObject<dynamic>(responseString);
                    return responseJson["access_token"];
                }
    
    
            }