我们有一个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 ,它似乎验证了缓存的凭据。
答案 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);
}
(抱歉我的英文)