簡體   English   中英

為什么PrincipalContext.ValidateCredentials針對舊憑據進行驗證?

[英]Why is PrincipalContext.ValidateCredentials validating against old credentials?

我們有一個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 Server2003。如果我在計算機上的Visual Studio中運行所有程序,則一切正常,並且可以根據當前設置正確檢查憑據,但是一旦將其部署到生產計算機上的IIS,它就會出現根據緩存的憑證進行驗證。

我不知道問題到底出在哪里,但是我確實找到了解決問題的解決方案。

同時運行WCF服務和Silverlight應用程序的AppPool使用NETWORK SERVICE作為登錄標識。 我將其切換為管理登錄名,現在它可以根據當前用戶帳戶正確驗證登錄名,新用戶帳戶和密碼更改將立即生效。

如果有人可以解釋為什么這是他們自己的答案,那么我很樂意接受。

此代碼作為本地系統用戶創建的異常而啟動

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

Msdn說:“ ValidateCredentials方法綁定到構造函數中指定的服務器”

我認為本地系統憑證存在問題。 在這種情況下,下一個代碼可以正常工作:

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

(對不起我的英語不好)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM