Токен Nest отозван, но API не возвращает «401 несанкционированный» ответ

Я строю приложение, используя гнездо 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 и что нет обратного вызова события, мы не можем определить, хочет ли пользователь отозвать права нашего приложения.

Это вызывает у нас немало головной боли, поскольку мы не можем должным образом протестировать функциональность нашего веб-сайта. В идеале мы должны были бы запросить другой токен у пользователя.

Спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]