首页 > 解决方案 > 我可以用 Xero OAuth2 身份验证的子域覆盖回调 url

问题描述

我有一个 Rails 应用程序,它使用新的 OAuth2 身份验证访问 Xero,我们使用子域来隔离不同的组织。例如https://domain.example.com

迄今为止,我们必须为每个域创建一个新的 Xero 应用程序,因为我们必须为应用程序指定回调 url,在上面的例子中是https://domain.example.com/auth/xero_oauth/callback

是否可以使用https://example.com/auth/xero_oauth/callback的回调 URL 向 Xero 注册单个应用程序,然后在连接阶段覆盖 URL,添加子域。

我相当确定我可以使用以前的 OAuth1 版本来做到这一点。

标签: xero-api

解决方案


我也有这个要求,但这不是我第一次遇到 OAuth 应用程序的这个问题。

我通过将子域添加到state传递给初始授权步骤的参数来解决它,并传递回重定向​​ URI:

$state = json_encode(['uuid' => $uuid, 'subdomain' => $subdomain]);

然后在我的重定向 URI 中,我从状态中提取子域,并与 UUID 一起执行另一个重定向到该子域(以执行 CSRF 检查)。

这种方法的缺点是状态只会在成功时传递回来。如果 OAuth 流程遇到错误,您的重定向 URI 将无法确定正确的子域。

编辑:结果 Xero 确实返回状态,无论成功或失败:)


推荐阅读