Forum Discussion
URL, Scope and Grant_type to use when creating a PBI REST API access_token?
Hello,
I have an app registered within Azure. I'm able to make a token request to login.microsoft.com and get a successful response and receive an access_token.
However, when I try to use this access_token to access the PBI REST API, I get a Forbidden Status 403.
If I use an access_token based on my own credentials, I can access the API.
What is the correct URL, Scope and Grant_type to use when creating a PBI REST API access_token for a Service Principal?
10 Replies
- V-lianl-msftCommunity Support
Hi ericOnline ,
Please refer to this thread:
Best Regards,
Liang
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.- ericOnlinePost Patron
Thanks for the response, however the Service Principal is listed as "Admin" in both the Workspace and Dataset. What I need is: Which token URL, Grant_type and Scope to use when requesting a token based on Client_id and Client_secret.
Please advise.
- KarenL7Advocate V
Hi ericOnline
Was your issue ever resolved?
V-lianl-msft I have very similar issue I have successfully brought back the token correctly now using a script provided by one of your team but I am now getting
The only thing I am missing in my script is "Scope" as I am unsure what to use?
This is the post for reference
https://community.powerbi.com/t5/Desktop/Refreshable-Token-for-Admin-Rest-API/m-p/3152512#M1065083
This is the script I used from the above post
let //get token url = "https://login.microsoftonline.com/xxxxxxx/oauth2/token", GetJson = Web.Contents( url, [ Headers = [ Accept = "application/json", ContentType = "application/x-www-form-urlencoded" ], Content = Text.ToBinary( "grant_type=client_credentials& client_id=xxxxxxx& client_secret=xxxxxxx& scope=xxxxxx" ) ] ), token = Json.Document(GetJson)[access_token], //other api usage wiht above token Result = Web.Contents( "https://xxxxx.xxx.com", [ Headers = [ #"Content-Type" = "application/json", Authorization = "Bearer " + token, RelativePath = "/xxxxx/xxxxx" ] ] ) in Result
Do I need to add anything else to the script apart from the scope?
Thanks
Karen
- ericOnlinePost PatronI was able to dig through some Python examples to get more info (!) but still no success.Here is where I am:- Header: "Content-Type": "application/x-www-form-urlencoded"- Body: grant_type=client_credentials&client_id=<client_id here>&client_secret=<URL_Encoded Client_secret here>&scope=https://analysis.windows.net/powerbi/api/.default- Response: Status 200{"token_type": "Bearer","expires_in": 3599,"ext_expires_in": 3599,"access_token": "eyJ0e..."}However, when I try to use this token to access the PBI REST API, I get the following errors:- Headers:{"Content-Type": "application/json","Authorization": "Bearer <token from above response>"}- Body:{"format": "PNG"}- Response: Status 404; Not found{"statusCode": 404,"headers": {"Date": "Mon, 01 Mar 2021 19:05:07 GMT","Content-Length": "0"}}What is missing here?
- DayspringRegular Visitor
anyone, please help me with this, I've been stuck with the same error (403 forbidden). I have an app registered within Azure and even I can get the access token, but when I use the token to retrieve the datasets from API, it shows the above 403 error.
- AmosHerschMicrosoft Employee
Hi Dayspring
Does your service principal have access to the workspace (through a security group or directly)?
Did you try to see the response body, sometimes it has additional info for the reason you get the error.
- DayspringRegular Visitor
How to provide access to the workspace and also please provide the list of scopes that I should use while authenticating, as of now, I'm using the below scopes.
openid
offline_access
- ericOnlinePost Patron
Awesome, thank you! I can't find ANY documentation on the allowed scope values to send to "https://login.microsoftonline.com/xxxxxxx/oauth2/token".