【问题标题】:Why is PrincipalContext.ValidateCredentials validating against old credentials?为什么 PrincipalContext.ValidateCredentials 针对旧凭据进行验证?
【发布时间】:2012-07-17 15:30:24
【问题描述】:

我们有一个 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 ,它似乎针对缓存的凭据进行验证。

【问题讨论】:

  • @vcsjones 不,他们是机器上的本地 Windows 用户。
  • 本地运行时,是在Cassini上还是在本地IIS实例上?我问是因为每次调试时都会刷新应用程序域(可能还有进程)。
  • @casperOne WCF 服务和应用程序都在 Visual Studio 工作时运行

标签: c# wcf credentials directoryservices


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    (对不起我的英语)

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2018-09-09
      • 2021-09-27
      • 2014-09-07
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多