Проверка токенов Firebase клиентов на сервере node.js
Я реализую сервер node.js, используя express.js для REST и Firebase для хранения данных.
Я читал Использование NodeJs с Firebase-Security, и его можно было реализовать таким образом, но в моем случае мне нужно отправить данные на сервер, а сервер должен возвращает адрес перенаправления, поэтому использование firebase в качестве канала связи немного сложнее.
В настоящее время я проверяю идентификацию клиентов на сервере, отправив токен Firebase auth в качестве параметра запроса и проверяя авторизацию с помощью метода firebase auth().
dataRef.auth(CLIENT_TOKEN, function(error) {
if(error) {
console.log("Login Failed!", error);
} else {
console.log("Login Succeeded!");
}
});
Проблема в том, что на сервере мне также нужны привилегии "admin" firebase. Для этого мне нужно снова аутентифицироваться, используя firebase auth(), используя токен администратора. (сгенерированный генератором токенов)
var FirebaseTokenGenerator = require("firebase-token-generator");
var tokenGenerator = new FirebaseTokenGenerator(YOUR_FIREBASE_SECRET);
var token = tokenGenerator.createToken({some: "arbitrary", data: "here"});
Я заметил, что существует ограничение в методе auth():
Обратите внимание, что все ссылки на Firebase имеют одинаковый статус аутентификации. Поэтому, если вы дважды вызываете новую Firebase() и вызываете auth() на одном из них, они оба будут аутентифицированы.
Есть ли способ реализовать это без двойного вызова auth()?
Или есть ли лучшие решения для этого?
Ответы
Ответ 1
Основываясь на комментариях и после реализации, представляется лучшим решением использовать универсальную библиотеку JWT, такую как:
https://github.com/hokaccha/node-jwt-simple
С помощью библиотеки вы можете декодировать токен с секретом firebase:
// decode
var decoded = jwt.decode(token, secret);
console.log(decoded); //=> {"v":0,"iat":1359943067,"d":{"id":"[email protected],com"}}
Декодированный токен содержит iat (выдается в) и может содержать exp (expires). Если exp не предоставляется, время истечения по умолчанию для токена firebase составляет 24 часа. Вам нужно проверить, истек ли токен.
Подробнее:
https://www.firebase.com/docs/security/custom-login.html