Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago

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 Value

In 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

  • mahoneypat's avatar
    mahoneypat
    Microsoft 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_Admin's avatar
      Syndicate_Admin
      Administrator

      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

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