我的同事一直致力于在 FBA 环境中的 web 部件. 除其他外, web 部件拉一些数据从 SQL server. 为此项目的宏伟计划规定 DBA 在 SQL 配置数据级安全性 (相对于在 SQL 查询或一些其他的方法中嵌入的用户 ID).
问题是 SQL 服务器不知道任何有关我们 FBA 环境,所以它不能信任我们. 我们解决了这个问题的, 为更好的词的缺乏, 手动模拟 AD 用户,以便我们可以连接到 SQL 这样 SQL 数据级安全工程.
即使 FBA 是 ASP。净功能, 我们 SharePoint 民族人教各搜索引擎,如果你正在查询的 FBA, 你一定是说你想要知道如何在 SharePoint 中配置 FBA. 我没能找到找到任何信息有关如何启用 FBA 面向 ASP.NET 应用程序与 SQL 的方式我们需要沟通.
这研究的过程中, 我们重读这篇文章: ASP。净模拟
更多的研究,把我们带到本文 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, SetLastError = true)] 公众 静态 extern LogonUser bool( 字符串 lpszUsername, 字符串 lpszDomain, 字符串 lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport(""kernel32.dll, 字符集 = 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("发生异常. " + 前。消息); } } /// <摘要> /// 停止模拟 /// </摘要> 公众 无效的撤消() { impersonatedUser.Undo(); // 无标记. 如果 (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</结束>
Technorati 标签: FBA