Я строю приложение, используя гнездо API. Мы можем успешно авторизовать пользователя с помощью API, однако, если пользователи аннулируют авторизацию приложения из своей учетной записи, API возвращает не 401 несанкционированный ответ, а полный ответ, как если бы пользователь не отозвал доступ к токену.
Вот шаг за шагом, как я тестировал:
Сначала пользователь заходит на наш сайт, мы просим URL-адрес авторизации для вложения
https://home.nest.com/login/oauth2?client_id=%s&state=%s
Где обе строки заменены соответственно ключом продукта и строкой случайного состояния.
Оттуда пользователь может авторизовать приложение, затем оно будет перенаправлено на настроенный URL-адрес перенаправления продукта.
Затем мы запрашиваем токен длинного доступа, который мы также получаем правильно.
Затем пользователь может попросить просмотреть список устройств в своей учетной записи (только камеры), поэтому мы запрашиваем список устройств пользователей с помощью
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://developer-api.nest.com/devices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_FRESH_CONNECT => true,
CURLOPT_FORBID_REUSE => true,
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$token,
"content-type: application/json",
"Cache-Control: no-cache"),
));
Где $ token — токен пользователя с длинным доступом.
Это работает так, как и ожидалось. Пока пользователь не отменит авторизацию приложения из своей учетной записи гнезда. Если мы будем следовать документации API, этот вызов вернет 401 Несанкционированный ответ.
Однако ответом по-прежнему остается список пользовательских устройств, даже если токен теперь недействителен. Это означает, что у нас все еще есть доступ к информации пользователя, даже если он технически отозвал наш доступ. Поэтому пользователю никогда не предлагается повторно авторизовать приложение, и поскольку это происходит непосредственно на веб-сайте nest и что нет обратного вызова события, мы не можем определить, хочет ли пользователь отозвать права нашего приложения.
Это вызывает у нас немало головной боли, поскольку мы не можем должным образом протестировать функциональность нашего веб-сайта. В идеале мы должны были бы запросить другой токен у пользователя.
Спасибо
Задача ещё не решена.
Других решений пока нет …