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