尽管凭据有效,但应请求从 Xero API 收到 403 错误

问题描述

我们遇到了一个集成客户的问题,该客户无法使用 oauth2 系统为其三个租户中的两个进行同步。其中一个同步正确且没有问题,但另外两个返回以下内容

[403] Client error: GET https://api.xero.com/api.xro/2.0/Accounts resulted in a 403 Forbidden response:
{"Type":null,"Title":"Forbidden","Status":403,"Detail":"AuthenticationUnsuccessful" (truncated...)

最初我们认为这是一个简单的身份验证问题,但是他们的访问令牌能够毫无错误地刷新。所有三个租户都具有相同的范围设置:

"scope": [
    "email","profile","openid","accounting.settings","accounting.transactions","accounting.contacts","offline_access"
  ]

而且我可以确认他们的租户 ID 被正确传递给 SDK 方法(在本例中为 getAccounts)。断开和重新连接没有帮助。

这似乎是一个相当普遍的问题,但我为它找到的解决方案都不适用于我们的案例。无论如何,我已经知道了。

解决方法

所以我们设法解决了这个问题。事实证明,用户从他们这边禁用了我们的集成(Xero 提供了从 Xero 内部撤销授权的选项),让他们看起来仍然与我们保持联系,但不再有权使用这两个租户。>

需要注意的一点(这引起了一些混淆)是,使用 OAuth 的访问/刷新令牌身份验证与 Xero 的逐个租户授权是分开的,这使我们能够保持刷新访问而无法使用该访问权限。