【发布时间】:2015-09-13 16:39:11
【问题描述】:
我遇到了很多问题,每当我调用 ASP.Net Identity Async 方法时,我都会收到来自 SQL 服务器的拒绝访问异常。
以下返回一个用户:
var user = (from u in ctx.Users
where u.Id == 1
select u).FirstOrDefault();
而
var user = await userManager.FindByIdAsync(1);
触发异常
System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINE$'.
似乎正在发生的事情是我们的 web.config 配置/system.web 部分中有以下行
<identity impersonate="true" userName="DOMAIN\Domain User" password="xxx" />
此模拟用户有权访问 SQL Server 数据库,但应用程序池用户没有。似乎每当我在 ASP.Net Identity 中调用异步方法时,它都会退回到应用程序池用户并失去模拟。
我确实在https://stackoverflow.com/a/30876110/1093406https://stackoverflow.com/a/30876110/1093406 找到了一个类似的带有解释的听起来问题
这也会导致我的问题吗?
除了将应用程序池用户更改为具有数据库访问权限的用户之外,还有什么办法可以解决这个问题?
使用 web.config 设置模拟用户是一种旧的做事方式,现在是不好的做法吗?
编辑:经过进一步调查,我发现了这些文章 http://www.hanselman.com/blog/AvoidUsingImpersonationInASPNET.aspx http://blog.codeishard.net/2012/09/17/await-async-mvc-and-impersonation/
除非有人能告诉我,否则使用模拟似乎是个坏主意。
【问题讨论】:
-
This 可能会有所帮助
-
@Yuval 这看起来和我遇到的问题一样,但是我正在开发的 Web 应用程序将由其他公司的 IT 部门(他们的技能水平不同)安装在 IIS 服务器上,并且IIS 服务器也可能托管其他应用程序,因此修改任何全局设置是不切实际的。很高兴知道我不是唯一遇到这些问题的人。
-
web.config 不是全局设置;它仅适用于运行相关应用程序的应用程序池。
-
@Claies 我没有注意到它说的是 web.config。我之前发现了该设置并在 web.config 中尝试它失败(当我检查 SecurityContext.IsFlowSuppressed 时它没有影响设置)并且这个 msdn.microsoft.com/en-us/library/6bs4szyc(v=vs.110).aspx 说它只适用于 iis aspnet.config。跨度>
标签: c# asp.net async-await impersonation asp.net-identity-2