Forum Discussion
How to convert API call with credentials
Dear,
I have a Dataverse DataFlow that connects to a third party API, which uses simple authentication.
In the first part, I get the accesstoken by putting my email address and password in the body:
AccessToken = let
GetJson = Json.Document(Web.Contents("https://xxxxx.com/api/v2/users/me/login", [Headers=[Accept="application/json", #"Content-Type"="application/x-www-form-urlencoded;charset=UTF-8"], Content=Text.ToBinary("email=xxxxxxxxxx&password=xxxxxxxxxxx")])),
data = GetJson[data],
#"Converted to Table" = Record.ToTable(data),
#"Filtered Rows" = Table.SelectRows(#"Converted to Table", each [Name] = "accessToken"),
Value = #"Filtered Rows"{0}[Value]
in ValueIn the second part, I use the accesstoken to call an API request:
let
AccesTokenvalue = AccessToken,
Source = Json.Document(Web.Contents("https://xxxxxxxx.com/api/v2/getdata", [Headers=[Authorization="Bearer " & AccesTokenvalue]])),
data = Source[data]
in
data
in
data;How can I convert this to a query where the credentials can be taken out of the query code, so that the password can remain hidden for users looking into the query?
Thanks,
Koen
4 Replies
- mahoneypatMicrosoft Employee
Not sure how ofter your token needs to be refreshed, but one way would be to create a Dataflow with your token query, and then use that Dataflow as the source for the token.
Pat
- Syndicate_AdminAdministrator
Hi Pat,
Would that mean that I somehow save the result of the first "accesstoken" dataflow somewhere in Dataverse? And then I should use that in the "real" dataflow?
If that's the case, I have not yet found a way to call Dataverse data in a dataflow, I probably missed the correct documentation for that somehow; can you point me to documentation / examples of your suggestion?
The token is only valid for a two minutes; I need to call the API every five minutes...
Thanks,Koen
- mahoneypatMicrosoft Employee
I was proposing to use a Dataflow that only you had access to (to secure the login info), and using the output of that in a second dataflow that holds the actual data. Given your 2 and 5 minute requirements, I don't think that would work well. I don't know a good way to do what you are looking to do.
Pat