Я ищу способ аутентификации пользователей моего мобильного приложения безопасным способом. Мобильное приложение является чистым JS-приложением и использует ионный каркас (и, следовательно, кордову). Приложение будет связываться только с нашим сервером через REST API. Требования следующие:
- Меканизм должен полагаться на отдельный бизнес-аккаунт (например, ссылка на Google, Facebook или любой другой API не является вариантом.)
- Приложение будет находиться в публичных магазинах
- Как и многие мобильные приложения (Gmail, Facebook,...), которые не нуждаются в такой безопасности, как банковские приложения, пользователь должен быть автоматически аутентифицирован после первого входа (шаблон "запомнить меня" )
Что я нашел:
- Использование OAuth 2
OAuth 2 предоставляет долговременный токен, называемый "токен обновления". Я хотел бы использовать его с установкой даты истечения срока годности примерно на один год.
Однако, похоже, нет сильного меканизма, чтобы защитить этот токен. Действительно, как упоминание в Jamsheed Kamarudeen прокомментировал этот ответ qaru.site/info/16809/..., если токены обновления, идентификатор клиента и секретный идентификатор украдены (с помощью обнюхивания или взятия их непосредственно из устройство), злоумышленник сможет иметь неограниченный доступ к учетной записи пользователя... без каких-либо изменений, AFAIK, чтобы это произошло.
Обнюхивание может быть затруднено, потому что, очевидно, все данные будут отправляться через безопасное соединение (SSL), но это все еще возможно, и с моей точки зрения это должно управляться. Что касается второго типа атаки, "принимая их непосредственно с устройства", каждое решение, которое я видел, касается хранения данных (токенов или файлов cookie) в локальном хранилище или в cookie браузера (это сообщение, например Использование OAuth2 в веб-приложении HTML5). Даже если пример из этой публикации содержит рекомендации по хранению хэша токена обновления, я не могу понять, в чем его цель, поскольку, как упоминает комментарий Мати Цицерона, это не остановит злоумышленника возможность получить токен доступа и, в моем случае, неограниченный доступ к учетной записи пользователя.
Кроме того, из того, что я вижу, localstorage и файлы cookie слишком легко читаются. Это достаточно или я должен использовать собственное безопасное хранилище Android/iOS? Даже локального локального хранилища кажется недостаточно (https://github.com/phonegap/phonegap/wiki/Platform-Security).
- Использование Spring безопасности
Серверная сторона будет реализована благодаря Spring. Меканизм, обеспечиваемый Spring -security, кажется лучше, чем OAuth 2, в отношении шаблона помнить меня (http://jaspan.com/improved_persistent_login_cookie_best_practice). Однако, как я понял, конечный пользователь не сможет дважды войти в приложение (скажем, его персональный мобильный и его профессиональный). Я признаю, что это не огромная проблема, но, тем не менее, она не идеальна. Самое главное, в конце мы все еще имеем проблемы с безопасностью хранения файлов cookie/токенов.
Это первый раз, когда я ищу меканизм безопасности, поэтому, возможно, я неправильно понял какой-то меканизм, пожалуйста, дайте мне знать. Тем не менее, я очень удивлен, увидев, как трудно найти правильный процесс. Я уверен, что это классическая проблема для всех мобильных приложений, но я не могу найти правильный способ решения этой проблемы.
Мой вопрос: как вы можете видеть выше, я не нашел одного безопасного mecanism для настройки этого процесса "автоматического входа" в веб-мобильное приложение. Что мне нужно настроить? У вас есть другой меканизм, чем те, которые я нашел, чтобы представить меня?