«Запомнить меня» вход для веб-сайта - проблема с разными браузерами / компьютерами

StackOverflow https://stackoverflow.com/questions/4203029

Вопрос

Я пытаюсь осуществить функцию входа в систему входа в систему «запомнить меня» для сайта ASP.NET MVC. Я пытаюсь использовать этот подход http://jaspan.com/improved_persistent_login_cookie_best_practice. (См. «Дизайн Миллера» ближе к вершине) и у него его работают.

Таким образом, рабочий поток:

  1. Пользователь регистрирует и выдается криптографически безопасная случайная строка + их идентификатор базы данных в качестве постоянного cookie (длится около 30 дней). Secure String хранится в базе данных рядом с записью учетной записи пользователя.
  2. Пользователь позже возвращается на сайт, в котором браузер представляет собой входное файло cookie, идентификатор и безопасную клавишу рассматривают в базе данных, и если совпадение найдено совпадение, пользователь автоматически аутентифицируется.
  3. После аутентификации создается новый защищенный ключ, сохраняется в базе данных и новое выпущенное cookie.

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

  1. Пользователь регистрирует из браузера A, выдается безопасный ключ в качестве cookie, ключ хранится в базе данных.
  2. Пользовательские журналы из браузера B, выдан другой защищенный ключ в качестве файла cookie. Ключ также хранится в базе данных, но перезаписывает ключ, сгенерированный из браузера A.
  3. Посещает сайт пользователя из браузера снова, браузер представляет собой файл cookie, выданный с шага 1. Но он больше не совпадает, потому что безопасный ключ был заменен на шаге 2. Так что пользователь должен войти в систему. Еще один новый ключ генерируется и перезаписывает ключ, выданный браузеру B.
  4. Посетители пользователей снова посещают браузер B, ключ не совпадает, должен войти в систему снова и т. Д.

Как я могу решить это? Нужно ли хранить и поддерживать несколько клавиш в базе данных? Я даже делаю это правильно? Я заметил, что Stackoverflow кажется, управляет этим и помнит меня от разных браузеров и компьютеров.

Это было полезно?

Решение

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

Ваше описание указывают, что вы храните случайную строку внутри пользовательской таблицы, что позволит только вхожу в систему только в то время.

Другие советы

Вам нужен третий элемент в вашем cookie, токен «серии». Это будет представлять событие входа в систему. Каждый раз, когда пользователь входит в систему в вашу систему, он создает новую серию, которая не меняется до тех пор, пока не выходит из системы или входа в систему. У вас все еще есть ваш токен, т.е. защищенный ключ, который обновляется по каждому запросу.

Вот некоторые ссылки, чтобы помочь с этой реализацией:

Проблемы с базой данных при разрешении нескольких браузеров постоянных журналов

Окончательное руководство по форме аутентификации на основе формирования сайта

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top