【发布时间】:2014-09-11 08:41:52
【问题描述】:
我有 2 个 MVC 应用程序共享一个公共数据库。一个位于 Internet 服务器上,对 GateKeeper 数据库使用匿名身份验证,另一个位于 Intranet 服务器上,对 Active Directory 使用 Windows 身份验证。
我想通过重写 EntityFramework 的 SaveChanges 方法来实现审计跟踪。在这个覆盖中,我想记录登录用户的用户名。在外部站点上,它将是电子邮件地址,在 Intranet 站点上,它将是 AD 帐户名称。
这两个应用程序都使用集成安全性连接到数据库,因此它们都运行在可以访问数据库的通用应用程序池帐户上。
我尝试使用Environment.UserName 和 System.Security.Principal.WindowsIdentity.GetCurrent().Name,但两者都给了我应用程序池用户帐户,一个根本没有域:
UserName = Environment.UserName //{ result = CAPETOWN\global-custom }
UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name //{ result = global-custom }
如何获得我想要的用户名
【问题讨论】:
-
你可能不应该这样做,给应用程序(在这种情况下是 web 应用程序)确定和设置用户名的责任,而不是你的数据/存储库层,这应该只是负责保存/检索和验证数据。
标签: c# asp.net-mvc entity-framework authentication