我的同事一直致力於在 FBA 環境中的 web 部件. 除其他外, web 部件拉一些資料從 SQL server. 為此專案的宏偉計畫規定 DBA 在 SQL 配置資料級安全性 (而不是嵌入的使用者 ID 的 SQL 查詢或某些其他方式).
問題是 SQL 伺服器不知道任何有關我們 FBA 環境,所以它不能信任我們. 我們解決了這個問題的, 好的詞, 手動類比 AD 使用者,以便我們可以連接到 SQL 這樣 SQL 資料級安全工程.
即使 FBA 是 ASP.NET 功能, 我們 SharePoint 民族人教的各種搜尋引擎,如果你要查詢的 FBA, 你一定是說你想要知道如何在 SharePoint 中配置 FBA. 我沒能找到找到任何資訊有關如何啟用 FBA 面向 ASP.NET 應用程式以與 SQL 的方式我們需要溝通.
在研究這, 我們重新讀這篇文章: ASP.NET 類比
更多的研究把我們帶到這 codproject 篇文章: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
這説明我們寫我們的代碼, 其中已經低於. 它不是最優雅的東西, 但它的工作. 我希望對您有所説明.
下面是曾為我們工作的代碼:
受保護 空 btnSearchCarrier_Click(物件寄件者, EventArgs e) { 請嘗試 { ImpersonateUser iU = 新增功能 ImpersonateUser(); // TODO: 替換憑據 iU.Impersonate("功能變數名稱", "使用者名", "密碼"); // 代碼 // iU.Undo(); } 捕獲 (Ex 的異常) { } } // 使用下面所述的類比類. 公眾 類 ImpersonateUser { [DllImport(""advapi32.dll, 了 = 真正的)] 公眾 靜態 extern LogonUser bool( 字串 lpszUsername, 字串 lpszDomain, 字串 lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport(""kernel32.dll, CharSet = CharSet.Auto)] 私人 extern 靜態 CloseHandle bool(IntPtr 控制碼); 私人 靜態 IntPtr tokenHandle = 新增功能 IntPtr(0); 私人 靜態 WindowsImpersonationCoNtext impersonatedUser; // 如果您將此代碼合併到一個 DLL, 一定要要求它 // 運行具有 FullTrust. [PermissionSetAttribute(SecurityAction.Demand, 名稱 = ""FullTrust)] 公眾 無效類比(字串功能變數名稱, 使用者名的字串, 字串密碼) { 請嘗試 { // 使用非託管 logonuser) 函數來獲取使用者標記為 // 指定的使用者, 域, 和密碼. const int LOGON32_PROVIDER_DEFAULT = 0; // 傳遞此參數,將導致 logonuser) 來創建一個主權杖. const int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // 一步 -1 調用 logonuser) 來獲取訪問權杖的控制碼. bool returnValue = logonuser)( 使用者名, 功能變數名稱, 密碼, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle); // tokenHandle - 新的安全權杖 如果 (false = = returnValue) { int ret = Marshal.GetLastWin32Error(); Console.WriteLine("Logonuser) 調用失敗,錯誤代碼為 : " + ret); 拋出 新 System.ComponentModel.Win32Exception(ret); } // 一步 - 2 WindowsIdentity newId = 新增功能 WindowsIdentity(tokenHandle); // 一步 -3 impersonatedUser = newId.Impersonate(); } 捕獲 (Ex 的異常) { Console.WriteLine("發生的異常. " + 前。消息); } } /// <摘要> /// 停止類比 /// </摘要> 公眾 void 撤銷() { impersonatedUser.Undo(); // 無標記. 如果 (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</結束>
Technorati 標籤: FBA