[英]Active Directory authentication issue after reconnect - C#
在@serialhobbyist的請求上添加更多信息
大家好。 我們(=我和我的同事)使用System.DirectoryServices.AccountManagement中的PrincipalContext來檢索一些身份驗證信息(確保用戶屬於某個組,等等)。
重要提示:我們的客戶端是作為LocalSystem運行的服務。 當我們在正常流程中運行或將服務更改為以特定用戶身份運行時,不會發生這種情況
這是一個代碼示例:
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain))
{
Principal p = Principal.FindByIdentity(ctx,IdentityType.Sid, sid);
...
}
通常情況下一切正常(得到答復)。 每隔幾個小時(觸發器不清晰)一次,或者在網絡斷開並重新連接之后(當我們的AD客戶端斷開連接,通過網絡電纜斷開連接或VM適配器禁用等)時,我們將收到此異常:
System.Runtime.InteropServices.COMException (0x80072020): An operations error occurred.
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()
at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable``1 identityType, String identityValue, DateTime refDate)
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue)
at System.DirectoryServices.AccountManagement.Principal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue)
搜索異常(0x80072020),我看到它轉換為LDAP_OPERATIONS_ERROR
(實際上在這里用作代碼值轉換示例:)),我們使用LDAP_OPERATIONS_ERROR
檢查了流量,並在發送任何LDAP查詢之前拋出了異常。
重新啟動過程后,一切恢復正常(可以成功驗證,沒有異常)。 有人可以闡明這件事嗎? 有什么想法可以實現在過程終止時完成的等效清理嗎? 謝謝!
更新:我們已經找到解決方法,將在下面提供答案。 但是,我們寧願找到一個更簡單的解決方案。
我們在msdn上找到了一種解決方法,方法是使用DirectoryEntry + DirectorySearcher對象直接查詢LDAP。 這需要一些相當麻煩的解析(考慮這不是我們的主要專長),而不是通過現有對象進行工作。 使用這種方法,但是不會遇到上述情況。 如上所述,我們將贊賞使用現有對象的更好解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.