2015-01-12 2 views
0

я наткнулся this документа в Интернете, а оттуда есть слайд о проверке подлинности GWT на форуме:Offline Аутентификация с использованием GWT

Когда в Интернете, проверка подлинности выполняется на сервере.

  • Затем мы должны иметь возможность повторно аутентифицировать его/ее без сервера. Будьте осторожны! Местное хранилище совершенно небезопасно!
  • Таким образом, мы сохраняем пароль пользователя в браузере, соленый и , зашифрованный SHA-3.

    Найти реализацию Java SHA-3, скопировать-вставить в проект:
    String shaEncoded = SHA3.digest (String clearString);
    Offline HTML5-приложений с помощью GWT 18

Вопросов:

  1. Действительно ли можно надежно проверить подлинность приложения GWT с таким подходом? Если он закодирован SHA-3, он действительно сделает его безопасным?
  2. Когда пользователь получает аутентификацию в браузере, пользователь использует офлайн-приложение, скажем, сохранить материал, а затем, конечно, он просто хранится в хранилище HTML5, однако информация о пользователе встроена, возможно, в что-либо сохраненное. Таким образом, когда приложение возвращается в сеть, оно будет синхронизироваться с сервером. Как это безопасно? Будет ли сервер просто соглашаться с тем, что вещь, которую она синхронизирует, действительно от правильного пользователя?

ответ

0

Нет специального случая для автономной проверки подлинности. Он работает так же, как и в режиме онлайн.

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

Нельзя хранить пароль на стороне клиента. Его достаточно, чтобы хранить информацию о сеансе на клиенте (либо в Cookie, либо в LocalStorage), и использовать его для аутентификации пользователя.

0

На самом деле вы не храните сам пароль в браузере, а его хэш SHA-3. С точки зрения криптографии этот подход очень безопасен, поскольку получить исходный пароль нелегко.

Просто заметьте: Ваш код будет сохранен на стороне клиента, и каждый исходный код на клиенте может быть изменен. Таким образом, злоумышленник может читать и использовать его. Но не беспокойтесь, для обычного варианта использования автономного используемого приложения это достаточно безопасно.

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

+0

Должна быть соль где-то сохранено? Или соль есть на сервере? – xybrek

+0

Вы можете использовать соль, чтобы предотвратить атаку [хайв] [rainbow table] (http://en.wikipedia.org/wiki/Rainbow_table). В этом случае вы сохраните значение соли на сервере и используйте его для генерации хеша: добавьте соль в пароль и хешируйте его. Обычно я обычно добавляю имя пользователя в хэш. В результате даже два пользователя с одинаковым паролем получат другой хеш. –

Смежные вопросы