Авторизация пользователя в самописном приложении и многопользовательский режим - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Хочу написать свой велосипед мессенджер (точнее что-то похожее на него, так как нужен будет специфический набор инструментов, но сейчас не об этом). Архитектура по принципу много клиентов и один сервер со своей СУБД. Уроков нашел кучу, с самыми разнообразными реализациями (сокеты, без них и т.д.), но нигде не описываются адекватные способы аутентификации и авторизации. То есть, допустим, клиент авторизуется - вбил пароль, клиент пересчитал в хеш, отправил на сервер, тот сверил и выдал обратно новые сообщения. Клиент прочитал их... а теперь хочет отправить ответ, а может и не один (речь уже про пользователя, то есть ответ в рандомное время после входа). И вот тут загвоздка у меня - а как сервер аутентифицирует его? Заново хеш пароля отправлять с каждым сообщением? Стойкость его пока не волнует, просто мне кажется взрослые дяди так не реализуют. Я так понимаю, что нужно использовать схожий механизм с "печеньками" в браузерах, но все что я находил по теме относилось к вебу и я либо тупой, либо эти механизмы неприменимы к моей ситуации. Сервер не веб, хочу запилить его как виндовый сервис в систему (пишется тоже на C Sharp, то есть будут выдумываться свои костыли API). И вопрос в догонку. Допустим я организую на сокете это дело, под него придется выделить конкретный порт. И вот кто то решит залить большой файл на сервер. Получается, пока он льет, никто не может ни отослать сообщение, ни получить ответ, так? Если да, то в какую сторону копать, чтобы обеспечить много клиентов одновременно на одном порту? И как серверу обеспечить обратную связь с авторизованными клиентами (то бишь теми, кто онлайн), дабы обеспечить быструю доставку новых сообщений? За основу реализации своей идеи выкапываю код с этой страницы http://xnim.ru/blog?id=29 Буду благодарен за любые ссылки, направления поиска и даже грубый код в мой адрес!

Решение задачи: «Авторизация пользователя в самописном приложении и многопользовательский режим»

textual
Листинг программы
public void Login(string userName, string userPassword, InstanceContext ctx);

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы