Авторизация пользователя в самописном приложении и многопользовательский режим - C#
Формулировка задачи:
Доброго времени суток!
Хочу написать свой велосипед мессенджер (точнее что-то похожее на него, так как нужен будет специфический набор инструментов, но сейчас не об этом). Архитектура по принципу много клиентов и один сервер со своей СУБД.
Уроков нашел кучу, с самыми разнообразными реализациями (сокеты, без них и т.д.), но нигде не описываются адекватные способы аутентификации и авторизации. То есть, допустим, клиент авторизуется - вбил пароль, клиент пересчитал в хеш, отправил на сервер, тот сверил и выдал обратно новые сообщения. Клиент прочитал их... а теперь хочет отправить ответ, а может и не один (речь уже про пользователя, то есть ответ в рандомное время после входа). И вот тут загвоздка у меня - а как сервер аутентифицирует его? Заново хеш пароля отправлять с каждым сообщением? Стойкость его пока не волнует, просто мне кажется взрослые дяди так не реализуют.
Я так понимаю, что нужно использовать схожий механизм с "печеньками" в браузерах, но все что я находил по теме относилось к вебу и я либо тупой, либо эти механизмы неприменимы к моей ситуации. Сервер не веб, хочу запилить его как виндовый сервис в систему (пишется тоже на C Sharp, то есть будут выдумываться свои костыли API).
И вопрос в догонку. Допустим я организую на сокете это дело, под него придется выделить конкретный порт. И вот кто то решит залить большой файл на сервер. Получается, пока он льет, никто не может ни отослать сообщение, ни получить ответ, так? Если да, то в какую сторону копать, чтобы обеспечить много клиентов одновременно на одном порту?
И как серверу обеспечить обратную связь с авторизованными клиентами (то бишь теми, кто онлайн), дабы обеспечить быструю доставку новых сообщений?
За основу реализации своей идеи выкапываю код с этой страницы http://xnim.ru/blog?id=29
Буду благодарен за любые ссылки, направления поиска и даже грубый код в мой адрес!
Решение задачи: «Авторизация пользователя в самописном приложении и многопользовательский режим»
textual
Листинг программы
public void Login(string userName, string userPassword, InstanceContext ctx);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д