Наше решение (и мы безнадежно наивны в этом отношении) заключается в том, что мы генерируем уникальный ключ для каждого сеанса на сервере неоднородным образом (т. Е. Трудно предсказать, каким будет «следующее» значение). ), и передайте его клиентскому коду в процессе входа в систему. Затем необходимо передать это значение обратно для использования для каждого запроса в качестве первого параметра.
Это гарантирует, что:
- Выход из системы делает недействительным ключ аутентификации
- Имя пользователя и пароль не отправляются в виде открытого текста для запросов веб-службы
Это не гарантирует, что:
- Только наш код приложения может общаться с сервером (пользователь может перехватить запрос, скопировать ключ и сгенерировать свои собственные запросы, если ключ все еще считается действительным).
Что вы обнаружите, так это то, что пока код на пользовательской машине общается с вашим сервером, вы не можете контролировать код на этой машине, только код на этом сервере. Так что, если пользовательский компьютер отправляет вам запросы, поступающие из другой программы, которая выглядит так же, как если бы ваш код их сгенерировал, вам будет трудно понять, что именно так и происходит.