Comment mettre en œuvre des composants de sécurité dans Windows Forms?
Venant de ASP.NET en WindowsForms développement d'une application, je m'attendais à voir les mêmes commandes pour travailler avec. À ma grande surprise, je ne vois pas de contrôles de sécurité (ouverture de session, gestion des utilisateurs, etc.)
Suis-je raté quelque chose, ou je serais obligé de mettre en œuvre ma propre sécurité de l'application (en fonction des rôles de sécurité, gestion des utilisateurs, etc.)?
La demande est pour un usage interne (de 10 à 20 utilisateurs) mais la sécurité est très importante en raison de données sensibles. (MSSQL Server 2005 est dans le back-end, .NET 3.5)
Toute info serait apprécié.
EDIT:
je suppose que ma question est "Est-il un analogue de ASP.NET's du fournisseur d'appartenances en WinForms?"
EDIT2:
après quelques recherches sur Google j'ai trouvé cet article, je vais lui donner un essai, toutes les autres suggestions sont appréciés.
- Il n'est pas surprenant d'authentification et d'autorisation sur le bureau sont pris en charge par Windows / Active Directory. Je conseille fortement de ne pas rouler votre propre, mais au lieu d'utiliser la substance en s'appuyant sur le système d'exploitation.
Vous devez vous connecter pour publier un commentaire.
La plupart du temps une application Windows Forms est utilisé dans un réseau interne, avec les comptes de Domaine Windows.
Dans ce cas, vous devez utiliser "sécurité Intégrée" pour se connecter à la base de données et de tester si l'utilisateur est authentifié avec
sinon
authentifier l'utilisateur/passer par l'intermédiaire de votre propre méthode (db appel)
(non recommandé)
utilisateur authentifié/pass
ET placez le Fil.CurrentPrincipal à votre propre objet Principal
Puisque vous n'avez pas accepté de répondre et depuis que je suis tombé sur cette question, la recherche de l'autre, je m'efforcerai de vous donner quelques conseils.
Comme cela a été souligné, la gestion des utilisateurs et de la sécurité basée sur les rôles dans une victoire de formulaires de l'application n'est pas quelque chose qui va vraiment travailler côté client. Dans un site web analogie, imaginez que vous essayez de mettre en œuvre l'ensemble de votre sécurité à l'aide de javascript et les cookies, en gardant aucune information sur le serveur-côté. C'est l'insécurité par défaut.
Comme il a également été suggéré, vous pouvez implémenter la sécurité de votre base de données et demandez à vos utilisateurs de se connecter directement à la base de données à partir de votre formulaire de gagner. Je voudrais vous recommandons fortement de ne PAS poursuivre un tel cours. La gestion des utilisateurs deviendra un cauchemar. Vous besoin un niveau intermédiaire.
Ce que vous devez faire est de construire un service web qui implémente la sécurité basée sur les rôles (puisque vous êtes familier avec elle: il y a de mieux autorisation options là-bas) et a une authentification personnalisée magasin. Si vous utilisez de la WCF pour créer le service web, vous pouvez utiliser le même RoleProvider et MembershipProvider classes que vous êtes habitué à ASP.NET.
Que web service s'occupe de toutes les affaires de la logique de votre système et est responsable de la connexion à la base de données. Il fournit une couche d'abstraction et réduit le montant de l'administration de base de données que vous devez faire afin de gérer vos utilisateurs. Votre win forms application devient une INTERFACE utilisateur shell, responsable uniquement pour la gestion des interactions utilisateur et avant la validation de données (vous devez également valider la catégorie moyenne) et rien d'autre.
Microsoft a publié un Client de Services d'Application, de faire exactement ce que je pense que vous cherchez...
http://msdn.microsoft.com/en-us/library/bb384297.aspx est la doc officielle
http://aspalliance.com/1595_Client_Application_Services__Part_1 est un bon tutoriel (avec des captures d'écran, etc)
Je cherchais la même et ne pouvait pas trouver quoi que ce soit jusqu'à maintenant. Check this out:
Pas beaucoup de choses ici:
Fournisseurs NETS en WinForms
http://windark.net/blog/PermaLink,guid,5341a7d0-4eab-473d-9143-a3fa6c41db90.aspx
La solution est ici. Un bon exemple (en VB):
À l'aide de la ASP.NET fournisseur d'appartenances dans une application Windows forms
http://www.theproblemsolver.nl/usingthemembershipproviderinwinforms.htm
Mais ensuite j'ai pensé, il y a quelqu'un qui a aussi écrit le aspnet contrôles équivalent pour les Winforms ? Le début est ici, dans cette MSDN Mag de l'article:
Unifier les Formes de Windows et ASP.NET Fournisseurs de Gestion des informations d'Identification
http://msdn.microsoft.com/en-us/magazine/cc163807.aspx
J'espère que cela répond à votre question 😉
D'un formulaire de connexion, je utiliser mon propre composant qui est un wrapper autour d'un appel de p/invoke pour CredentialsUIPromptForCredentials (credui.dll), voir cet article MSDN pour plus d'info. Il offre des fonctionnalités telles que la capacité de manière sécurisée rappelez-vous les mots de passe utilisateurs.
Il est surprenant que ce n'est pas disponible dans le Cadre. Peut-être parce que credui.dll n'est disponible que sur XP et versions ultérieures, auquel cas nous pouvons le voir dans une future version du framework.
Que pour la sécurité basée sur les rôles, c'est par nature précaire dans une application cliente, depuis un smart utilisateur a accès à votre code source avec un désassembleur.
Ainsi, alors que vous pouvez utiliser l'ASP.NET RoleManager dans une application WinForms, il n'est pas activement encouragée. Avec RoleManager l'utilisateur serait tout simplement besoin de remplacer votre RoleManager avec sa propre plus libérale mise en œuvre dans le fichier de configuration de contourner vos soigneusement conçu règles d'autorisation.
De sécuriser la voie à suivre consiste à demander des informations d'identification (ou de l'utilisation des informations d'identification windows), et de les transmettre à un niveau de service (soit la base de données directement, ou par exemple, un service web) pour l'authentification.
Si vous vous connectez directement à la base de données (pas de niveau intermédiaire), vous avez besoin d'appliquer votre sécurité au niveau base de données.
Si vous avez plus d'informations si vous prévoyez de connecter directement à la base de données à partir de la machine client ou par l'intermédiaire d'un service web etc je peux mettre à jour ma réponse pour refléter cela.
Lors de la connexion directe à la base de données, vous devez vous assurer que la base de données est sécurisé contre le pas seulement votre application, mais n'importe qui peut se connecter à SQL Server. Vous pouvez utiliser l'authentification windows pour se connecter à SQL Server et configurer les rôles sur cette base.