【发布时间】:2019-10-13 00:23:58
【问题描述】:
在尝试自动执行 API 请求以响应接收到 webhook 通知时,我似乎忽略了一些关于身份验证的非常基本的内容,我们将不胜感激。
我很乐意通过 oauth2 授权码身份验证创建自定义应用程序以在我的浏览器中使用 Exact Online API。我还设置了 webhook,以便 Exact Online 将通知发送到 URL,然后接收、验证和保存数据,这在没有浏览器连接或 oauth2 身份验证的情况下发生。但是,我想在收到 webhook 通知时运行 API 查询,以便它们自动运行,我不知道如何获取 oauth2 授权码。
Webhook 数据很容易接收(无需验证),如下所示:
http_response_code(200); // Tell Exact I have received the data
$input = file_get_contents("php://input");
我可以轻松地在没有打开 oauth2-authenticated 通道到 Exact Online 的网页上捕获输入数据,并且在不打开浏览器实例的情况下发生 webhook 通知。另外,很容易通过发送打开一个 oauth2 认证的 API 链接
$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'] 获取授权码以在请求访问令牌和刷新令牌中使用。 但是如何在收到 webhook 时运行 API 查询? - 我看不到如何允许在浏览器上未打开的页面和 Exact Online 之间进行访问。
我已尝试在接收 webhook 的页面上包含授权请求:
$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 页面设置为接收 webhook 通知的 url,然后在运行 webhook 事件之前验证页面。这也不起作用,因为 webhook 通知将被发送到页面的不同实例。
Exact Online 不允许用户凭据身份验证 - 仅用于隐式和授权代码身份验证 - 而这两者都需要登录。当我收到通知时,如何进行身份验证以允许处理 webhook?或者,是否有一些在线资源我可以查看以了解我缺少什么?
【问题讨论】:
-
谢谢,Carmel - 我认为 Lennert 的方法会奏效。
标签: php oauth-2.0 webhooks exact-online