2017-08-29 4 views
1

Mon programme est un serveur socket TCP, qui doit être géré sur un réseau par un système de commande-réponse. Le système de transmission de commande (demande) n'est pas un problème: un client envoie un paquet, un serveur le reçoit et génère une réponse. Les paquets sont juste une séquence d'octets.
Le problème est que je dois créer un système de compte simple. Mon serveur doit stocker et gérer deux types de compte: "administrateur" et "utilisateur simple". Par conséquent, je devrais avoir les choses: un enregistrement, une authentification et un système de stockage de mot de passe. Comment cela peut-il être simplement fait sur Qt5? Par exemple, je peux simplement envoyer des noms d'utilisateur et des mots de passe (ou des mots de passe) sur un réseau, mais comment un compte d'administrateur peut-il être initialement créé sur le serveur d'une manière normale? Je n'ai pas d'exigences de sécurité strictes, mais je veux créer un système normal qui aurait du sens.Système de contrôle de compte simple

+0

Vous n'êtes pas sûr de la partie Qt, mais comment envisagez-vous de suivre les sessions? L'utilisation du protocole HTTP est-elle une option? Cela simplifierait beaucoup la connexion et la gestion de la session. Si ce n'est pas le cas, je vous suggère de regarder dans d'autres implémentations de session (peut-être générer un jeton pour les connexions authentifiées ...). L'authentification elle-même peut être [nonce-based] (https://en.wikipedia.org/wiki/Challenge-response_authentication) – urban

+1

La façon la plus simple: les informations d'identification de l'administrateur doivent être prédéfinies via un fichier de configuration du côté serveur. Comme protection supplémentaire, vous pouvez forcer l'utilisateur à changer de mot de passe lors de la première connexion. Autre façon: un grand nombre de CMS fournit un accès complet et des étapes d'installation au premier utilisateur connecté. Btw, votre question n'est pas liée à Qt du tout :) –

+0

@DmitrySazonov merci, très bonne idée! Vous pouvez écrire ceci comme réponse et je l'accepterai). C'est un système entre plusieurs PC de bureau dans un réseau local. Maintenant, je vais faire du système un fichier de configuration prédéfini + forcer l'administrateur à changer de mot de passe lors de la première connexion. Mais peut-être juste un fichier de configuration sur l'ordinateur suffira. –

Répondre

1

Manière la plus simple: les informations d'identification de l'administrateur doivent être prédéfinies via un fichier de configuration côté serveur. Comme protection supplémentaire, vous pouvez forcer l'utilisateur à changer de mot de passe lors de la première connexion. Autre façon: un grand nombre de CMS fournit un accès complet et des étapes d'installation au premier utilisateur connecté.

-1

Utilisez QSslSocket pour obtenir une couche de communication sécurisée (http://doc.qt.io/qt-5/qsslsocket.html), puisque vous allez échanger des mots de passe au-dessus de ce lien d'administration.

Il en est un exemple de la partie client du code, avec QT5: http://doc.qt.io/qt-5/qtnetwork-securesocketclient-example.html

Du côté du serveur, acceptez la prise sur un port inutilisé prédéfini, dédié à votre service. Maintenant, vous pouvez simplement décider d'une connexion avec un mot de passe secret aléatoire, qui correspondra au compte administrateur, et créer un programme pour envoyer ce mot de passe au-dessus d'un canal sécurisé basé sur QSslSocket. Votre serveur doit vérifier le mot de passe avant d'accepter la gestion à distance. Donc, comme vous pouvez le voir, l'administrateur doit être créé avant d'utiliser le service. Vous pouvez utiliser un échange de courrier privé, basé sur certains moyens cryptographiques (OpenPGP, S/MIME, etc.), pour fournir à l'administrateur son mot de passe.

+1

Pas une réponse. "comment un compte administrateur peut être créé?" -> "Utiliser QSslSocket". –

+0

La balise de question était: qtcpsocket. L'avis post-question portait sur la sécurité: «[...] Je n'ai pas d'exigences de sécurité strictes, mais je veux créer un système normal qui aurait du sens». => Ma réponse était "Utiliser QSslSocket" –