Как реализовать сеансы на стороне сервера в node.js с экспресс-приложением для Android?

Привет всем, я делаю приложение для Android, в котором у меня есть вход в несколько учетных записей одновременно, теперь мой вопрос в том, что я для нескольких входов в систему я должен использовать сеансы для проверки каждого пользователя учетной записи, который вошел в систему. Теперь я использую экспресс на стороне сервера я прочитал много документации по хранению сессий в node.js

  1. Экспресс-сессия (хотя это хорошо только для разработки, но не для производства, но не для моего приложения)
  2. Cookie-сессия
  3. подключить-Redis
  4. коннект-монго

Я также слышал о веб-токенах json, где я могу генерировать уникальные токены, а затем передавать токены клиенту с помощью res.json({user_id:"user1", token: "generated_token here"}) Я также слышал о паспорте но не знаю, как это будет делаться также как в паспорте я использую экспресс-сессию по умолчанию, будет ли это хорошо для производства или нет??

Теперь мой первый вопрос: я прочитал все документы, и нигде не упоминается, где я создаю уникальные токены для каждого регистрирующегося пользователя. Второй вопрос, поскольку я использую свой сервер для приложения Android, не будет использования cookie. Я буду отправлять токен пользователя, как в параметре req.body.token, теперь, как сравнить это с текущим user_id.

На самом деле я не понимаю поток управления, я имею в виду, как все происходит в сеансе в node.js. Кроме того, в чем секрет, эта штука генерирует уникальные токены или что-то в этом роде. Также я имею в виду, что сейчас для моего приложения зарегистрировано около 100000 пользователей, пожалуйста, скажите мне, какой способ я должен использовать для своего приложения.

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

Я знаю, что этот вопрос, который я задаю, очень расплывчатый, но, пожалуйста, потерпите меня, я просто хочу понять, как сеансы используются в node.js

Спасибо.


person aman verma    schedule 09.10.2015    source источник


Ответы (1)


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

Лучшая идея для этого конкретного сценария — обратиться к облачному провайдеру. Мобильные приложения Службы приложений Azure, например, позволяют реализовать аутентификацию — в конечном итоге она возвращает веб-токен JSON (http://jwt.io) для аутентификации каждого запроса.

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

  • Настройте конечную точку WebAPI (возможно, /signin), которая принимает любой токен, предоставленный вам поставщиком удостоверений, проверяет информацию и возвращает JWT — для создания JWT существует модуль NPM (jsonwebtoken). Убедитесь, что JWT включает идентификатор вашего пользователя. Я склонен использовать адрес электронной почты для идентификации.
  • Ваше Android-приложение будет выполнять запрос WebAPI к вашему бэкэнду с заголовком авторизации, значением которого является «Bearer».
  • Ваш NodeJS API будет использовать авторизацию JWT для проверки JWT и извлечения удостоверения пользователя, чтобы вы могли использовать его в своей логике API.

В этом конкретном сценарии важно отметить, что ваш серверный код реализует WebAPI — в API нет ни файлов cookie, ни сеансов. Единственное, что связывает пользователя из клиентского кода с внутренним кодом, — это JWT.

В качестве короткого фрагмента кода, вот как вы проверяете JWT:

var express = require('express');
var app = express();
var jwt = require('express-jwt');

var jwtCheck = jwt({
  secret: new Buffer('your-jwt-secret', 'base64'),
  audience: 'your-jwt-audience'
});

app.get('/api/protected', jwtCheck, (req, res) => {
// Your code here
});

app.listen(process.env.PORT || 3000);
person Adrian Hall    schedule 09.10.2015
comment
во-первых, вы можете сказать мне, что это за секрет, и я читал, что сеансы cookie самые быстрые, поэтому я думал об его использовании. Использовали ли вы ранее сеансы cookie ?? - person aman verma; 09.10.2015
comment
как вы можете думать, что мне не нужен какой-либо модуль sessiosn, потому что, если я не буду реализовывать сеансы, то как я могу проверить, вышел ли пользователь из системы или нет?? - person aman verma; 10.10.2015
comment
Во-первых, файлы cookie используются для веб-соединений, а не для соединений API. Ваше приложение для Android будет использовать WebAPI — без файлов cookie. JWT — это токен сеанса. На самом деле выхода из системы нет — вы подтвердили, что человек с токеном — это тот, за кого он себя выдает. В JWT вы можете указать срок действия. Вы можете реализовать логику в своем приложении для регулярного обновления токена. - person Adrian Hall; 10.10.2015
comment
да, и в соответствии с тем, какой user_id вы храните этот токен, я имею в виду, что вы должны сохранить этот user_id вместе с этим токеном в сеансе ?? понял мою точку зрения - person aman verma; 10.10.2015
comment
Идентификатор пользователя будет фактически закодирован в токене. По сути, ваш /signin, подтверждающий личность, создаст новый токен. Он делает это, создавая некоторые данные в виде объекта (который включает ваши данные, такие как user_id, а также некоторые данные JWT, такие как аудитория, эмитент и срок действия), а затем подписывает этот объект секретом клиента и информацией об аудитории. Для собственного JWT вы выбираете эти значения — они остаются в бэкенде и недоступны клиенту. Для клиента/приложения ваш JWT — это непрозрачный большой двоичный объект, который передается серверной части. Бэкенд может расшифровать его и получить исходную информацию - person Adrian Hall; 10.10.2015
comment
Итак, где размещаются данные, связанные с этим токеном, я имею в виду, что я также хочу хранить некоторые данные ?? также безопасен ли jwt, может ли кто-нибудь догадаться, как он создает токены, или это случайно?? - person aman verma; 10.10.2015
comment
Если вы правильно разрабатываете свой WebAPI, то постоянных данных нет — REST в целом не имеет состояния. Да, JWT безопасен — он криптографически подписан, так что он точно не случайный. Пакет jsonwebtoken npm может создавать токены, а также проверять и декодировать их. - person Adrian Hall; 10.10.2015