如何从 Power BI 中的服务检索不记名令牌?

Rob*_*obC 1 powerbi powerbi-desktop webapi

我正在尝试调用 Web API——例如,https://myresources/getresources. 此调用需要 API 密钥、resourcesApiKey 和不记名令牌。令牌必须从另一个服务 获取https://mytokenservice/jwt。它需要一个 API 密钥 tokenServiceApiKey。

我可以通过手动访问令牌服务并输入值来获取资源数据,但我希望 Power BI 为我处理这一切。我在这里读到了一些关于此的内容,但这似乎适用于静态令牌。我们的改变了,所以我需要实际调用这项服务。

所以,我想做的是:

  1. 使用我的报告保存令牌服务 URL 和 API 密钥。运行报表时,Power BI 应使用 URL 和密钥来检索不记名令牌。
  2. 使用我的报告保存资源 API URL 和 API 密钥。将步骤 1 中检索到的不记名令牌以及资源 API 密钥应用于对资源 API url 进行的调用,以检索我真正需要的数据。

我认为这里描述的方法适用,但我无法让它发挥作用。以下是我最近使用 Power BI 高级编辑器尝试的操作:

  • 我使用管理参数在 Power BI 中创建了一个参数,然后使用高级编辑器,输入了以下内容:

    Web.Content(" https://mytokenservice/jwt", [ ApiKeyName="tokenServiceApiKey" ] )

我还为 tokenServiceApiKey 和 resourcesApiKey 创建了 Power BI 参数,其中包含每个参数的密钥。

不过,当我在高级编辑器中单击“完成”时,它会自动围绕我编写的内容生成一些代码,因此现在显示为:

Html.Table(Web.Content("https://mytokenservice/jwt",[ApiKeyName="tokenServiceApiKey"]), {})
Run Code Online (Sandbox Code Playgroud)

编辑器中出现的是一个不包含数据的表格图标。我应该拿回一根绳子。我不知道从这里该去哪里,并且在网上寻找答案时遇到困难。

有什么办法可以实现我所追求的目标吗?

我可能没有很好地解释它,所以如果您需要更多信息或澄清,请提问。

mkR*_*ani 5

第 1 点:您可以根据自己的目的构建自己的数据连接器。一些指南可以在这里找到 -单击此处

NUMBER-2:您还可以使用电源查询来连接您的电源。最近我使用 oAuth2 API 为客户收集了数据。您可以使用 Power/M Query 连接到任何 API。以下是我的案例的示例代码,在第一部分中,我收集了 access_token,在第二步中,我使用该访问令牌收集了数据。希望这能给您一些使用 Power Query 连接到任何 API 的想法。

let
    url = "your_authentication_url_here",

    body  = "{ ""client_id"": ""****"",  ""client_secret"": ""****"", ""grant_type"": ""****"", ""audience"":""****""}",
    tokenResponse = Json.Document(Web.Contents(url,[Headers = [#"Content-Type"="application/json"], Content = Text.ToBinary(body) ] )),
    AccessToken = tokenResponse[access_token],
    AccessTokenHeader = "Bearer " & AccessToken,


    data_url = "your_main_url_here",
    data_body = "{
                    ""authorization"": """& AccessTokenHeader & """,
                    ""content-type"": ""application/json""
                }",

    GetGroups = Json.Document(
        Web.Contents(
            data_url, 
            [
                Headers = Json.Document(data_body)
            ] 
        )
    ),    

    categories = GetGroups[categories], --Category here will be changed as per your retrned data

    #"Converted to Table" = Table.FromList(categories, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn
    (
        #"Converted to Table", "Column1", 
        {"ext_id", "shared", "report", "query", "_id", "description"}, --This is column returned from your data set
        {"ext_id", "shared", "report", "query", "_id", "description"}  -- Rename columns accordingly
    )
in
    #"Expanded Column1"
Run Code Online (Sandbox Code Playgroud)