Как отозвать токен аутентификации?

Скажем, я сгенерировал токен аутентификации и, чтобы сэкономить на обработке и удаленных вызовах, установил срок его действия примерно через 30 дней в будущем.

Теперь я хочу удалить эту учетную запись из своей системы. Есть ли способ отозвать токен аутентификации, который я дал клиенту?

Я не думаю, что это возможно в настоящее время, и я, конечно, могу обойти это (в основном, не имея таких больших сроков действия), но я просто хотел убедиться, что не пропустил что-то в документации.


person TTimo    schedule 04.02.2014    source источник
comment
См. также: groups.google.com /forum/#!searchin/firebase-talk/revoke/   -  person Kato    schedule 05.02.2014


Ответы (4)


Вы действительно не можете отозвать этот конкретный токен (за исключением признания недействительным секрета, который сгенерировал токен, но это также сделает недействительными все другие токены, выпущенные этим секретом, - вероятно, не то, что вы хотите).

Однако вы можете полагаться на некоторую информацию, относящуюся к токену (возможно, вы включили уникальный идентификатор пользователя в качестве данных в токен) и обновить свои правила безопасности, чтобы отклонить любые операции, соответствующие этому значению.

person Anant    schedule 04.02.2014
comment
этот ответ устарел, пожалуйста, обновите его, как показано ниже, или удалите его stackoverflow.com/a/48104953/846348 - person OZZIE; 25.05.2021

Firebase теперь предлагает возможность отозвать токены обновления, это совсем свежо — добавлено 01.04.2018. https://firebase.google.com/docs/auth/admin/manage-sessions#revoke_refresh_tokens

person Alex Redwood    schedule 04.01.2018
comment
Это пограничный ответ только по ссылке. Вы должны расширить свой ответ, чтобы включить здесь как можно больше информации, и использовать ссылку только для справки. - person Filnor; 05.01.2018
comment
Это очень новая функция, и я полагаю, что большинство из нас не хотят предлагать примеры, пока мы сами полностью их не реализовали. Вот моя попытка: отсюда: firebase.google.com/docs/ auth/admin/ Изменить: я перенесу это в отдельный ответ. Кажется, я не знаю, как помещать блоки кода в комментарии. - person Levi; 09.02.2018

Добавление к ответу @Alex Redwood

Это важная часть:

return admin.auth().revokeRefreshTokens(uid)
    .then(() => {
      // Get user's tokensValidAfterTime.
      return admin.auth().getUser(uid);
    })

В примере в документации есть всевозможные нюансы, такие как запись временной метки в базу данных для предотвращения чтения до истечения срока действия текущего токена, очень специфичные для реализации случаи. Важная часть заключается в том, что вы вызываете revokeRefreshTokens(uid) для правильного uid и проверяете, что userRecord изменил значение userRecord.tokensValidAfterTime. Это не истечет срок действия ваших активных токенов. Поэтому полезно иметь короткое время истечения срока действия, чтобы сократить окно атаки (на мой взгляд, это лучшее решение, чем правило базы данных, которое проверяет метку времени).

Откуда: https://firebase.google.com/docs/auth/admin/manage-sessions#revoke_refresh_tokens

person Levi    schedule 09.02.2018
comment
Как вы устанавливаете сроки действия? - person thisismydesign; 20.01.2020
comment
Firebase имеет бесконечное окно времени для своих токенов обновления. Жетоны обновления истекают только в одном из следующих случаев: Пользователь удален Пользователь отключен Для пользователя обнаружено серьезное изменение учетной записи. Сюда входят такие события, как обновление пароля или адреса электронной почты. Из: firebase.google.com/docs/auth/admin/ Таким образом, разработчику придется написать собственную логику для отзыва всех токенов для пользователя в определенное время. - person Levi; 20.01.2020
comment
Вы написали, что важно иметь короткое время действия, чтобы сократить окно атаки. Я думал, что вы говорите о токенах ID. Поскольку они истекают один раз в час, даже если токены обновления отзываются. - person thisismydesign; 21.01.2020
comment
Я не использовал firebase по той или иной причине в (новых) проектах с 2018 года. Мое (устаревшее) понимание заключается в том, что когда вы отзываете токен обновления, firebase не позволяет пользователю обновлять токен jwt, поэтому у него короткий срок действия. jwt, (скажем, 30 минут) мы ограничиваем время атаки эксфильтрированного jwt временем истечения срока действия jwt. Поэтому важно установить короткое время истечения срока действия, если у вас есть способ отозвать токены обновления при подозрительной активности. (продолжение в новом комментарии) - person Levi; 21.01.2020
comment
Точно. :) Итак, мой вопрос: как установить более короткий срок действия на JWT? - person thisismydesign; 21.01.2020
comment
Firebase сегодня находится в гораздо лучшем положении, чем до 2018 года, с точки зрения безопасности jwt. Сегодня вы также можете отключить пользователя, чтобы аннулировать его сеанс jwt: firebase.google.com/docs/reference/android/com/google/firebase/ Итак, резюмируем: * Отменить токены обновления * Отключить учетную запись на время истечения срока действия * Повторно активировать учетную запись Любой скомпрометированный jwts следует обрабатывать, не удаляя пользователя. - person Levi; 21.01.2020
comment
О, понял, извините, что не объяснил это более подробно изначально. Мой пост обычно предполагает, что ваше приложение использует пользовательский токен, который позволяет лучше контролировать ваше приложение. @thisismydesign вот ссылка на документацию по созданию пользовательского токена: firebase .google.com/docs/auth/admin/create-custom-tokens Пользовательский токен в значительной степени является требованием для детального управления безопасностью приложений в firebase (и даже в этом случае он все еще ограничивает). - person Levi; 21.01.2020
comment
Давайте продолжим это обсуждение в чате. - person thisismydesign; 21.01.2020

Используйте интерфейс командной строки:

firebase logout --token <token>

https://firebaseopensource.com/projects/firebase/firebase-tools/#using_with%20ci%20systems

person Chris    schedule 05.10.2020