Безопасное хранение маркера доступа в Кордове
Править: смотрите мой ответ для решения
В настоящее время работает над гибридным приложением с Ionic, где требуется хранить маркер аутентификации, чтобы сохранить вход пользователя в систему, а также гарантировать, что эти данные не могут быть доступны вне контекста приложения.
Существует, конечно, множество решений для этой задачи, каждое из которых имеет свои плюсы и минусы, поэтому мне сложно найти единственную технологию, которая припадки.
Я смотрел на angular-localForage и другие кандидаты:
LocalStorage
- Очевидный выбор для небольших данных.
- данные стираются в
iOS
, когда системе не хватает памяти.
IndexedDB
- поддержка багги в
iOS
(поддержка IndexedDB )
WebSQL (SQLite)
- видимо хороший вариант для небольших данных и достойной поддержки (WebSQL Support ) но это уже устарело.
SQLite
- есть связанные вопросы с
Cordova
вiOS
.
Локийс
- выглядит как перебор для этого сценария, но определенно является сильным кандидатом. Есть ли какие-либо проблемы безопасности, о которых я должен знать (поскольку я читаю его локально сохраненные данные в файлы
JSON
)?
PouchDB + SQLite
- Ну, это JS-клиент для работы с базами данных CouchDB или Couchbase, которые также могут работать с SQLite, но опять же мне нужно только хранить жетон..
Таким образом, по-видимому, лучшим вариантом для кросс-совместимости Android / iOS должен быть WebSQL, но он больше не разрабатывается, и я должен гарантировать долгосрочную поддержку.
Итак, мой вопрос: есть ли какие-либо другие варианты, которые я пропускаю для безопасного хранения маркера доступа? Если нет, то какой из вышеперечисленных вариантов должен быть лучшим выбором для этой задачи?
3 ответа:
После проведения некоторых исследований я поделюсь своим выводом.
Забавно, но ни один из вышеперечисленных кандидатов не подходит длябезопасного хранения маркера доступа. Подход должен использовать собственное решение как для Android (общие предпочтения), так и для iOS (Keychain ).
В частном случае Ionic, плагинbroadcaster для Cordova может использоваться для связи JS с Native, чтобы вы могли получить доступ к сохраненным данным.
SQLite-это лучший вариант, так как содержимое БД будет зашифровано и сохранено. Кроме того, собственные приложения полагаются на SQLite для сохранения данных. Чтобы сделать CRUD проще с SQLite, я создал библиотеку-оболочку. Пожалуйста, проверьте это здесь