Отслеживание нескольких входов от одного и того же пользователя с помощью Stormpath

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

В настоящее время мое приложение использует Stormpath для входа в систему с помощью электронной почты / пароля или MDN/ пароля и при успешном входе в систему возвращает токен JWT, который будет использоваться для доступа API к серверу.

Я думаю о следующем подходе:

  • Держите список сеансов в учетной записи пользователя. Каждый раз, когда пользователь входит в систему, добавляется новая запись с идентификатором device_id и предоставленной JWT. Когда пользователь выходит из системы, запись удаляется или помечается как неактивная.
  • Когда пользователь пытается войти в систему на другом устройстве, если я хочу ограничиться только одним активным устройством, я установлю для другой записи значение "отключено" и истечет срок действия JWT, чтобы приложение могло его обнаружить и потребовать повторной регистрации.
  • Если бы я хотел ограничить пользователя максимум n сессиями, я мог бы просто посчитать записи и заставить пользователя выйти из системы на одной из других сессий, прежде чем позволить ему / ему войти в систему на новом устройстве.

Это хороший подход? Есть ли лучший способ сделать это? Какие проблемы с этим методом?

1 ответ

Я работаю в Stormpath над мобильными SDK. Вы можете использовать функцию токена доступа / обновления, которая необходима для этого.

  • Каждый раз, когда пользователь входит в систему, создаются токены доступа и обновления. Когда пользователь выходит из системы, токен обновления удаляется вместе с токеном доступа.
  • Когда пользователь пытается войти на другом устройстве, если вы хотите ограничить доступ только одним активным устройством, вы можете удалить все остальные маркеры доступа и обновления.
  • Если вы хотите ограничить пользователя максимум n сессиями, я могу просто посчитать записи и заставить пользователя удалить один из токенов обновления, прежде чем разрешить ему / ей войти в систему на новом устройстве. Затем вы должны пройти через токены доступа и удалить те, которые соответствуют "rti" (обновить идентификатор токена).

Несколько замечаний о реализации этого:

  • Если вы используете интеграцию с Stormpath Framework, по умолчанию проверяется токен доступа локально (вместо отправки его в Stormpath для проверки). Это потому, что у них есть подпись, которая может быть проверена с помощью SDK. Тем не менее, чтобы выйти из системы, пользователь должен либо установить это значение для удаленной проверки, либо использовать короткий токен жизни (и использовать маркеры обновления для управления каждым "сеансом").
  • Токены обновления не могут хранить "customData", поэтому вам придется поддерживать метаданные о маркере обновления либо в customData учетной записи, либо в собственной базе данных.
  • В качестве альтернативы, вы можете "создать" ключи API для каждого пользователя и использовать его вместо сеансов для каждого пользователя. Вы можете использовать имя ключа API или атрибуты описания, чтобы отслеживать, откуда пользователь вошел в систему и т. Д.
Другие вопросы по тегам