Don't miss your chance to take the Fabric Data Engineer (DP-700) exam on us!
Learn moreWe've captured the moments from FabCon & SQLCon that everyone is talking about, and we are bringing them to the community, live and on-demand. Starts on April 14th. Register now
Hi.
I need some help getting data from an API using OAuth & bearer token.
Here is the code that I currently have:
let
//Create the variables
TokenURL = "xxx",
clientId = "xxx",
clientSecret = "xxx",
//Create the Token Request
GetJson = Web.Contents(TokenURL,
[
Headers = [#"Content-Type"="application/json"],
Content = Text.ToBinary("{""clientId"":" & clientId &",""clientSecret"":"& clientSecret & "}"
) ]
),
FormatAsJson = Json.Document(GetJson),
// Gets token from the Json response
AccessToken = FormatAsJson[access_token],
AccessTokenHeader = "bearer " & AccessToken,
// ???
GetJsonQuery = Web.Contents("xxx",
[
Headers = [#"wb-authorization"=AccessTokenHeader]
]
),
FormatAsJsonQuery = Json.Document(GetJsonQuery)
in
#"FormatAsJsonQuery"
I am receiving an error DataSource.Error: Web.Contents failed to get contents from 'xxx' (400): Bad Request
So I suspect that my syntax may be incorrect on this line:
Content = Text.ToBinary("{""clientId"":" & clientId &",""clientSecret"":"& clientSecret & "}"
I have test the request in Postman using this curl and it works
curl --location --request POST 'xxx' \
--header 'Content-Type: application/json' \
--data-raw '{ "clientId": "xxx", "clientSecret": "xxx"
}'
Your problem is is Create the token request part , so just correct that part with this code, it will work.
let apiUrl = "https://login.windows.net/61xxxxxxxxxxxx/oauth2/token", body = [ client_id="3728xxxxxxxxxxxxxx5", client_secret="bxxxxxxxxxxxxh" ], Source = Json.Document(Web.Contents(apiUrl, [Headers = [Accept = "application/json"], Content = Text.ToBinary(Uri.BuildQueryString(body))])) in Source
Hi @pablopablo ,
Could you please use following query to see if the problem is in create the tekon request step?
let
//Create the variables
TokenURL = "xxx",
clientId = "xxx",
clientSecret = "xxx",
//Create the Token Request
GetJson = Web.Contents(TokenURL,[Headers = [#"Content-Type"="application/json"],Content = Text.ToBinary("{""clientId"":" & clientId &",""clientSecret"":"& clientSecret & "}")])
in
GetJson
we can also try to use some tools to see if power bi desktop has send the right web request, such as Fiddler Trace: https://docs.microsoft.com/en-us/power-bi/developer/embedded-troubleshoot
Best regards,
Hi,
I managed to get this working to the point where it is collecting a token and parsing it to the endpoint, however I am now getting an error - "Please specify how to conect"
code is:
/*
*/
let
//Create the variables
TokenURL = "xxx",
clientId = """xxx""",
clientSecret = """xxx""",
//Create the Token Request
GetJson = Web.Contents(TokenURL,
[
Headers = [#"Content-Type"="application/json"],
Content = Text.ToBinary("{""clientId"": " & clientId & ", ""clientSecret"": "& clientSecret & "}")
]
),
FormatAsJson = Json.Document(GetJson),
// Gets token from the Json response
AccessToken = FormatAsJson[access_token],
AccessTokenHeader = "bearer " & AccessToken,
// ???
GetJsonQuery = Web.Contents("xxx",
[
Headers=[#"wb-authorization"= AccessTokenHeader, ContentType="application/json"]
]
),
FormatAsJsonQuery = Json.Document(GetJsonQuery)
in
#"FormatAsJsonQuery"
Hi @pablopablo ,
It seems like add "" to the client fix the previous problem? If you got a warning like following, please try to edit with Anonymous since you have put the token inside the Header.
Best regards,
Yeah I added the Anonymous but now getting this error
'We couldn't authenticate with the credentials provided. Please try again'
However I can see it create the token and parse it through. I try the token in postman and it works successfully.
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.
A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.
Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.
| User | Count |
|---|---|
| 5 | |
| 3 | |
| 3 | |
| 2 | |
| 2 |
| User | Count |
|---|---|
| 9 | |
| 8 | |
| 7 | |
| 5 | |
| 5 |