我正在編寫ASP.NET代碼以在將使用Windows身份驗證的內部網絡上運行。某些操作將要求我對其他用戶(不是當前用戶)運行組成員資格檢查檢查其他用戶的角色成員身份(IsInRole,WindowsIdentity/Principal)
注意:我不試圖模擬此帳戶或訪問此其他用戶的上下文中的任何信息。試圖找出他們是用於內部業務邏輯的用戶。
我首先想到的是使用
new WindowsPrincipal(new WindowsIdentity("MACHINENAME\\username"))
.IsInRole("MACHINENAME\\Group1")
然而,構造函數的WindowsIdentity失敗,一個SecurityException「提供的名稱不是正確格式的帳戶名」。
如果我從參數剝離MACHINENAME \,我得到一個不同的錯誤:目前可供登錄請求沒有登錄服務器
的WindowsTokenRoleProvider角色提供明確僅與當前工作用戶,並且不會檢查其他用戶帳戶。
檢查其他用戶的角色是否存在安全限制?如果網絡服務器位於域中並且我正在檢查域帳戶,它會有所幫助嗎?最後,我需要在AD域上進行這項工作,但希望可以在本地或AD帳戶上運行的解決方案。
謝謝
更新:我已經能夠現在來測試這個站點上 - 這個代碼不工作在AD背景下,只要我不使用域名(測試「用戶名」反對「組別」,而不是「域\用戶名」反對「域\組別1」)
那麼我將如何得到這個在本地用戶和組的情況下工作?
克萊德,你嘗試過調整的ContextTypes和ContextOptions和這樣。我似乎能夠處理域或dmz驗證,但我的解決方案使用ldap服務器。 _connection =新PrincipalContext(ContextType.Domain,_ldapserver, 「DC =域名,DC = COM」,ContextOptions.SimpleBind,_adminUser,_adminPassword); –
PrincipalContext似乎像解...這是爲我工作。 – Clyde