Как читать асинхронный URL-адрес, возвращенный (в заголовке местоположения) логическим приложением, прошедшим проверку подлинности через Oauth?

#azure #azure-logic-apps

#azure #azure-logic-apps

Вопрос:

Я создал логическое приложение, которое настроено для аутентификации с использованием 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

Аутентификация с использованием токена на предъявителя работает, и приложение Logic отвечает URL-адресом (в заголовке местоположения), в котором, наконец, будет сохранен ответ.

Проблема в том, что я не могу получить доступ к этому URL-адресу, потому что я получаю следующую ошибку:

 {
    "error": {
        "code": "DirectApiAuthorizationRequired",
        "message": "The request must be authenticated only by Shared Access scheme."
    }
}
 

Проблема в том, что URL-адрес, возвращаемый в заголовке местоположения, содержит ключи SAS только при запуске приложения Logic с использованием SAS, и мне нужно использовать только OAuth по соображениям безопасности.

Теперь, если попытаться получить доступ к этому 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

Итак, понимая, что невозможно получить доступ к этому URL-адресу с помощью OAuth, как я могу заставить местоположение заголовка включать параметры SAS, используя логическое приложение с помощью OAuth?

Ответ №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-адреса создаются из вызова API ARM Rest с использованием токена на предъявителя и указанием даты, с которой он перестанет работать. Таким образом, нет проблем с использованием SAS, поскольку они временные.

https://docs.microsoft.com/en-us/rest/api/logic/workflowversions/listcallbackurl