Xero OAuth API突然失效:返回非JSON响应的问题求助
错误详情
Error: [UnexpectedValueException] Invalid response received from Authorization Server. Expected JSON. in /var/www/html/mnr-be/vendor/league/oauth2-client/src/Provider/AbstractProvider.php on line 539
项目依赖(composer.lock片段)
{ "name": "cakephp/app", ... "type": "project", "version": "0.4.2", "license": "Private, no license granted", "repositories": [], "require": { "php": ">=7.2", "burzum/cakephp-service-layer": "^2.0", "cakephp/authentication": "^2.6", "cakephp/authorization": "^2.0", "cakephp/bake": "2.5.x", "cakephp/cakephp": "4.2.*", "cakephp/migrations": "^3.0", "cakephp/plugin-installer": "^1.2", "friendsofcake/crud-json-api": "^1.0.1", "friendsofcake/search": "^6.0", "josegonzalez/dotenv": "dev-master", "league/oauth2-client": "^2.5", "mobiledetect/mobiledetectlib": "^2.8", "robmorgan/phinx": "^0.12.4", "symfony/yaml": "^5.1", "xeroapi/xero-php-oauth2": "^2.1" }, }
服务器实际返回内容
<html> <head> <title>Access Denied</title> </head> <body> <h1>Access Denied</h1> You don't have permission to access "http://identity.xero.com/connect/token" on this server. <p>Reference #18.b0c35068.1667675819.108773f6</p> </body> </html>
已完成的排查
- 排除TLS版本问题:使用的ngrok v2和caddy v2均支持TLS 1.2
- 已将
xeroapi/xero-php-oauth2更新至最新版本2.17.0,问题未解决
问题原因分析
- 核心触发点:OAuth客户端库预期Xero身份验证服务器返回JSON格式响应,但实际收到的是HTML格式的"Access Denied"页面,导致解析失败抛出异常。
- 可能的根因:
- 重定向URI不匹配:Xero开发者后台配置的重定向URI白名单与当前应用使用的URI不一致(包括协议、域名、端口、路径)
- 客户端凭证失效:客户端ID/密钥过期、被修改或被Xero平台撤销
- 应用权限受限:Xero应用的授权范围被调整,或应用状态被暂停/限制
- IP拦截:Xero后台设置了IP白名单,当前服务的出口IP(如ngrok的节点IP)不在允许范围内
建议排查步骤
- 登录Xero开发者后台,核对应用的重定向URI,确保与当前代码中配置的完全一致
- 验证客户端ID和客户端密钥的正确性,确认未过期或被撤销
- 检查Xero应用的状态,确认未被平台限制访问
- 更换ngrok的区域节点,或使用固定域名的隧道服务,避免临时IP触发拦截
- 查看Xero开发者后台的应用日志,获取更详细的访问拒绝原因
内容的提问来源于stack exchange,提问作者geoidesic
相关产品推荐
相关产品推荐

