Je pense vraiment que si restreindre les activités disponibles sur le côté serveur (en fonction du rôle) ne suffit pas, que vous avez un problème plus grave. Même si un utilisateur n'écrit pas son propre client, le mécanisme que vous utilisez pour vos appels à distance risque d'être intercepté et manipulé. L'essentiel est que vous devriez limiter les appels possibles qui peuvent être faits contre le serveur, et traiter chaque appel au serveur comme potentiellement malveillant. Pouvez-vous penser à un exemple de scénario dans lequel une action serveur qu'un utilisateur authentifié particulier serait autorisé à prendre serait acceptable s'il utilisait votre client mais était dangereuse s'il n'utilisait pas votre client? Si c'est le cas, je dirais que vous comptez trop sur votre client.
Cependant, plutôt que de critiquer juste que je voudrais essayer d'offrir aussi des réponses réelles à votre question ainsi. Je ne pense pas que la signature de votre fichier jar sera suffisante si vous imaginez un utilisateur malveillant; En général, la cryptographie à clé publique peut ne pas vous aider car l'utilisateur malveillant hypothétique qui recompose votre source aura accès à votre clé publique et ainsi usurper l'authentification que vous avez créée.
En fin de compte, il faut quelqu'un dans le système en qui vous avez confiance, et vous devez donc déterminer qui c'est et baser votre sécurité autour d'eux.Par exemple, imaginons qu'il peut y avoir de nombreux utilisateurs dans une entreprise particulière à laquelle vous ne faites pas confiance, et un administrateur qui les supervise, à qui vous faites confiance. Dans ce scénario, vous pouvez configurer votre client de sorte que l'administrateur doit entrer un code spécial au démarrage, et que ce code soit conservé en mémoire et transmis avec toute demande. De cette façon, même si l'utilisateur reverse votre code, il n'aura pas le code d'admin. Bien sûr, les appels de votre client à votre serveur seront toujours vulnérables à être interceptés et manipulés (sans compter que cette exigence serait une douleur royale dans le cou pour vos utilisateurs).
Ligne de fond: si l'ordinateur de votre utilisateur appelle votre serveur, alors votre utilisateur appelle votre serveur. Ne faites pas confiance à votre utilisateur. Limitez ce qu'ils peuvent faire, peu importe le client qu'ils utilisent.
J'ai des rôles avec des noms d'utilisateur/mots de passe (bien sûr), mais cela ne résout pas le problème avec la capacité des utilisateurs à écrire leurs propres clients. Mais la dernière partie est intéressante. Merci d'avoir répondu. –
Est-ce le web dont vous parlez? Ce n'est pas une application web, c'est une application java EE distribuée. Si un utilisateur a une paire utilisateur/mot de passe, il peut écrire son propre client et utiliser cet utilisateur/passe. Il serait alors connecté. Woulnd't il? Il serait certainement sur notre système autant que je sache. –
Les noms d'utilisateur et les mots de passe sont-ils codés en dur? Dans cette situation terrible, oui, il pourrait se connecter. Si ceux-ci sont vérifiés par rapport à une base de données, alors vous pouvez toujours les changer. Les applications java EE distribuées utilisent également des sessions. – kgiannakakis