Error when using PrincipalContext.ValidateCredentials to authenticate against a Local Machine?

后端 未结 1 1620
北海茫月
北海茫月 2021-02-05 21:03

I have a WCF service which contains a Login method that validates a username and password against the local machine credentials, and after a seemingly random period

1条回答
  •  鱼传尺愫
    2021-02-05 21:36

    The closest I can find online towards explaining this problem is this forum post, where the user experiencing the same error and got a replay stating:

    The WinNT provider does not do well in a server environment. I am actually suprised you don't see this with a much smaller load. I have been able to get this with only 2 or 3 users.

    and this SO comment stating

    The BEST way to correctly authenticate someone is to use LogonUserAPI as @stephbu write. All other methods described in this post will NOT WORK 100%

    where "all other methods" includes the top voted answer of using PrincipalContext.ValidateCredentials

    Its sounding like PrincipalContext.ValidateCredentials isn't completely 100% reliable on Windows Server 2003 and IIS6.0, so I rewrote my authentication code to use the LogonUser WinAPI method instead.

    [DllImport("advapi32.dll", SetLastError = true)]
    public static extern bool LogonUser(
        string lpszUsername,
        string lpszDomain,
        string lpszPassword,
        int dwLogonType,
        int dwLogonProvider,
        out IntPtr phToken
        );
    
    IntPtr hToken;
    if (LogonUser(username, "", password, 
        LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, out hToken))
    {
        ...
    }
    

    0 讨论(0)
提交回复
热议问题