如何读取通过 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 服务进行身份验证

如何在 oauth2 身份验证之上实现用户权限

如何通过我的基本身份验证配置允许“/api/**”进入我在 Spring Security 中的 oauth 配置

OAuth 2.0应该用于身份验证超时吗?

如何在 IBM Worklight 6.0 中实现 OAUTH 2.0

如何使用 oAuth2 对 SPA 用户进行身份验证?