2016-09-23 5 views
-1

Aus Sicherheitsgründen möchten wir überprüfen, ob der aktuelle PC-Benutzer der tatsächlich angemeldete Benutzer ist. Dazu möchten wir, dass der Benutzer sein Kennwort erneut eingibt und seine Anmeldeinformationen mit der Domäne überprüft. Wie können wir das erreichen?Wie überprüft man, ob der aktuelle PC-Benutzer der aktuell angemeldete Benutzer ist?

Sofar haben wir versucht, dieses:

public static Boolean Authenticate(String password) 
{ 
    String user = WindowsIdentity.GetCurrent().Name; 

    using (PrincipalContext PrincipalContext = new PrincipalContext(ContextType.Domain, Environment.UserDomainName)) 
    { 
     return PrincipalContext.ValidateCredentials(user, password); 
    } 
} 

Aber ein System.DirectoryServices.Protocols.LdapException bekommen, auch die Environment.UserDomainName off verlassen diese Ausnahme auslöst.

Wir haben auch versucht:

public static Boolean Authenticate(String password) 
{ 
    String user = WindowsIdentity.GetCurrent().Name; 

    using (PrincipalContext PrincipalContext = new PrincipalContext(ContextType.Machine)) 
    { 
     return PrincipalContext.ValidateCredentials(user, password); 
    } 
} 

Aber das gibt auf jedem Passwort wahr.

Antwort

1

Nach einigem Suchen bin ich auf this answer gestoßen. Stellt sich heraus, dass der Domänenname in WindowsIdentity.GetCurrent().Name enthalten ist. Wie unter den Anmerkungen in der documentation gefunden.

geben dies als Arbeitslösung:

public static Boolean Authenticate(String password) 
{ 
    String user = WindowsIdentity.GetCurrent().Name; //Should be: DomainName\UserName 
    String[] DomainAndUserName = user.Split(new Char[] { '\\' }, 2); 

    if (DomainAndUserName.Length != 2) { return false; } // No DomainName ==> Wrong network; 

    using (PrincipalContext PrincipalContext = new PrincipalContext(ContextType.Domain, DomainAndUserName[0])) 
    { 
      return PrincipalContext.ValidateCredentials(DomainAndUserName[1], password); 
    } 
} 
Verwandte Themen