1

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

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

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

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

4

2 回答 2

1

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

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

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

于 2012-07-17T19:26:36.590 回答
0

此代码作为本地系统用户开始创建相同的异常

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

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

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

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

(对不起我的英语不好)

于 2015-03-18T15:54:08.070 回答