2011-12-12 66 views
0

我正在編寫ASP.NET代碼以在將使用Windows身份驗證的內部網絡上運行。某些操作將要求我對其他用戶(不是當前用戶)運行組成員資格檢查檢查其他用戶的角色成員身份(IsInRole,WindowsIdentity/Principal)

注意:我不試圖模擬此帳戶或訪問此其他用戶的上下文中的任何信息。試圖找出他們是用於內部業務邏輯的用戶。

我首先想到的是使用

new WindowsPrincipal(new WindowsIdentity("MACHINENAME\\username")) 
     .IsInRole("MACHINENAME\\Group1") 

然而,構造函數的WindowsIdentity失敗,一個SecurityException「提供的名稱不是正確格式的帳戶名」。

如果我從參數剝離MACHINENAME \,我得到一個不同的錯誤:目前可供登錄請求沒有登錄服務器


的WindowsTokenRoleProvider角色提供明確僅與當前工作用戶,並且不會檢查其他用戶帳戶。

檢查其他用戶的角色是否存在安全限制?如果網絡服務器位於域中並且我正在檢查域帳戶,它會有所幫助嗎?最後,我需要在AD域上進行這項工作,但希望可以在本地或AD帳戶上運行的解決方案。

謝謝

更新:我已經能夠現在來測試這個站點上 - 這個代碼不工作在AD背景下,只要我不使用域名(測試「用戶名」反對「組別」,而不是「域\用戶名」反對「域\組別1」)

那麼我將如何得到這個在本地用戶和組的情況下工作?

+1

克萊德,你嘗試過調整的ContextTypes和ContextOptions和這樣。我似乎能夠處理域或dmz驗證,但我的解決方案使用ldap服務器。 _connection =新PrincipalContext(ContextType.Domain,_ldapserver, 「DC =域名,DC = COM」,ContextOptions.SimpleBind,_adminUser,_adminPassword); –

+0

PrincipalContext似乎像解...這是爲我工作。 – Clyde

回答

1

基於搶劫的評論,PrincipalContext和UserPrincipal是我顯然需要使用類:

using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine)) 
     { 

      var u = UserPrincipal.FindByIdentity(ctx, IdentityType.Name, "username"); 

      var b = u.IsMemberOf(ctx, IdentityType.Name, "Group1"); 


      var groups = u.GetAuthorizationGroups(); 

     } 

而且通過改變ContextType,可以將本地帳戶和AD帳戶之間進行切換。我希望這被構建到一個RoleProvider中,但我想這是我必須爲自己做的事情。

相關問題