跳到主要內容

Rainbow Portal 2.0 NTLM 網域整合Hack (續)

照著Rainbow Portal 2.0 NTLM 網域整合Hack修改後,遇到要利用AD群組時,找不到舊版選擇Windows 群組的選項。

在MSDN上ADSI的範例,.Net 1.1和.Net 2.0/3.5也略有不同,而我測試結果是.Net 2.0版本才可正常運行。我自己的情況是在Projects\Rainbow.Framework.Core\Helpers\ADHelper.cs裏的 public static string[] GetUserGroups(string UserAccount) 沒有傳回group資料,因此這裏利用MSDN的範例寫一個簡易版,若能正確執行就不必自己改。public static ArrayList getUserGroups(string userid) // userid是去掉DOMAIN的user account
{
string path = Config.ADdns;
ArrayList ret = new ArrayList();
ret.Add("Authenticated Users");
ret.Add("All Users");
DirectoryEntry entry =
new System.DirectoryServices.DirectoryEntry(path);
System.DirectoryServices.DirectorySearcher mySearcher = new
System.DirectoryServices.DirectorySearcher(entry);
mySearcher.Filter = "(anr=" + userid + ")";
try {
foreach (System.DirectoryServices.SearchResult result in
mySearcher.FindAll()) {
DirectoryEntry oUser;
oUser = new DirectoryEntry(result.GetDirectoryEntry().Path);
object groups = oUser.Invoke("Groups");
foreach (object group in (IEnumerable)groups) {
DirectoryEntry groupEntry = new DirectoryEntry(group);
ret.Add(groupEntry.Name.Substring(groupEntry.Name.LastIndexOf("CN=") + 3));
} } }
catch (Exception) { }
return ret;
}
再修改Projects\Rainbow.Framework.Core\Security\Security.cs的 public static bool IsInRole(string role) ,令其正確判斷user是否為正確的群組。由於找不到AD群組,因此改成在SQL找到同名的Role時一樣有效,這樣也是另類的整合認證。

改到這裏已經可以利用AD控制授權,接下來就得想辦法把舊版的Rainbow Portal升級。

Update: VB超人提供VB6.0列舉AD群組的方法,請看

留言

這個網誌中的熱門文章

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。 本來只是要申請些政府業務,一時之間找不到光碟,沒想到在 驅動程式下載 居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

如何將較高版本SQL Server複製到低版本SQL Server (降級為舊版)並保留權限及資料庫圖表

一般若是要將SQL Server裡的Database轉往其他Server時,最簡單的方式就是備份(Backup)後再還原(Restore),或者是䣃離(detach)後附加(attach)。 但是很不幸地,若是由較低版本(e.g. 2008)到較高版本(e.g. 2012)要怎麼辦呢?