如何从 Power BI 中的服务检索不记名令牌?
How do I retrieve a bearer token from a service in Power BI?
我正在尝试调用网络 API-- 比方说,https://myresources/getresources
。此调用需要 API 密钥、resourcesApiKey 和不记名令牌。必须从另一个服务 https://mytokenservice/jwt
获取令牌。它需要一个 API 密钥,tokenServiceApiKey。
我可以通过手动访问令牌服务并输入值来获取我的资源数据,但我想让 Power BI 为我处理所有这一切。我阅读了有关此 here 的内容,但这似乎适用于静态令牌。我们的改变了,所以我需要真正调用这项服务。
所以,我要做的是:
- 在我的报告中保存令牌服务 url 和 API 密钥。当报告为 运行 时,Power BI 应使用 url 和密钥来检索不记名令牌。
- 在我的报告中保存资源 API url 和 api 密钥。将在步骤 1 中检索到的不记名令牌与资源 API 键一起应用到对资源 API url 的调用中,以检索我真正想要的数据。
我认为 here 中描述的方法适用,但我无法让它发挥作用。这是我最近尝试使用 Power BI 高级编辑器的结果:
我使用管理参数在 Power BI 中创建了一个参数,然后使用高级编辑器,我输入了以下内容:
Web.Content(
"https://mytokenservice/jwt
",
[
ApiKeyName="tokenServiceApiKey"
]
)
我还为包含每个密钥的 tokenServiceApiKey 和 resourcesApiKey 创建了 Power BI 参数。
不过,当我在高级编辑器中单击“完成”时,它会自动围绕我编写的内容生成一些代码,因此它现在显示为,
Html.Table(Web.Content("https://mytokenservice/jwt",[ApiKeyName="tokenServiceApiKey"]), {})
编辑器中出现的是 table 图标,其中没有任何数据。我应该拿回一个字符串。我不知道从这里到哪里去,而且在网上找不到答案。
有没有办法实现我想要的?
我可能没有解释清楚,所以如果您需要更多信息或说明,请提问。
Number-1:您可以根据自己的目的构建自己的数据连接器。一些指南可以在这里找到- Click Here
NUmber-2:您还可以使用功率查询来连接您的源。最近我使用 oAuth2 API 为客户收集数据。您可以使用 Power/M 查询连接到任何 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"
我正在尝试调用网络 API-- 比方说,https://myresources/getresources
。此调用需要 API 密钥、resourcesApiKey 和不记名令牌。必须从另一个服务 https://mytokenservice/jwt
获取令牌。它需要一个 API 密钥,tokenServiceApiKey。
我可以通过手动访问令牌服务并输入值来获取我的资源数据,但我想让 Power BI 为我处理所有这一切。我阅读了有关此 here 的内容,但这似乎适用于静态令牌。我们的改变了,所以我需要真正调用这项服务。
所以,我要做的是:
- 在我的报告中保存令牌服务 url 和 API 密钥。当报告为 运行 时,Power BI 应使用 url 和密钥来检索不记名令牌。
- 在我的报告中保存资源 API url 和 api 密钥。将在步骤 1 中检索到的不记名令牌与资源 API 键一起应用到对资源 API url 的调用中,以检索我真正想要的数据。
我认为 here 中描述的方法适用,但我无法让它发挥作用。这是我最近尝试使用 Power BI 高级编辑器的结果:
我使用管理参数在 Power BI 中创建了一个参数,然后使用高级编辑器,我输入了以下内容:
Web.Content( "
https://mytokenservice/jwt
", [ ApiKeyName="tokenServiceApiKey" ] )
我还为包含每个密钥的 tokenServiceApiKey 和 resourcesApiKey 创建了 Power BI 参数。
不过,当我在高级编辑器中单击“完成”时,它会自动围绕我编写的内容生成一些代码,因此它现在显示为,
Html.Table(Web.Content("https://mytokenservice/jwt",[ApiKeyName="tokenServiceApiKey"]), {})
编辑器中出现的是 table 图标,其中没有任何数据。我应该拿回一个字符串。我不知道从这里到哪里去,而且在网上找不到答案。
有没有办法实现我想要的?
我可能没有解释清楚,所以如果您需要更多信息或说明,请提问。
Number-1:您可以根据自己的目的构建自己的数据连接器。一些指南可以在这里找到- Click Here
NUmber-2:您还可以使用功率查询来连接您的源。最近我使用 oAuth2 API 为客户收集数据。您可以使用 Power/M 查询连接到任何 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"