为什么PrincipalContext.ValidateCredentials验证旧凭据?

时间:2012-07-17 15:30:24

标签: c# wcf credentials directoryservices

我们有一个WCF服务,可根据计算机上的本地Windows帐户验证用户的凭据,但无论何时创建新用户或更改密码,用户都无法登录,直到我重新启动整个计算机。

我该怎么做才能告诉它根据当前用户设置检查凭据,不要使用旧设置?

using (var pContext = new PrincipalContext(ContextType.Machine))
{ 
    if (pContext.ValidateCredentials(username, password))
    {
        using (var context = new LHREntities(Connections.GetConnectionString()))
        {
            // Do work
        }
    }
}

我正在使用.Net framework 4.0和Windows Server 2003.如果我在我的机器上运行Visual Studio中的所有内容,一切正常并且根据当前设置正确检查凭据,但是一旦我将其部署到生产机器上的IIS ,它似乎验证了缓存的凭据。

2 个答案:

答案 0 :(得分:1)

我不知道究竟是什么问题,但我确实找到了解决问题的解决方案。

运行WCF服务和Silverlight应用程序的AppPool使用NETWORK SERVICE作为登录标识。我将其切换为管理登录,现在可以正确验证当前用户帐户的登录,新用户帐户和密码更改立即生效。

如果有人可以解释为什么这是他们自己的答案,我会很乐意接受它。

答案 1 :(得分:0)

此代码在本地系统用户创建相同异常时启动

using (var p = new PrincipalContext(firstUser))
{
    p.ValidateCredentials(secondUser);
}

Msdn说:“ValidateCredentials方法绑定到构造函数中指定的服务器”

我认为本地系统凭证存在问题。在这种情况下,下一个代码可以正常工作:

using (var p = new PrincipalContext(secondUser))
{
    p.ValidateCredentials(null, null);
}

(抱歉我的英文)