User.Identity.Name 返回 NT AUTHORITY\NETWORK SERVICE 我想要 Domain\USER
在我的 asp.net MVC 项目中,
我有一个带有连接字符串的数据库连接: 数据源=.;初始目录=dbname;集成安全性=True
所有用户都可以在该连接上执行存储过程,我想记录这些用户。
因此,每次执行后我都会将“User.Identity.Name”存储到另一个数据库中。 这在我的开发计算机上工作得很好,但部署后,要访问该站点,我必须通过 VPN 连接,然后远程桌面到运行 IIS 的同一服务器并在那里使用 Web 浏览器。然后我得到 User.Identity.Name:“NT AUTHORITY\NETWORK SERVICE”。我希望它是我在远程桌面中输入的可以访问数据库的凭据。
知道我怎样才能让它发挥作用吗?
iis6 身份验证:“Windows 身份验证:已启用” 网络配置:
in my asp.net MVC project
i have an database connection with connectionstring:
Data Source=.;Initial Catalog=dbname;Integrated Security=True
All users can execute Stored Procedures on that connection and i want to log those users.
so after each execution I store "User.Identity.Name" to another database.
This work great on my development machine but after deployment, to access the site i have to go through a VPN-connention and then remote desktop to the same server that the IIS is running on and use a web-browser there. Then i get User.Identity.Name: "NT AUTHORITY\NETWORK SERVICE". i would expect it to be the credentials i entered in remote desktop that have access to the database.
any idea how i can get this to work?
iis6 authentication: "windows authentication: enabled"
web.config:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你必须使用模仿。否则,将使用应用程序池标识。基本上,这是通过 web.config 条目完成的。
这里您有完整的参考。
ASP.NET 模拟
You have to use impersonation. Otherwise, the application pool identity is used. Basically, it's done with this web.config entry
Here you have the complete reference.
ASP.NET Impersonation
您需要设置 模拟 设置为 true,否则网站将在用于 AppPool 的凭据下运行。它在 Cassini 中工作的原因是,当您调试时,Cassini 是在您自己的凭据下运行的。
You need to set Impersonation to true, otherwise the web site runs under the credentials used for the AppPool. The reason that it works in Cassini is that Cassini is running under your own credentials while you are debugging.