如何让多用户应用对接多个独立Xero客户端?
解决Xero多用户授权访问问题
你当前的问题核心在于OAuth流程设计和App类型配置错误,以下是具体解决方法:
1. 调整Xero App类型
如果你的App是"Private"类型,它仅能访问与开发者账户绑定的租户(Demo/试用账户)。要支持任意客户授权,需将App类型改为Public(若需高级权限可选Partner):
- 登录Xero开发者后台,找到你的App,在"Settings"页修改App类型为Public。
- 配置准确的
redirect_uri:生产环境必须是HTTPS地址,开发环境可使用localhost,但需提前在Xero后台添加该地址。
2. 实现多用户OAuth授权流程
每个客户需单独完成授权,流程如下:
- 你的系统生成授权URL,核心参数示例:
response_type=code client_id=你的ClientID redirect_uri=已配置的回调地址 scope=accounting.transactions accounting.contacts(按需选择所需权限) state=随机生成的防CSRF字符串 - 引导客户点击该URL,跳转至Xero登录页面,客户使用自身Xero账户登录并授权你的App访问其租户。
- 授权成功后,Xero会跳转回你的
redirect_uri,返回code和之前传入的state。 - 你的系统携带
code调用Xero token端点获取凭证:
向https://identity.xero.com/connect/token发送POST请求,参数包括:grant_type=authorization_code code=授权返回的code client_id=你的ClientID client_secret=你的ClientSecret redirect_uri=已配置的回调地址 - 接口会返回该客户的
access_token、refresh_token,以及其名下的租户ID列表。
3. 存储客户专属凭证并按需调用
- 为每个客户单独存储
access_token、refresh_token及他们选定的租户ID(若客户有多个租户,需提供选择入口)。 - 后续推送发票时,调用Xero发票API时传入该客户的
access_token和指定租户ID,即可操作其个人Xero账户。
4. 关键注意事项
- 凭证隔离:严禁共用凭证,每个客户的凭证必须单独存储,保障数据安全与隔离。
- 凭证刷新:
access_token有效期仅30分钟,需用refresh_token定期刷新(有效期60天),刷新后及时更新存储的凭证。 - 权限最小化:仅申请业务必需的权限(如发票推送只需
accounting.transactions),避免过度申请提升客户信任度。 - 回调地址校验:确保
redirect_uri与Xero后台配置完全一致,生产环境必须使用HTTPS。
内容的提问来源于stack exchange,提问作者Dave Spencer
相关产品推荐
相关产品推荐

