Powerbi 如何从Power BI中的服务检索承载令牌?
我正在尝试调用一个web API——比如,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能为我解决所有这些问题。我读了一些关于这方面的文章,但这似乎适用于静态令牌。我们的改变了,所以我需要呼叫这个服务 所以,
https://myresources/getresources
。此调用需要API密钥、resourcesApiKey和承载令牌。必须从另一个服务获取令牌,https://mytokenservice/jwt
。它需要API密钥tokenServiceApiKey
我可以通过手动访问令牌服务并输入值来获取资源数据,但我希望Power BI能为我解决所有这些问题。我读了一些关于这方面的文章,但这似乎适用于静态令牌。我们的改变了,所以我需要呼叫这个服务
所以,我想做的是:
- 我使用管理参数在Power BI中创建了一个参数,然后使用高级编辑器输入以下内容:
网页内容(
“
“, [ ApiKeyName=“令牌服务APIKEY” ] )https://mytokenservice/jwt
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。希望您能尽快找到解决方案。