【问题标题】:How to authenticate app to respond to webhook events如何验证应用程序以响应 webhook 事件
【发布时间】: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?或者,是否有一些在线资源我可以查看以了解我缺少什么?

【问题讨论】:

标签: php oauth-2.0 webhooks exact-online


【解决方案1】:

您需要执行一次 OAuth 流程才能获取令牌。保存刷新令牌。 当您收到 webhook 通知时,使用之前保存的刷新令牌获取新令牌。不要忘记保存新的刷新令牌,因为旧令牌不再有效。 获取数据。

【讨论】:

  • 谢谢,Lennert - 这是有道理的:我会试一试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多