8
votes

Comment utiliser l'authentification Windows dans l'application Windows?

Comment utiliser l'authentification Windows (utilisateur administrateur de la machine locale) dans l'application Windows écrite en C #.

besoin est chaque fois que l'utilisateur ouvre mon interface graphique de l'application Windows, il doit authentifier les informations d'identification de l'administrateur local même si l'utilisateur est connecté en tant qu'administrateur.

est cette impersonnation de Windows?


0 commentaires

3 Réponses :


3
votes

Une solution est si vos utilisateurs s'exécutent en tant que compte standard, si vous définissez votre fichier manifeste pour être exécuté en tant qu'administrateur, il invitera toujours un nom d'utilisateur et un mot de passe administrateur toujours.

Ce que vous recherchez probablement est le Logonuser Win32 API Pour valider les informations autorisées: P>

[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(
    string lpszUsername, 
    string lpszDomain, 
    string lpszPassword, 
    int dwLogonType, 
    int dwLogonProvider, 
    out IntPtr phToken
    );


1 commentaires

Comment pourrais-je le rendre spécifique aux utilisateurs de l'administrateur? Authentifiez simplement un utilisateur d'administrateur local valide (non domestique ou d'autre utilisateur local).



8
votes

Vous pouvez appeler la méthode logonuser API pour vérifier un nom d'utilisateur et un mot de passe.
Vous pouvez voir le [dllimport] ici . < / p>

Si vous souhaitez afficher une invite de nom d'utilisateur / mot de passe standard, vous pouvez appeler le creduiPrompetForCredentials fonction API; Voir aussi ici

Edit

Pour vérifier si l'utilisateur est un administrateur, vous pouvez appeler checkTokenMembership et vérifiez si l'utilisateur se trouve dans le groupe GROUPE .

Alternativement, vous pouvez appeler netunesergetinfo < / Code> niveau 1 et vérifiez si usri1_priv est user_priv_admin . .

Vous pouvez également utiliser WMI ou DirectServices.


3 commentaires

Comment pourrais-je le rendre spécifique aux utilisateurs de l'administrateur? Authentifiez simplement un utilisateur d'administrateur local valide (non domestique ou d'autre utilisateur local).


Vous devez vérifier si le nom d'utilisateur est dans le groupe Administrateurs local. msdn.microsoft.com/en-us/library/ AA376389% 28VS.85% 29.aspx


Pour vérifier si l'utilisateur est administrateur: j'utilise le jeton d'utilisateur (une variable de la méthode de la connexion de la Logonuser). Voici le code: - Identité de WindInsidity = nouveau windowidentitity (hotes); Windowsprincipal Principal = Nouveau Windowsprincipal (identité); Renvoyer le principal.Isincrètement (WindowsBuiltInrole.Administrator);



4
votes

Peut être un peu en retard mais pour atteindre Authentification de la fenêtre Fonctionnalité forte> à une application de bureau C #, il existe deux étapes avec des étapes ci-dessous.

Étape 1: strong> Obtenez actuellement connecté Détails de l'utilisateur: P>

C'est assez simple. Nous pouvons y parvenir en utilisant la classe Windowsity de System.Security.Principal code> Espace de noms. Cette classe fournit une méthode statique, getCurrent () code>, qui renvoie un objet de windowsity. Ci-dessous est le code que vous pouvez utiliser pour obtenir le courant connecté des détails de l'utilisateur. P>

Étape 2: strong> Valider les informations d'identification Windows fournies par l'utilisateur: P>

besoin de demander Nom de domaine, nom d'utilisateur, mot de passe de l'utilisateur pour transmettre ces valeurs au service Interop. Ceci est peu complexe comparé ci-dessus, car nous devons appeler une API Windows à l'aide de Intresservices. Pour accomplir cela, nous devons ajouter une déclaration de fonction externe, puis appeler la fonction. Le code suivant vous aidera à mieux comprendre cela mieux. P>

bool issuccess = false;
string username = GetloggedinUserName();
if (username.ToLowerInvariant().Contains(txtUserName.Text.Trim().ToLowerInvariant()) && username.ToLowerInvariant().Contains(txtDomain.Text.Trim().ToLowerInvariant()))
    {
        issuccess = IsValidateCredentials(txtUserName.Text.Trim(), txtPwd.Text.Trim(), txtDomain.Text.Trim());
    }

if (issuccess)
    MessageBox.Show("Successfuly Login !!!");
else
    MessageBox.Show("User Name / Password / Domain is invalid !!!");


0 commentaires