Forum Discussion

ericOnline's avatar
ericOnline
Post Patron
5 years ago

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

    • ericOnline's avatar
      ericOnline
      Post 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. 

      • KarenL7's avatar
        KarenL7
        Advocate 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

         

  • I was able to dig through some Python examples to get more info (!) but still no success. 

    Here is where I am: 

    - Token server URL: https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token
    - 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:

    - Request URL: https://api.powerbi.com/v1.0/reports/<report_id here>/ExportTo
    - 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?
  • Dayspring's avatar
    Dayspring
    Regular Visitor

    ericOnline 

     

    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.

    • AmosHersch's avatar
      AmosHersch
      Microsoft 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.

      • Dayspring's avatar
        Dayspring
        Regular Visitor

        AmosHersch 

         

        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