2014-01-25 1 views
2

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

  1. Мое приложение имеет два набора функций. Доступ к одному набору функций возможен только тогда, когда приложение подключено к серверу, и пользователь аутентифицируется. Еще один набор функций можно получить в автономном режиме, но им нужны данные из зашифрованного JSONStore.
  2. У меня есть JSONStore на клиентском устройстве, которое инициализируется с использованием пароля. Поэтому данные в хранилище будут зашифрованы. Кроме того, этот JSONStore синхронизируется с базой данных на сервере через адаптер.
  3. Я также установил другой адаптер, который аутентифицирует пользователя, используя другой набор учетных данных, хранящихся в базе данных. Пользователь может быть аутентифицирован только в том случае, если приложение подключено к сети.

Что я хочу сделать, это объединить эти два подхода, чтобы пользователю не нужно вводить два набора учетных данных для доступа к этим двум различным наборам функций. Одним из возможных решений, которые пришли мне на ум, является просто шифрование JSONStore и проверка подлинности адаптера без вмешательства пользователя. Но я не думаю, что это безопасно.

Любые советы или подходы к решению этой проблемы?

ответ

2

Следующее - это просто идея, я не эксперт по безопасности.

Требования:

  • Для использования функции форума вы должны быть онлайн и проверкой подлинности по крайней мере один раз.
  • У вашего приложения должно быть окно входа для ввода некоторых учетных данных (например, имя пользователя/адрес электронной почты и пароль).

Шаги:

  1. Первый раз, когда пользователь вводит правильные учетные данные и успешно проходит аутентификацию на сервере: хэш учетные данные. Например: var myHash = md5(loginField.getUser() + loginField.getPassword()). Вы можете найти md5 JavaScript libraries on Github.
  2. Используйте этот хэш для инициализации магазина. Например: WL.JSONStore.init(..., {password: myHash}).
  3. Отправьте хэш на бэкэнд по номеру HTTPS, он понадобится, если пользователь изменит свои учетные данные. Нет необходимости сохранять учетные данные или хэш на устройстве (loginField = null; myHash = null). Кроме того, вы можете просто генерировать хэш на сервере и хранить его, не отправляя его клиенту, просто убедитесь, что клиент и сервер используют один и тот же алгоритм хэширования.
  4. При работе в автономном режиме попросите пользователя указать его учетные данные, используйте его и используйте для доступа к данным внутри магазина.
  5. Если пользователь изменяет свои учетные данные (например, через веб-интерфейс для вашего приложения), хеш будет отличаться и сохранение не будет инициализировано. Тем не менее, пользователь должен успешно пройти аутентификацию с сервером с новыми/действительными учетными данными. Задайте сервер для старого хэша, запустите хранилище со старым хешем и измените пароль, чтобы запустить хранилище в новый хэш на основе новых/действительных учетных данных. Например: WL.JSONStore.changePassword(oldHash, newHash).

Дополнительно: Вы можете рассмотреть возможность использования salt. Например: var salt = Math.random(), myHash = md5(loginField.getUser() + loginField.getPassword() + salt).

Вам нужно будет хранить соль где-нибудь, чтобы вы могли повторно генерировать хэш, как только пользователь вернется в приложение. Вы должны иметь возможность запустить еще один незашифрованный магазин, чтобы сохранить его. Например, WL.JSONStore.init(..., {username: 'metadata'}).then(function(){/*add salt to store*/}). Дополнительная информация об использовании двух магазинов here.

+0

Я думаю, что это подход достаточно хорош, чтобы решить мою проблему. Пользователь не может изменить свои учетные данные, когда приложение отключено, но все в порядке. Я лично считаю, что Worklight должен был предоставить более элегантное решение этой проблемы. Спасибо. – Chandrahas

+0

Можете ли вы рассказать мне, как отправить запрос HTTPS от моего клиента? Или Worklight автоматически выполняет всю коммуникацию HTTPS? – Chandrahas

+1

Предлагаю прочитать документацию для используемого сервера приложений, если вы заинтересованы в поддержке HTTPS. Например: [Включение SSL-связи для профиля Liberty] (http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5/index.jsp?topic=%2Fcom.ibm.websphere.wlp.nd.doc% 2Fae% 2Ftwlp_sec_ssl.html). – cnandreu