Forum Discussion
REST API Get Access Token
- Anonymous5 years ago
Before you use Rest API to get access token, you need to registered a client app in Azure AD. Every portal has its url to get access token. The resource url for Power BI API is "https://analysis.windows.net/powerbi/api". Then you need to add parameter into your code body, like your Client ID( from your app) or your account and password.
Here I will show you two ways to get Power BI access token.
1. Get access token by Postman.
For reference: Solved: Power BI REST API using postman - generate embed t... - Microsoft Power BI Community
2. Try this code to get access token in visual studio by C#.
For reference: Get an authentication access token
using System; using Microsoft.IdentityModel.Clients.ActiveDirectory; namespace walkthrough_push_data { class Program { private static string token = string.Empty; static void Main(string[] args) { //Get an authentication access token token = GetToken(); } #region Get an authentication access token private static async Task<string> GetToken() { // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612 // and add using Microsoft.IdentityModel.Clients.ActiveDirectory //The client id that Azure AD created when you registered your client app. string clientID = "{Client_ID}"; //RedirectUri you used when you register your app. //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate. // You can use this redirect uri for your client app string redirectUri = "https://login.live.com/oauth20_desktop.srf"; //Resource Uri for Power BI API string resourceUri = "https://analysis.windows.net/powerbi/api"; //OAuth2 authority Uri string authorityUri = "https://login.microsoftonline.com/common/"; //Get access token: // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken // AuthenticationContext is part of the Active Directory Authentication Library NuGet package // To install the Active Directory Authentication Library NuGet package in Visual Studio, // run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console. // AcquireToken will acquire an Azure access token // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint AuthenticationContext authContext = new AuthenticationContext(authorityUri); var token = authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri)).Result.AccessToken; Console.WriteLine(token); Console.ReadLine(); return token; } #endregion } }Best Regards,
Rico Zhou
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Before you use Rest API to get access token, you need to registered a client app in Azure AD. Every portal has its url to get access token. The resource url for Power BI API is "https://analysis.windows.net/powerbi/api". Then you need to add parameter into your code body, like your Client ID( from your app) or your account and password.
Here I will show you two ways to get Power BI access token.
1. Get access token by Postman.
For reference: Solved: Power BI REST API using postman - generate embed t... - Microsoft Power BI Community
2. Try this code to get access token in visual studio by C#.
For reference: Get an authentication access token
using System;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
namespace walkthrough_push_data
{
class Program
{
private static string token = string.Empty;
static void Main(string[] args)
{
//Get an authentication access token
token = GetToken();
}
#region Get an authentication access token
private static async Task<string> GetToken()
{
// TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
// and add using Microsoft.IdentityModel.Clients.ActiveDirectory
//The client id that Azure AD created when you registered your client app.
string clientID = "{Client_ID}";
//RedirectUri you used when you register your app.
//For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate.
// You can use this redirect uri for your client app
string redirectUri = "https://login.live.com/oauth20_desktop.srf";
//Resource Uri for Power BI API
string resourceUri = "https://analysis.windows.net/powerbi/api";
//OAuth2 authority Uri
string authorityUri = "https://login.microsoftonline.com/common/";
//Get access token:
// To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
// AuthenticationContext is part of the Active Directory Authentication Library NuGet package
// To install the Active Directory Authentication Library NuGet package in Visual Studio,
// run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.
// AcquireToken will acquire an Azure access token
// Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
var token = authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri)).Result.AccessToken;
Console.WriteLine(token);
Console.ReadLine();
return token;
}
#endregion
}
}
Best Regards,
Rico Zhou
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
- allan_oliveira5 years agoFrequent Visitor
Anonymous, thanks for help!
- Analitika4 years ago
Post Prodigy
Hello how I could know application token usage in Power BI?
- Anonymous4 years agoNot applicable
hi, I use the same method and get the error message:
"AADSTS90019: No tenant-identifying information found in either the request or implied by any provided credentials.". what should I do?- bentocin4 years agoRegular Visitor
Hi Anonymous ,
You need to specify your tenant_id in your URL, e.g. https://login.microsoftonline.com/{{tenant_id}}/oauth2/v2.0/token. You can find the tenant_id in the Azure Portal > Azure AD > App Registrations > YOUR_APP > Overview.
- Sowjanya_094 years agoFrequent Visitor
Can we get a token in power bi desktop? I need to get a token from the government website API.
- Anonymous3 years agoNot applicable
Thanks for sharing the code. My question is, the above solution is using ADAL libraries rather than MSAL for getting the token. Is it ok to use this above code for long run or will this have any impact as Microsoft is going to retire this ADAL authentication in next couple of months. Please help me if you have the code for MSAL based token acquisition. Thank you so much.
- Satya_Machari3 years ago
Helper I
HI,
This url "https://analysis.windows.net/powerbi/api". saying
This site can’t be reached.Is this URL need to use in app registration ?pls correct me if i am wrong.
Please let me know any angular application to generae Access Token.
Thanks
Satya
- Don-Bot2 years ago
Helper V
This no longer works as the code gives out errors.
CS1503 Argument 2: cannot convert from 'string' to 'Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential'
CS1503 Argument 3: cannot convert from 'System.Uri' to 'Microsoft.IdentityModel.Clients.ActiveDirectory.UserAssertion' - GSai_Krishna2 years agoNew Member
Hi, i am trying to get access token from api, every time when api triggers it generates accesstoken, i have written code in node js, using the access token from api response, i am trying to create group in powerbi but i am getting 401 unauthorized error, i think it's related to accesstoken but when i inspect the powerbi application and i used the accesstoken then it's working, group got created in powerbi workspace, can you help me how to get accesstoken, here is my code
async function getAccessToken() {const tokenEndpoint = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`; // Replace tenantId with your tenant ID or 'common'const params = new URLSearchParams();params.append("grant_type", "client_credentials");params.append("client_id", clientId);params.append("client_secret", clientSecret);try {const response = await fetch(tokenEndpoint, {method: "POST",body: params,headers: {"Content-Type": "application/x-www-form-urlencoded",},});if (!response.ok) {const error = await response.json();throw new Error(`Error fetching token: ${error.error_description}`);}const data = await response.json();console.log("Access Token:", data.access_token);return data.access_token;} catch (error) {console.error("Error:", error);}}response _Response [Response] {
[Symbol(realm)]: null,
[Symbol(state)]: {
aborted: false,
rangeRequested: false,
timingAllowPassed: true,
requestIncludesCredentials: true,
type: 'default',
status: 401,
timingInfo: {
startTime: 175163.28119999985,
redirectStartTime: 0,
redirectEndTime: 0,
postRedirectStartTime: 175163.28119999985,
finalServiceWorkerStartTime: 0,
finalNetworkResponseStartTime: 0,
finalNetworkRequestStartTime: 0,
endTime: 0,
encodedBodySize: 0,
decodedBodySize: 0,
finalConnectionTimingInfo: null
},
cacheState: '',
statusText: 'Unauthorized',
headersList: _HeadersList {
cookies: null,
[Symbol(headers map)]: [Map],
[Symbol(headers map sorted)]: null
},
urlList: [ [URL] ],
body: { stream: undefined }
},
[Symbol(headers)]: _HeadersList {
cookies: null,