Название: Авторизация на сервере Отправлено: Trademaster от Сентябрь 27, 2013, 19:48 Ребят ,я создал самую простую модель клиент - сервер. Но нужно сделать так ,что бы клиент мог подключиться к серверу только если передаст ему правильный логин и пароль. Не подскажете как?
P.S сервер реализован с помощью QTcpServer Название: Re: Авторизация на сервере Отправлено: Bepec от Сентябрь 27, 2013, 20:21 Неправильная постановка вопроса.
Вопрос - как сделать так, чтобы сервер обрывал соединение после передачи неправильного логина/пароля. Ответ - обрывать соединение. Разобьём на этапы. 1) клиент создаёт подключение к серверу. Сервер ждёт. 2) клиент передаёт пару логин/пароль. Сервер или убивает соединение, или оставляет, или если клиент не передал в установленный промежуток пару логин/пароль, убивает. 3) происходит общение сервера с клиентом, или же клиент отпочковывается. PS м? Название: Re: Авторизация на сервере Отправлено: Trademaster от Сентябрь 28, 2013, 09:06 Как кодом проверить ,правильный ли передан логин \ пароль???
Название: Re: Авторизация на сервере Отправлено: Bepec от Сентябрь 28, 2013, 09:19 Специально по пунктам разбил.
Ещё упрощу. Соединение клиента с сервером создаётся в любом случае. После чего по этому каналу начинается обмен. Протокол обмена идёт на вашей совести - шифрование, условные команды и прочее. Обычно используется схема запрос-ответ. Клиент соединяется с сервером. (приняли соединение, подключили к сигналу) Сервер запрашивает логин пароль, варианты: 1) клиент отвечает, сервер проверяет if (name == incomingName && password == incomingPassword); 2) клиент не отвечает, сервер перезапрашивает данные ещё 3-4 раза, после неответа убивает соединение. 3) клиент отвечает неправильно, сервер перезапрашивает и так до превышения количества неверного ввода пароля. PS всё ещё непонятно? Название: Re: Авторизация на сервере Отправлено: Trademaster от Сентябрь 28, 2013, 09:36 Специально по пунктам разбил. Ещё упрощу. Соединение клиента с сервером создаётся в любом случае. После чего по этому каналу начинается обмен. Протокол обмена идёт на вашей совести - шифрование, условные команды и прочее. Обычно используется схема запрос-ответ. Клиент соединяется с сервером. (приняли соединение, подключили к сигналу) Сервер запрашивает логин пароль, варианты: 1) клиент отвечает, сервер проверяет if (name == incomingName && password == incomingPassword); 2) клиент не отвечает, сервер перезапрашивает данные ещё 3-4 раза, после неответа убивает соединение. 3) клиент отвечает неправильно, сервер перезапрашивает и так до превышения количества неверного ввода пароля. PS всё ещё непонятно? Я с первого раза все понял ,но я не знаю как именно КОДОМсделать так ,что бы клиент передал значение пароля и логина в переменные сервера ,что бы он их проверил... Название: Re: Авторизация на сервере Отправлено: Bepec от Сентябрь 28, 2013, 10:10 Код: int identificationNumber = 1; Код: QByteArray array; PS набросал в браузере. По хорошему надо DataStream использовать. PPS вы сумели написать клиент-серверное приложение и ни разу не пытались что-то передать серверу от клиента и обратно? Название: Re: Авторизация на сервере Отправлено: mutineer от Сентябрь 28, 2013, 11:13 Я с первого раза все понял ,но я не знаю как именно КОДОМсделать так ,что бы клиент передал значение пароля и логина в переменные сервера ,что бы он их проверил... Точно так же, как клиент будет передавать любые другие данные серверу Название: Re: Авторизация на сервере Отправлено: Trademaster от Сентябрь 28, 2013, 23:04 Все отлично ,теперь научил свою программу сообщать серверу логин и пароль ,а сервер различать ,верный логин и пароль или нет.
теперь другой вопрос. нужно это как-то обезопасить. У кого какие советы будут? Название: Re: Авторизация на сервере Отправлено: mutineer от Сентябрь 28, 2013, 23:50 Обезопасить от чего? От уведения базы паролей? От перехвата трафика? От перебора паролей?
Название: Re: Авторизация на сервере Отправлено: Bepec от Сентябрь 29, 2013, 07:57 Скорее его перехват интересует :D Если он сделал так, как я написал, у него открытым текстом идёт пароль / логин.
Ну я знаю только понаслышке. Самое простое - посылать не пароль, а хеш пароля с солью. Ну или использовать https например. Название: Re: Авторизация на сервере Отправлено: sergek от Сентябрь 29, 2013, 13:54 Скорее его перехват интересует :D Если он сделал так, как я написал, у него открытым текстом идёт пароль / логин. Верно, есть известный протокол аутентификации - Challenge-Handshake Authentication Protocol (CHAP). При установлении соединения с клиентом, сервером сервер генерирует salt и предает клиенту. Тот вычисляет хэш (md5) пароля и отправляет обратно. Сервер тоже вычисляет хэш и сравнивает.Ну я знаю только понаслышке. Самое простое - посылать не пароль, а хеш пароля с солью. Ну или использовать https например. |