Я пытаюсь сделать веб-сервис безопасным.
Это не для банка или чего-либо в этом роде, но организация, использующая его, может потерять часть денег, если служба будет использоваться кем-то, у кого нет полномочий (трудно точно сказать, сколько ...).
Цель состоит не в том, чтобы позволить неавторизованным приложениям использовать какой-либо метод (кроме «GetChallenge»). Для аутентификации пользователей существует другой механизм, который проверяет имя пользователя и пароль. Я фактически объединил их, но они служат разным целям):
Итак, вот что я делаю:
Я посылаю сеансовый ключ (ASP.NET) (для всех желающих прочитать. Сеанс ASP.NET состоит из 15 случайно сгенерированных байтов, он длится 20 минут, если не продлен, и ASP.NET не получит никакого запроса без него).
В моем методе SignIn, кроме имени пользователя и пароля (который может получить каждый, поскольку он является частью общедоступного сайта), я получаю третий параметр - ключ сеанса, хэшированный по алгоритму md5 с 6 байтами в виде соли.
И только если хеш правильный (я хэширую и сравниваю его на стороне сервера) - я позволяю пользователям входить в систему.
С этого момента в каждом методе я проверяю, вошел ли пользователь в систему.
Добавлено: Имя пользователя и пароль отправляются в виде открытого текста, и это не проблема (не та, к которой я обращаюсь, по крайней мере). Проблема в том, что кто-то (кроме компании, с которой мы работаем) пишет приложение, использующее мой веб-сервис. Веб-сервис должен использоваться только авторизованным приложением .
Кроме того, идентификатор сеанса отправляется туда и обратно с каждым запросом и ответом (как часть механизма сеанса ASP.NET. Именно так ASP.NET знает, как «отслеживать» сеанс, специфичный для пользователя). Извините, что не уточнил это с самого начала.
(нерационально думал, что это очевидно).
Насколько сильна и эффективна эта стратегия безопасности?
Спасибо.