2016-01-08 4 views
5

У меня есть экспресс-настройка приложения и вам нужна консультация по хранению жетонов.Узел Express - хранение и извлечение токенов аутентификации

Я получаю токен доступа с сервера OAuth 2 после аутентификации учетной записи пользователя, которую затем мне нужно использовать для последующих запросов api.

Я хочу скрыть значение маркера от клиента, и я считаю, что один из способов сделать это - сохранить токен на сервере в закодированном cookie, чтобы при выполнении дальнейших запросов они могли быть перенаправлены через промежуточное программное обеспечение и cookie можно затем использовать для извлечения сохраненной стороны маркера, а затем использоваться как значение заголовка в текущем запросе к фактической конечной точке api.

Кто-то на самом деле уже задал этот вопрос - How to store an auth token in an Angular app Это как раз поток, с которым я работаю в своем приложении, но ответ говорит об использовании Угловой службы, и я не уверен, что хотел бы сделать это, все могут обрабатываться Express, поэтому клиентский код не должен знать о токере, а также любые ошибки, возвращаемые сервером API.

Так резюме потока Я думаю, что нужно:

  • пользователя отправляет регистрационный данные
  • возвращает OAuth 2 сервера доступ маркера
  • Токен сохраняется где-то в экспрессе, введенный с помощью идентификатора рода
  • Файл cookie генерируется и отправляется обратно в ответ на клиент. Cookie содержит значение токена, закодированное, возможно? Или, может быть, идентификатор токена, хранящийся в компоненте промежуточного программного обеспечения Express?
  • Клиент выполняет запрос api, который передает промежуточное программное обеспечение маршрута Express.
  • Экспресс проверяет наличие файла cookie и либо декодирует значение токена, либо как-то извлекает его с сервера сервера хранилища.
  • Токен значения затем используются в качестве заголовка между экспрессом и окончательной апи конечной

Там, вероятно, промежуточным уже там, который обрабатывает это любопытное дело, я уже видел PassportJS, который, кажется, чтобы быть своим родом вещью, которую я могу хочу использовать, но я не уверен, что он обрабатывает токен OAuth2 на сервере, с которым я работаю (предоставление пароля), и, похоже, больше подходит для потока OAuth для переадресации.

Мне обязательно нужно где-то сохранить значение токена в Express, поэтому некоторая форма хранения (не в памяти, я не думаю).

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

Благодаря

+0

Когда вы получаете токен с сервера Oauth2, его можно сохранить в пользовательской части. Вы можете использовать файл cookie или localstorage HTML 5. – trquoccuong

+0

Хорошо, что подход cookie - это то, что я думаю, но ему нужно будет кодировать значение токена обратно клиенту, а затем каждый раз его расшифровывать для последующих запросов Express конечная конечная точка. – mindparse

ответ

5

Самый безопасный способ сделать это так же, как вы описали:

  • Получить маркер OAuth от какой-то службы третьей стороны (Google, Facebook, что угодно).
  • Создайте файл cookie с помощью Express и сохраните этот токен в cookie. Убедитесь, что вы также установили флаги cookie secure и httpOnly, когда вы это делаете: это гарантирует, что cookie НЕ МОЖЕТ ПРОЧИТАТЬ на стороне Javascript-кода на стороне клиента или через любое не-SSL-соединение.
  • Каждый раз, когда пользователь делает запрос на ваш сайт, этот файл cookie может быть прочитан вашим промежуточным программным обеспечением в Express и используется для того, чтобы любые вызовы API вам нужно для стороннего сервиса.

Если ваша служба также нуждается в асинхронных запросах к Google/Facebook/и т. Д., Когда пользователь НЕ активно щелкает по вашему сайту, вы также должны хранить их токен в своей пользовательской базе данных - это вы можете делать запросы от имени пользователя, когда вам нужно.

Я являюсь автором express-stormpath, библиотекой Node auth (аналогично паспорту), и так мы делаем вещи там, чтобы обеспечить максимальную безопасность!

Смежные вопросы