Обнаружение отозванного разрешения для приложения в Google API
Я использую клиентскую библиотеку PHP Google. Я успешно получил токен и обновил токен от пользователя /google для использования с API. Как только пользователь отзывает разрешение для моего сайта в настройках Googles на странице Google, я получаю следующую ошибку:
Error calling GET https://www.googleapis.com/calendar/v3/users/me/calendarList: (401) Invalid Credentials
Это ожидаемое поведение, так как пользователь отозвал мое разрешение. Однако, как я могу определить, что пользователь отозвал этот доступ?
В настоящее время я делаю следующее, чтобы увидеть, есть ли у меня доступ:
//$token json fetched from database
$gclient->setAccessToken($token);
if ($gclient->getAccessToken())
//i should have access
Этот код, к сожалению, не обнаруживает отмененное разрешение. Как я могу справиться с этим?
2 ответа
API Google должны возвращать только 401 из-за отсутствия авторизации. Поскольку ранее у вас была авторизация, получение 401 является надежным свидетельством того, что пользователь отозвал доступ.
Вы ищете механизм обнаружения, который уведомляет вас о таких изменениях перед вызовом API? Сегодня нет ни одного механизма push-уведомлений от Google, который мог бы информировать ваше приложение о таких событиях. Конечно, механизм, основанный на извлечении, бесполезен - вы можете просто сделать вызов API и более эффективно обрабатывать 401.
Как только вы обнаружили, что пользователь отозвал разрешение, вы можете снова запросить у него разрешение на предоставление.
Чтобы обнаружить, что грант был отозван: при условии, что у вас было разрешение ранее,
Выполнение вызова API с использованием аннулированного
access_token
приведет к ответу с кодом состояния 401. Как это{ "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" } }
Попытка обновить токен после отзыва приведет к ответу с кодом состояния 400 и
invalid_grant
сообщение. Как указано в RFC 6749, раздел 5.2invalid_grant Предоставленный грант авторизации (например, код авторизации, учетные данные владельца ресурса) или токен обновления недействителен, просрочен, отозван, не соответствует URI перенаправления, использованному в запросе авторизации, или был выдан другому клиенту.
Вот пример такого ответа:
{ "error" : "invalid_grant" }