Как аутентифицировать приложение для ответа на события webhook - PullRequest
0 голосов
/ 27 мая 2019

Я, кажется, упускаю из виду нечто совершенно фундаментальное в отношении аутентификации, когда пытаюсь автоматизировать запрос API в ответ на получение уведомления через веб-крючок, и любая помощь будет признательна.

Мне удобно создавать собственное приложение для работы с Exact Online API в моем браузере с помощью аутентификации кода авторизации oauth2. Я также настроил webhooks так, чтобы Exact Online отправлял уведомления на URL, который затем получает, проверяет и сохраняет данные, и это происходит без подключения к браузеру или аутентификации oauth2. Однако я хотел бы запускать запросы API при получении уведомлений о веб-крюках, чтобы они выполнялись автоматически, и я не знаю, как получить код авторизации oauth2.

Данные Webhook легко принимаются (без проверки) следующим образом:

http_response_code(200); // Tell Exact I have received the data
$input = file_get_contents("php://input");

Я легко могу захватить входные данные на веб-странице, у которой нет открытого канала с аутентификацией oauth2 для Exact Online, и уведомление о веб-крюке происходит без открытия экземпляра браузера. Кроме того, легко открыть ссылку API с аутентификацией oauth2, отправив

$authCodeRequest = "https://start.exactonline.co.uk/api/oauth2/auth?response_type=code&client_id=%-my-client-id-%7D&redirect_uri=my-site-redirect";
header('Location: ' . $authCodeRequest);
die('Request failed');

и использование $ _GET ['code'] для получения кода авторизации для использования в запросе токена доступа и обновления токена. Но как я могу выполнить запрос API при получении webhook? - Я не вижу, как разрешить доступ между страницей, которая не открыта в браузере, и Exact Online.

Я попытался включить запрос на авторизацию на странице, получающей веб-крючок:

$authCodeRequest = "https://start.exactonline.co.uk/api/oauth2/auth?response_type=code&client_id=%-my-client-id-%7D&redirect_uri=my-site-redirect";
header('Location: ' . $authCodeRequest);
die(fwrite('Request failed'));

Это имеет смысл, поскольку страница не может волшебным образом открываться в случайном браузере для запроса входа пользователя.

Я также попытался сделать страницу API URL-адресом для получения уведомлений о webhook, а затем аутентифицировать страницу перед запуском события webhook. Это также не сработало, так как уведомление веб-крючка будет отправлено другому экземпляру страницы.

Exact Online не допускает аутентификацию учетных данных пользователя - только для неявной аутентификации и аутентификации с использованием кода авторизации - и то и другое требует входа в систему. Как пройти проверку подлинности, чтобы разрешить обработку веб-крючков при получении уведомления? Или есть какой-нибудь онлайн-ресурс, на который я могу посмотреть, чтобы понять, что мне не хватает?

1 Ответ

0 голосов
/ 27 мая 2019

Вам нужно пройти через поток OAuth один раз, чтобы получить токены. Сохраните маркер обновления. Когда вы получаете уведомление о подключении через Интернет, получите новые токены с ранее сохраненным токеном обновления. Не забудьте сохранить новый токен обновления, так как старые токены больше не действительны. Получить данные.

...