Я создаю собственный соединитель в Power Automate и присвоил ему триггер на основе веб-перехватчика. Как и в руководстве «Использование триггера веб-перехватчика», моя цель состоит в том, чтобы мой соединитель генерировал собственный URL-адрес веб-перехватчика, регистрировал его в моем собственном приложении при создании экземпляра и запускал поток, когда мое приложение отправляет запрос на URL-адрес.
Когда я создаю экземпляр триггера в потоке Power Automate, он правильно передает сгенерированный URL-адрес веб-перехватчика в мое приложение после сохранения потока. Однако когда я отправляю запрос на URL-адрес со своей стороны, я получаю следующий ответ HTTP 401:
{
"error": {
"code": "DirectApiAuthorizationRequired",
"message": "The request must be authenticated only by Shared Access scheme."
}
}
Если бы вместо этого это был экземпляр триггера «При получении HTTP-запроса», я мог бы решить эту проблему, установив «Кто может запустить поток?» параметр «Любой»:
Однако, поскольку это настраиваемый соединитель, такой параметр недоступен, и мне не удалось найти способ настроить видимость или стратегию авторизации созданных веб-перехватчиков.
Есть ли способ сделать веб-перехватчики пользовательских коннекторов вызываемыми из произвольной службы? А если нет, то как я могу настроить свою службу, чтобы ей было разрешено вызывать сгенерированные веб-перехватчики?
Мой пользовательский соединитель проходит проверку в веб-редакторе Power Automate и может генерировать и регистрировать URL-адрес веб-перехватчика в моей собственной службе. Я пробовал отправить запрос POST на URL-адрес Webhook с нескольких разных платформ (сервер моего приложения, Postman и т. д.) каждый раз с одним и тем же ответом 401. Все результаты, которые я нашел при поиске в Google вариантов «веб-перехватчика Power Automate Custom Connector DirectApiAuthorizationRequired», касались встроенного (не настраиваемого) триггера HTTP-коннектора (например ), остались без ответа ( например ), или были решены путем удаления заголовка аутентификации ( например), который я не использую.
Другие вещи, которые я пробовал:
Authorization = "SharedKey foo:bar"
на основе документов общего доступа, чтобы увидеть, что произойдет. Результат: {"error":{"code":"DirectApiInvalidAuthorizationScheme","message":"The provided authentication token is not valid. Only 'basic' or 'bearer' type of token is supported."}}
(подразумевается, что разрешена только базовая аутентификация или аутентификация на предъявителя?)Authorization = "Basic foo:bar"
. Результат: {"error":{"code":"AuthorizationFailed","message":"The provided authorization header value is not valid."}}
(подразумевается, что может быть способ предоставить действительные учетные данные с помощью базовой аутентификации?)Authorization = "Bearer foobar"
. Результат: {"error":{"code":"OAuthAccessPolicyNotFound","message":"'Authorization' header is not allowed, The OAuth authentication policy is not enabled for the workflow."}}
(подразумевается, что заголовок Authorization
вообще не следует использовать??)Оказалось, что это вина моего собственного приложения.
URL-адреса веб-перехватчиков Power Automate должны быть доступны для вызова без отдельной авторизации, поскольку они аутентифицируются через включенный параметр URL-адреса sig
. К сожалению, я настроил свой локальный столбец MySQL, в котором URL-адреса входящих веб-перехватчиков сохранялись как VARCHAR(255)
, и, что еще хуже, сохраненные значения автоматически усекались (поведение по умолчанию в старых версиях Rails), а не вызывали ошибку. Поскольку URL-адреса веб-перехватчиков Power Automate обычно длиннее 300 символов, конец каждого URL-адреса обрезался, и мое приложение сохраняло неполный URL-адрес без параметра sig=...
.
Если будущие пользователи столкнутся с подобным поведением, убедитесь, что приложение, получающее URL-адреса веб-перехватчиков, настроено на сохранение всего URL-адреса, а не только первых 255 символов.