Почему в мобильных приложениях не предусмотрена функция выхода из аккаунта?

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

Почему в мобильных приложениях часто не происходит автоматического логаута? Например, многие маркетплейсы помнят о моем входе даже после долгого (месяца и более) отсутствия, не прося авторизоваться снова. Как это достигается? Если рассматривать схему с JWT аутентификацией, то рефреш токены обновляются в фоновом режиме, что позволяет получить новый аксес токен, даже если старый истек, так? Или рефреш токен для мобильных приложений в общем случае не имеет срока годности, что может снизить уровень безопасности? 

Если рассматривать аутентификацию на основе сессий, то у сессий, видимо, тоже есть идентификатор, который может существовать без ограничений во времени. Он также может как-то обновляться в фоновом режиме, не требуя действий от пользователя?
  • 10 января 2025 г. 15:13
Ответы на вопрос 2
Вы подняли несколько важных вопросов о подходах к аутентификации и управлению сессиями в мобильных приложениях. Давайте разберем их подробно.

### 1. Почему в мобильных приложениях часто не происходит автоматического логаута?

В мобильных приложениях часто сохраняют состояние сессии пользователя (например, с помощью токенов или локального хранения данных). Это достигается следующими способами:

- **Долгоживущие токены:**
  В некоторых случаях используются долгоживущие access и refresh токены. Access токен может иметь небольшой срок действия (например, 1-15 минут), а refresh токен — значительно больший срок (например, несколько месяцев или даже бессрочно). Это позволяет приложению оставаться "входящим" даже после долгого отсутствия пользователя — пока refresh токен не истек или не был аннулирован.

- **Локальное хранилище:**
  Мобильные приложения используют шифрованное локальное хранилище (например, Keychain для iOS или Keystore для Android) для сохранения токенов. При повторном запуске приложение может считать токен из хранилища и автоматически аутентифицировать пользователя.

- **Дружелюбный UX:** 
  С точки зрения пользовательского опыта, многие разработчики предпочитают не запрашивать повторный вход для удобства пользователей. Это особенно важно для приложений, которые используются часто, и где авторизация не является основным процессом.

### 2. Как работают refresh токены?

В стандартной схеме с использованием JWT (JSON Web Tokens):

- Refresh токены предназначены для получения новых access токенов без необходимости повторного входа пользователя.
- Обычно refresh токен имеет значительно больший срок жизни, чем access токен. Однако, он может также иметь ограничение по времени для безопасности.
- Необходимость периодически обновлять refresh токены (например, через создание нового refresh токена при каждом использовании) помогает минимизировать риски злоупотребления, если токен будет скомпрометирован.

### 3. Вопросы безопасности

- **Срок действия refresh токена:** 
  Если refresh токен имеет слишком длинный срок жизни, это может снизить уровень безопасности. Поэтому его срок действия должен быть сбалансирован по времени и сложностью использования.

- **Серверная сторона:** 
  Важно, чтобы на сервере был механизм для отзыва refresh токенов (например, при выходе из системы, изменении пароля или при подозрительной активности).

### 4. Аутентификация на основе сессий

- **Сессии и идентификаторы:** 
  Сессии обычно имеют идентификатор, который хранится на сервере, и клиенту передается лишь токен, который ссылается на серверную сессию. Сессия может иметь срок действия, и этот срок может быть обновлен на сервере при активности пользователя (например, при выполнении запросов).

- **Обновление сессий:** 
  При наличии механизма обновления, сервер может продлить срок действия сессии при каждом запросе от пользователя — таким образом сессия может существовать без временных ограничений при условии, что пользователь взаимодействует с приложением.

### Заключение

Выбор подхода к аутентификации и хранению сессий в мобильном приложении зависит от ваших требований к безопасности и пользовательскому опыту. Использование токенов (JWT) или сессий — оба подхода имеют свои плюсы и минусы, и важно внимательно оценить, как они будут работать в контексте вашего конкретного приложения.
Бесконечные сессии и на браузере возможны, это как разработчик приложения решил, так и сделал. 

В браузере длительность сессии определяется сроком жизни cookies и логикой на сервере (например при проверки наличии сессии вычислять ее длительность из текущего времени и сохраненного в базе времени ее начала).

Грубо говоря, бесконечная сессия, это если ты ничего не сделал, что бы ее уничтожать.
Похожие вопросы