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

Вопрос или проблема

В нашей организации у нас есть собственный сервер OpenId (Identity Server), который мы используем для аутентификации пользователей в наших приложениях. Позвольте мне объяснить, как мы в настоящее время обрабатываем наших веб-клиентов.

У нас есть API, который обрабатывает аутентификацию пользователей. Пользователь вызывает конечную точку, затем его перенаправляют на страницу входа пользователя (на сервере идентификации), и после входа его перенаправляют обратно в API (процесс авторизации + PKCE). API устанавливает зашифрованный cookie в браузере пользователя, который содержит токены доступа и обновления. Теперь пользователь аутентифицирован, и каждый запрос, который он отправляет, должен проходить через API аутентификации, который проверяет cookie и добавляет его в заголовок запроса, затем отправляет на желаемый сервер. Как вы можете видеть, мы не доверяем клиентам, поэтому мы храним токены доступа в зашифрованном cookie, к которому может получить доступ только API аутентификации.

Итак, как мы можем реализовать это на мобильных устройствах? Так же, как и раньше, мы создаем API аутентификации, но вместо хранения токенов доступа в зашифрованном cookie мы должны передать токены авторизации приложению, а приложение будет хранить и управлять токенами авторизации, или мы можем хранить их на сервере и отправлять идентификатор пользователя. Каждый раз, когда они отправляют запрос, они отправляют этот идентификатор, и API аутентификации будет управлять токенами.

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

Обоснованы ли мои опасения? Каков лучший способ обработки этого процесса на телефонах? Приложение очень чувствительное и содержит очень чувствительные данные.

Спасибо.

… что, если кто-то украдет телефон пользователя и получит доступ к токенам авторизации пользователя?

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

Если злоумышленник украл устройство пользователя и, по сути, теперь владеет им, тогда вам нужно добавить что-то, чего нет на устройстве пользователя, например, требовать дополнительную аутентификацию пользователя, если изменился IP-адрес, с которого был получен доступ к вашему сервису. Или убедиться, что пользователь недавно аутентифицировался в вашем локальном приложении, например, используя отпечаток пальца, Face ID или PIN-код.

Если злоумышленник получает доступ только на короткое время, то убедитесь, что он не может извлечь токен в первую очередь, или что токен привязан к устройству и таким образом бесполезен без устройства. Последнего можно достичь, требуя также аутентификацию, специфичную для устройства, например, используя mTLS с клиентским сертификатом, где закрытый ключ защищен каким-либо безопасным элементом на устройстве (см. RFC 8705 – OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens).

Ответ или решение

Лучшие методы управления токенами авторизации в мобильных приложениях

Управление токенами авторизации в мобильных приложениях — это критически важное направление для обеспечения безопасности пользователей и защиты конфиденциальной информации, особенно когда речь идет о чувствительных данных. В данной статье мы рассмотрим, как правильно организовать процесс аутентификации и управления токенами авторизации, учитывая специфику мобильных приложений и риски, связанные с украденными устройствами.

1. Использование безопасного хранилища

Одним из первых шагов при разработке мобильных приложений является выбор подходящего места для хранения токенов. Рекомендуется использовать специализированные механизмы, такие как Keychain для iOS и Secure Storage (или Keystore) для Android. Эти решения обеспечивают уровень безопасности, который недоступен для обычных приложений, так как они шифруют данные и требуют дополнительных привилегий для доступа.

2. Краткосрочные токены доступа

Краткие сроки действия токенов доступа — это важный аспект безопасности. Даже если злоумышленник получит токен, он будет иметь ограниченный срок действия, что уменьшает время, в течение которого может быть использован токен. Рекомендуется проводить обновление токена доступа (с помощью refresh-токена) в фоновом режиме, чтобы минимизировать вероятность использования устаревшего токена.

3. Использование механизма PKCE

При аутентификации на мобильных устройствах обязательно следует использовать Proof Key for Code Exchange (PKCE). Этот механизм защищает от атак с перехватом авторизационных кодов и значительно повышает безопасность аутентификации. Он позволяет приложению подтвердить свою идентификацию без необходимости в хранении клиентских секретов.

4. Защита от кражи устройства

Если мобильное устройство было украдено, и злоумышленник получил доступ к токенам, важно учитывать, что на это должны быть предусмотрены дополнительные меры защиты. Рассмотрите возможность внедрения следующих механизмов:

  • Многофакторная аутентификация (MFA): требует дополнительной проверки, например, с помощью SMS или приложения-аутентификатора, что делает доступ к учетной записи более защищенным.
  • Динамическая аутентификация: реализация проверки, зависящей от контекста, например, если происходит попытка входа из нового местоположения или с неизвестного устройства.

5. Привязка токенов к устройству

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

6. Мониторинг и реагирование на подозрительную активность

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

7. Изоляция и минимизация уязвимостей

Никогда не храните токены в небезопасных местах, таких как локальное хранилище или передаваемые по уязвимым каналам. Убедитесь, что все взаимодействия с API защищены с помощью протокола HTTPS, и используйте HTTP заголовки, такие как Authorization, для передачи токенов.

Заключение

Управление токенами авторизации в мобильных приложениях — это комплексная задача, ориентированная на балансировку между удобством и безопасностью. Следуя приведенным рекомендациям и применяя многоуровневую защиту, можно значительно снизить риски компрометации учетных записей пользователей. Не забывайте о регулярной проверке и обновлении используемых методов безопасности в соответствии с последними тенденциями и угрозами.

Оцените материал
Добавить комментарий

Капча загружается...