Сохранение UID Firebase Auth в Cookie при использовании Firestore - это безопасно? - PullRequest
1 голос
/ 19 октября 2019

Недавно у меня был спор с другим моим товарищем по программированию относительно сохранения UID Firebase Auth (просто uid ничего другого) в cookie с включенным sameSite: 'strict'.

Что такое аргумент о

В настоящее время я работаю в проекте Nuxt JS, где я сохраняю uid пользователя для события onAuthStateChange() в файле cookie с включенным sameSite: 'strict', чтобы я мог получить его в своем коде serverMiddleware и поработать с ним.

Я проверил этот документ Firebase об управлении cookie , и он показывает, как сохранить JWT idToken в cookie, а затем на сервере, декодировать его.

InДело в том, что я изначально закодировал свою работу. Но из-за некоторых требований было очень полезно хранить uid вместо этого. Итак, я сделал это. Затем я начал читать о том, как я могу взломать мои собственные данные, чтобы посмотреть, может ли кто-нибудь повредить мои данные из uid в cookie.

Затем я наткнулся на этот документ Firebase: Использование облакаFirestore REST API , который показывает, как получить данные из firestore с использованием REST API, и я понял, что для работы нужно предоставить токен Google OAuth 2.0 в заголовке вызова API, иначе, даже если вы поставитеправильный URL со всем именем коллекции и всем (что трудно знать постороннему, но давайте предположим, что он знает), вы получите только одно:

{
  "error": {
    "code": 403,
    "message": "Missing or insufficient permissions.",
    "status": "PERMISSION_DENIED"
  }
}

Я также пытался запустить код вконсоль браузера для того, чтобы взломать данные из моего проекта. Но это также не сработало.

Теперь, чтобы получить токен Google OAuth 2.0, пользователю необходимо иметь доступ к моей учетной записи, что не так просто, так как у меня есть уникальный длинный пароль вместе с 2Шаг Аутентификация с помощью телефона OTP и push-уведомлений. Кроме того, если у кого-то есть доступ к моей учетной записи Google, он может легко перейти к console.firebase.com и просмотреть данные, поэтому на этом этапе ничего не будет иметь значения.

Но я сказал, что если кто-то использует FireBase RealtimeВ этом случае я не буду рекомендовать хранить uid в файле cookie, поскольку база данных в реальном времени предоставляет простой API REST без какого-либо уровня аутентификации для извлечения данных. В то время я бы рекомендовал вместо этого использовать JWT idToken.

Итак, какой последний вопрос?

Последний вопрос:

Если кто-то использует firebase auth& Firebase Cloud Firestore (не база данных в реальном времени), использующая Firebase SDK в своем проекте, безопасно ли хранить только uid в cookie вместо хранения JWT idToken, если это уменьшит сложность кода и время выполнения кода по сравнению с idToken?

Мне бы очень хотелось узнать ваши мысли по этому поводу, так как есть много супер опытных разработчиков, кроме двух программистов, спорящих.

Мой друг постоянно говорит мне, что хранить uid в печенье не совсем точно, но когда я спросил его, почему именно, у него не было конкретного ответа. Как то, что безопасно, а что не универсально, так и меняется, когда вы меняете свои инструменты. Но что именно вы думаете, ребята? Я знаю, что обычно в большинстве случаев это небезопасно, но я спрашиваю только об этом конкретном контексте.

1 Ответ

1 голос
/ 20 октября 2019

На самом деле довольно распространено выставлять UID пользователя другому пользователю, чтобы идентифицировать этого пользователя. См. Firebase - является ли auth.uid общим секретом?

Нет ничего небезопасного ни в сохранении UID в cookie, ни в чтении этого cookie в промежуточном программном обеспечении. Но если ваше промежуточное программное обеспечение предполагает, что UID является аутентифицированным пользователем, у вас есть угроза безопасности.

Что мешает любому другому пользователю добавить ваш или мой UID в этот файл cookie и, таким образом, получить доступ к вашим или моим данным?

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...