2015-10-23 73 views
0

Intranet中的我的網站(使用Windows驗證)使用某些DLL來檢查Active Directory中的當前用戶權限。它使用方法GetAuthorizationGroups並且完美地工作。該DLL大約在10年前在VS 2005中進行了編譯。現在,我需要對其代碼進行一些更改(未連接到Active Directory)。我在VS 2012,framework 3.5中打開源代碼,編譯並複製到網站的服務器。現在,不屬於此服務器的管理員組的用戶會收到以下錯誤: 嘗試檢索授權組時,出現錯誤(5) 有n o舊版本DLL或用戶出現錯誤administrato r。 以下是我使用的代碼:GetAuthorizationGroups僅以管理員用戶身份運行

PrincipalContext ctx = 新的PrincipalContext(ContextType.Domain,domainName,adusername,adpassword);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx,userID);
PrincipalSearchResult groups = user.GetAuthorizationGroups();

該服務器在Windows Server 2012下工作。 任何幫助,將不勝感激。

+0

如果你只是在net framework 3.5中編譯這個項目,我建議在.net framework 3.5中編譯整個解決方案並將所有的東西一起部署。只在開發環境中進行測試。 –

+0

此外,網站在3.5重新編譯。它沒有幫助。 – eug100

+0

不屬於管理員組的用戶會出錯,但我認爲屬於管理員組的用戶可以正常工作。這是對的嗎? –

回答

0

您的代碼適用於我在.net 3.5中編譯並使用adusername替換userID的用戶,請通過傳遞IdentityType作爲參數(如下所示)來嘗試。

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName, 
adusername, adpassword); 
UserPrincipal user = UserPrincipal.FindByIdentity 
(ctx, IdentityType.SamAccountName, adusername); 
PrincipalSearchResult groups = user.GetAuthorizationGroups(); 
+0

謝謝你的回答。不幸的是,我得到了相同的結果: 雖然試圖檢索授權組,發生了錯誤(5) – eug100

+0

對不起,我沒有複製你的代碼。現在我在 UserPrincipal user = UserPrincipal.FindByIdentity(ctx,userID); – eug100

0

您需要添加此運行的環境(計算機帳戶,如果應用程序池是網絡服務)到Windows授權訪問組在AD。這授予請求者讀取相關屬性的權限。

+0

謝謝你的回答。我應該致電AD管理員向Windows授權訪問組添加帳戶。什麼是機器賬戶?我試圖在不同的應用程序池下運行該網站。特別是在作爲本機管理員的域用戶下運行的池。如果我將它添加到Windows授權訪問組是否足夠? – eug100

+0

機器帳戶是計算機的AD帳戶 - 它與機器的主機名相同。如果應用程序池作爲網絡服務運行,則AD管理員應將該計算機帳戶添加到該組。否則,請將該應用程序池正在運行的域帳戶添加到組中。 –

+0

謝謝你,@布賴恩 - 德斯蒙德,明天我會試試。 – eug100

相關問題