Russian Qt Forum

Qt => Работа с сетью => Тема начата: Trademaster от Сентябрь 27, 2013, 19:48



Название: Авторизация на сервере
Отправлено: 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;
QString name;
QString password;

Код:
QByteArray array;
array.append(identificationNumber);
array.append(name.toUtf8());
array.append(password.toUtf8());
tcpClientSocket.write(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 Если он сделал так, как я написал, у него открытым текстом идёт пароль / логин.

Ну я знаю только понаслышке. Самое простое - посылать не пароль, а хеш пароля с солью. Ну или использовать https например.
Верно, есть известный протокол аутентификации - Challenge-Handshake Authentication Protocol (CHAP). При установлении соединения с клиентом, сервером сервер генерирует salt и предает клиенту. Тот вычисляет хэш (md5) пароля и отправляет обратно. Сервер тоже вычисляет хэш и сравнивает.