У меня тоже есть это требование, но я не первый раз сталкиваюсь с этой проблемой с приложениями OAuth.
Я обхожу его, добавляя поддомен к параметру state
, который передается в на начальный этап авторизации, и передается обратно на URI перенаправления:
$state = json_encode(['uuid' => $uuid, 'subdomain' => $subdomain]);
Затем в своем URI перенаправления я извлекаю поддомен из состояния и выполняю еще одно перенаправление на этот поддомен вместе с UUID (для выполнения Проверка CSRF).
Недостатком этого подхода является то, что состояние передается только в случае успеха; если поток OAuth обнаружит ошибку, ваш URI перенаправления не сможет определить правильный поддомен.
EDIT : Оказывается, Xero возвращает состояние независимо от успеха или ошибка:)