1

マシン上のローカルWindowsアカウントに対してユーザーの資格情報を検証するWCFサービスがありますが、新しいユーザーが作成されたりパスワードが変更されたりすると、ユーザーはマシン全体を再起動するまでログインできません。

クレデンシャルを現在のユーザー設定と照合し、古いものを使用しないように指示するにはどうすればよいですか?

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

.Net Framework4.0とWindowsServer2003を使用しています。自分のマシンのVisualStudioですべてを実行すると、すべてが正常に機能し、資格情報が現在の設定に対して正しくチェックされますが、これを実稼働マシンのIISに展開すると表示されます。キャッシュされた資格情報に対して検証します。

4

2 に答える 2

1

問題が正確に何であるかはわかりませんが、問題を解決する解決策を見つけました。

WCFサービスとSilverlightアプリケーションの両方を実行していたAppPoolはNETWORK SERVICE、ログインIDとして使用していました。これを管理者ログインに切り替えたところ、現在のユーザーアカウントに対してログインが正しく検証され、新しいユーザーアカウントとパスワードの変更がすぐに有効になりました。

なぜこれが彼ら自身の答えにあるのか誰かが説明できれば、私はそれを喜んで受け入れます。

于 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 に答える