具有 ASP.NET 模拟的实体框架 Windows 身份验证

本文关键字:框架 Windows 身份验证 实体 ASP NET 模拟 具有 | 更新日期: 2023-09-27 18:34:47

我有一个使用模拟的 ASP.NET 应用程序。我的ConnectionStrings是使用 EntityConnectionStringBuilder 动态生成的。

当我使用SQL Server Authentication时它工作正常,但是当我通过将用户ID和密码替换为Trusted_Connection=Yes;来使用Windows Authentication时,我收到一条错误消息,指出"System.Data.SqlClient.SqlException (0x80131904(:无法打开登录请求的数据库DB_Name"。登录失败。用户"DomainName'MachineName$"登录失败。

看起来实体框架正在使用内置用户帐户(MachineName$(,而不是模拟用户"DomainName'User1"。

如何将 EF 配置为使用模拟用户帐户进行 Windows 身份验证?

具有 ASP.NET 模拟的实体框架 Windows 身份验证

您没有使用模拟。 如果是,那么这将起作用(假设您的数据库已正确配置为允许来自模拟用户的访问(。

EF 未使用"内置"帐户。 它使用运行工作进程的任何帐户,在大多数情况下,该帐户将是应用程序池标识或网络服务,两者都使用计算机 Active Directory 帐户作为凭据。

换句话说,EF 使用连接字符串告诉它使用的任何内容,如果你告诉它使用受信任的连接,则它使用进程/线程正在运行的任何内容。

事实上,在集成管道模式下运行时,IIS7 或更高版本不支持模拟。 原因是 IIS7 与 .NET 绑定更紧密,并支持异步处理程序。 异步处理程序存在模拟问题,因为启动处理程序的线程可能与在放弃其线程以执行异步工作后异步请求恢复时恢复处理程序的线程不同。

通常,除非你有一个非常具体的用例,否则你可能不应该将你的体系结构设计为需要模拟,因为这会产生很多影响。

如果需要使用具有特定用户的资源,则可以使用 WindowsIdentity 主体并以这种方式进行模拟,但这必须在一个小块(网络调用本身(的范围内完成。

我不确定你是如何尝试模拟的,但它显然不起作用。 在大多数情况下,如果您尝试在 IIS7+ 上模拟,您应该会收到错误,所以问题实际上是......是什么让你认为你在使用冒充?