У меня есть два приложения:
- сервер (сервер API REST)
- node js
- Экспресс
- jsonwebtokens
- экспресс-JWT
- мангуст
- клиент (Portable Front-end)
- bootstrap
- Angular JS
- локального хранения
- angular -facebook
- angular -jwt
Позже клиентское приложение будет перенесено на Android, iphone и другие платформы, используя телефонную рассылку. Для OAuth я использую Facebook в качестве поставщика. Теперь я просто понял, что JSON Web Tokens - это способ пойти на такой настрой. Мой вопрос является скорее архитектурным, чем синтаксическим - как управлять секретным ключом при подписании токена доступа к facebook и идентификатора пользователя с помощью JWT в nodejs?
Таким образом, поток работает в моем приложении:
- Angular клиент имеет кнопку входа
- Пользователь нажимает кнопку > Facebook Auth начинает
- Клиент получает user_id и токен FB Access
- Клиент отправляет [POST json body] как user_id, так и токен доступа на Node + Экспресс-сервер на http://server.com/auth/login
-
node Сервер применил express-jwt для всех маршрутов, кроме /auth/login, с
var expressJwt = require ('express-jwt');
var jwt = require ('jsonwebtoken');
app.use(expressjwt ({secret: ''}). if ({path: ['/auth/login']}));
-
node сервер получает данные из req.body, извлекает все данные профиля из facebook с помощью JavascriptSDK и подписывает его с помощью
var token = expressjwt.sign({profile},);
- node Сервер хранит (обновления, если существует user_id) новый токен в db и отправляет его как ответ клиенту
- клиент сохраняет новый токен, полученный в виде json-данных в локальном хранилище
- клиент использует angular -jwt для извлечения данных профиля из нового токена и автоматического присоединения нового токена в заголовке авторизации для всех запросов, которые он отправляет на сервер
Теперь мои вопросы:
- Нужно ли мне хранить маркеры JWT в базе данных? Я, конечно, не сравниваю токены в заголовках запросов с базой данных
- Нужно ли мне генерировать случайные секретные ключи для обеспечения безопасности каждый раз, когда пользователь входит в систему? Если да, то как это будет соответствовать как клиенту, так и серверу?
- Когда и где мне нужно проверить срок действия токена? и как его обновить?
Я как бы потерялся в отношении потока и механизма дизайна.