# #google-cloud-platform #google-oauth
Вопрос:
Я переживаю ситуацию, когда:
У меня есть проект Google, использующий клиент OAuth 2.0 (для веб-приложений), чтобы получить согласие на некоторые области от пользователей. Параметры авторизации, используемые при перенаправлении в Google, используют следующие значения параметров (включая только возможные соответствующие параметры)::
access_type
—offline
response_type
—code
include_granted_scopes
—true
Если пользователь дает согласие на доступ к приложению, приложение получает маркер доступа для доступа к предоставленным областям.
Если тот же пользователь снова соглашается (в то время как предыдущий маркер доступа еще не был отозван) на то же приложение (с использованием того же клиента OAuth 2.0), проекту выдается новый маркер доступа.
В проекте Google теперь есть 2 разных токена, и оба токена доступа работают для доступа к предоставленным областям. Однако, как ни странно, пользователь увидит только одну запись для проекта/приложения Google в приложениях пользователей с доступом к странице вашей учетной записи.
Проблема в том, что если какой-либо токен будет отозван, все активные токены будут отозваны (попытки использовать токен доступа приводят к invalid_grant
ошибке с описанием Token has been expired or revoked.
ошибки). Хотя я не тестировал больше, чем наличие 2 живых/действительных токенов одновременно, я подозреваю, что поведение будет одинаковым более чем для 2.
Я просматривал документы Google OAuth 2.0, чтобы найти некоторую документацию, касающуюся этого поведения, или найти что-либо, ссылающееся на то, что происходит с токенами-компаньонами при отзыве, но не смог найти ничего, объясняющего это поведение.
Сначала я подумал, что это, возможно, связано с использованием мной инкрементной авторизации, и подумал , что, возможно, отзыв последнего маркера доступа отменяет все предыдущие, но после экспериментов include_granted_scopes=false
поведение все еще оставалось прежним.
На данный момент я ограничил пользователей возможностью давать согласие только один раз (если срок действия токена не истекает), но мне любопытно объяснение такого поведения — когда отзыв 1 токена отменяет их всех.
Комментарии:
1. Одной из обязанностей вашего приложения является проверка токенов. Для токенов, которые вы хотите отозвать , сохраните их, а затем выдайте ошибку, например 401, если они используются. Кроме того, обратите внимание, что срок действия токенов истекает через 3600 секунд, поэтому вашему приложению не нужно запоминать их навсегда. Существует также ограничение на количество токенов, которые могут быть выпущены на одну учетную запись. Как только этот лимит будет достигнут, самые старые токены будут отозваны. Нет ничего плохого в том, что у пользователя есть несколько токенов с разными уровнями авторизации (областями). Ваше приложение решает, какие токены использует пользователь.
Ответ №1:
На самом деле токены доступа независимы. Маркер доступа по дизайну будет работать в течение одного часа. Теоретически, даже если пользователь отменит ваш доступ, токен доступа все равно будет работать в течение оставшейся части часа, в течение которого он был первоначально действителен. Это стандартная функциональность Oauth2, они предназначены для предоставления доступа в течение часа, поэтому он называется токеном на предъявителя.Владельцу этого токена предоставляется доступ в течение часа.
Я подозреваю, что вы видите отзыв маркера обновления, так как это приведет к ошибке invalid_grant. Если вы запросите доступ пользователя с помощью автономного доступа, вам будет предоставлен токен обновления. Если вы снова запросите согласие пользователя, вы получите еще один токен обновления. Для одного пользователя может быть до пятидесяти выдающихся токенов обновления.
Если пользователь отменяет доступ через свою учетную запись Google или если ваше приложение отменяет доступ. Тогда да, все выданные токены обновления будут отозваны. Поскольку у ваших приложений был отозван доступ к учетной записи пользователя, ни один токен обновления не был отменен. Примечание. На самом деле существуют веские причины, по которым срок действия токена обновления может истечь. Их можно найти здесь. Проверка токена обновления
Это стандартное поведение Oauth2, не зависящее от Google.
Удалите доступ к учетной записи третьих лиц
Если вы предоставили доступ к учетной записи Google стороннему приложению или сервису, которому вы больше не доверяете или которым не хотите пользоваться, вы можете удалить его доступ к своей учетной записи Google. Приложение или служба не смогут получить доступ к дополнительной информации из вашей учетной записи Google, но вам может потребоваться запросить, чтобы они удалили уже имеющиеся у них данные.
Комментарии:
1. Мое неофициальное наблюдение заключается в том, что отозванные токены начинают отказывать в течение нескольких минут по всему миру. Этот процесс определенно не происходит мгновенно .
2. @Джонханли ничто в этом мире не происходит мгновенно. для обработки данных сервером авторизации googles требуется время. это во многом зависит от того, насколько занят сервер, на котором вы его отзываете. Кроме того, я ожидал бы, что это займет целый час, что также замедлит работу, так как в это время многие серверы работают медленно из-за автоматизированных заданий cron.
3. Я комментировал эту часть вашего ответа теоретически, даже если пользователь отменит ваш доступ, токен доступа все равно будет работать в течение оставшейся части часа, в течение которого он был первоначально действителен.
4. По моему опыту работы с серверами авторизации в целом, включая те, которые я поддерживал лично (сервер идентификации 4). По умолчанию токены доступа будут продолжать работать в течение часа, даже если само их согласие было отозвано. Это была бы дополнительная проверка от имени любого api, чтобы еще раз проверить тип политики, чтобы убедиться, что доступ не был отозван. Токены на предъявителя по умолчанию считаются автономными.
5. Большинство API-интерфейсов предполагают, что если у вас есть один, к которому токен berar предоставляет вам доступ на весь срок его действия, они не проводят дополнительную проверку во время их использования, чтобы убедиться, что у вас все еще есть доступ. Вот почему токены доступа имеют короткий срок службы, потому что они не могут быть отозваны. Самокодируемые токены