2016-09-23 21 views
-1

セキュリティ上の理由から、現在のPCユーザーが実際にログオンしているユーザーかどうかを確認する必要があります。これを行うには、ユーザーがパスワードを再入力し、ドメインでの資格情報を確認する必要があります。私たちはどうすればこれを達成することができますか?現在のPCユーザーが現在ログオンしているユーザーかどうかを確認するにはどうすればよいですか?

SOFAR我々はこれを試してみました:

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); 
    } 
} 

しかしSystem.DirectoryServices.Protocols.LdapExceptionを取得し、この例外をトリガもEnvironment.UserDomainNameをオフのまま。

また試してみました:

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

    using (PrincipalContext PrincipalContext = new PrincipalContext(ContextType.Machine)) 
    { 
     return PrincipalContext.ValidateCredentials(user, password); 
    } 
} 
をしかし、これは任意のパスワードにtrueを返します。

答えて

1

検索した後、私はthis answerに出くわしました。ドメイン名はWindowsIdentity.GetCurrent().Nameに含まれています。 documentationの備考の下にあるように。

作業溶液としてこれを与える:

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); 
    } 
} 
関連する問題