Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 如何从Power BI中的服务检索承载令牌?_Powerbi_Powerbi Desktop_Webapi - Fatal编程技术网

Powerbi 如何从Power BI中的服务检索承载令牌?

Powerbi 如何从Power BI中的服务检索承载令牌?,powerbi,powerbi-desktop,webapi,Powerbi,Powerbi Desktop,Webapi,我正在尝试调用一个web API——比如,https://myresources/getresources。此调用需要API密钥、resourcesApiKey和承载令牌。必须从另一个服务获取令牌,https://mytokenservice/jwt。它需要API密钥tokenServiceApiKey 我可以通过手动访问令牌服务并输入值来获取资源数据,但我希望Power BI能为我解决所有这些问题。我读了一些关于这方面的文章,但这似乎适用于静态令牌。我们的改变了,所以我需要呼叫这个服务 所以,

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

我可以通过手动访问令牌服务并输入值来获取资源数据,但我希望Power BI能为我解决所有这些问题。我读了一些关于这方面的文章,但这似乎适用于静态令牌。我们的改变了,所以我需要呼叫这个服务

所以,我想做的是:

  • 将令牌服务url和API密钥与我的报告一起保存。运行报告时,Power BI应使用url和密钥检索承载令牌
  • 将资源API url和API密钥与我的报告一起保存。将步骤1中检索到的承载令牌以及resources API密钥应用于对资源API url的调用,以检索我真正想要的数据
  • 我认为所描述的方法是适用的,但我无法让它发挥作用。以下是我最近使用Power BI advanced editor尝试的内容:

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

      网页内容( “
      https://mytokenservice/jwt
      “, [ ApiKeyName=“令牌服务APIKEY” ] )

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

    但是,当我在高级编辑器中单击“完成”时,它会自动生成一些关于我所写内容的代码,因此它现在可以读取

    Html.Table(Web.Content("https://mytokenservice/jwt",[ApiKeyName="tokenServiceApiKey"]), {})
    
    编辑器中显示的是不包含数据的表图标。我应该拿回一根绳子。我不知道从这里到哪里去,我在网上很难找到答案

    有没有办法完成我的目标


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

    第1条:您可以为自己的目的构建自己的数据连接器。以下是一些指南:

    第二:您还可以使用电源查询来连接源。最近,我使用OAuth2API为客户机收集了数据。您可以使用Power/M查询连接到任何API。下面是我的示例代码,在第一部分中,我收集了访问令牌,在第二步中,我使用该访问令牌收集了数据。希望这能让您了解如何使用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"
    

    第一:您可以为自己的目的构建自己的数据连接器。以下是一些指南:

    第二:您还可以使用电源查询来连接源。最近,我使用OAuth2API为客户机收集了数据。您可以使用Power/M查询连接到任何API。下面是我的示例代码,在第一部分中,我收集了访问令牌,在第二步中,我使用该访问令牌收集了数据。希望这能让您了解如何使用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"
    

    非常感谢您的回复。它帮助我完成了第2部分的工作(调用资源API),但只使用了硬编码的令牌。原因是我仍然无法访问承载令牌API,即使我使用了类似的方法——即,我只是创建了标题内容,就像您为“your_main_url_here”所做的那样,并将其设置为等于承载令牌调用的Headers参数。我收到这样一条消息:“我们无法使用提供的凭据进行身份验证。”所以它几乎可以正常工作。使用相同的代码,我从第二步动态收集承载访问令牌和数据。您可能需要根据您的API设置进行一些调整。“访问\令牌”是令牌响应的属性吗?是的,您必须手动将单词bearer添加到令牌之前,正如您在代码中看到的那样。非常欢迎@RobC。希望您能尽快找到解决方案。非常感谢您的回复。它帮助我完成了第2部分的工作(调用资源API),但只使用了硬编码的令牌。原因是我仍然无法访问承载令牌API,即使我使用了类似的方法——即,我只是创建了标题内容,就像您为“your_main_url_here”所做的那样,并将其设置为等于承载令牌调用的Headers参数。我收到这样一条消息:“我们无法使用提供的凭据进行身份验证。”所以它几乎可以正常工作。使用相同的代码,我从第二步动态收集承载访问令牌和数据。您可能需要根据您的API设置进行一些调整。“访问\令牌”是令牌响应的属性吗?是的,您必须手动将单词bearer添加到令牌之前,正如您在代码中看到的那样。非常欢迎@RobC。希望您能尽快找到解决方案。