如何读取通过 Oauth 身份验证的逻辑应用返回的异步 URL(在位置标头中)?
Posted
技术标签:
【中文标题】如何读取通过 Oauth 身份验证的逻辑应用返回的异步 URL(在位置标头中)?【英文标题】:How read async URL returned (in location header) by a Logic App authenticated through Oauth? 【发布时间】:2021-03-20 09:07:11 【问题描述】:我创建了一个 Logic App,它被配置为使用 AD Outh 进行身份验证,具体如下:
https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-securing-a-logic-app
这个逻辑应用需要大量时间来执行,并且为了避免超时,响应配置了 异步模式,如下所述:
https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/async-operations
使用 Bearer Token 的身份验证有效,逻辑应用使用 URL(在 Location 标头中)响应,最终将在其中存储响应。
问题是我无法访问此 URL,因为我收到下一个错误:
"error":
"code": "DirectApiAuthorizationRequired",
"message": "The request must be authenticated only by Shared Access scheme."
问题在于,当我使用 SAS 运行逻辑应用程序时,Location 标头中返回的 URL 仅包含 SAS 密钥,出于安全原因,我只需要使用 OAuth。
现在,如果尝试使用 Bearer 令牌访问此 URL,则响应为:
"error":
"code": "InvalidUseOfOAuthToken",
"message": "The requested operation is not supported, Use of open authentication token is only supported for workflow trigger request."
这里是 URL 的示例:
https://prod-05.southcentralus.logic.azure.com/workflows/a98d6ba3becd449db74ac0527a64ec57/runs/08585941366423271731798768425CU04/operations/c4d9cb98-03b3-4c44-87c3-5752c2ed403c?api-version=2016-10-01
因此,了解使用 OAuth 无法访问此 URL,如何通过使用 OAuth 使用逻辑应用来强制标头位置包含 SAS 参数?
【问题讨论】:
【参考方案1】:最后,提出的解决方案是为异步逻辑应用使用“创建过期回调 URL”功能,
https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-securing-a-logic-app#create-expiring-callback-urls
这包括为每次执行创建一个临时 URL,这些 URL 包含将创建日期的 SAS 参数。这些 URL 是通过使用不记名令牌调用 ARM Rest API 并指定它将停止工作的日期创建的。通过这种方式,使用 SAS 没有问题,因为它们是临时的。
https://docs.microsoft.com/en-us/rest/api/logic/workflowversions/listcallbackurl
【讨论】:
以上是关于如何读取通过 Oauth 身份验证的逻辑应用返回的异步 URL(在位置标头中)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 oauth2 通过 REST Web 服务进行身份验证
如何通过我的基本身份验证配置允许“/api/**”进入我在 Spring Security 中的 oauth 配置