【发布时间】:2012-12-06 13:34:13
【问题描述】:
我正在使用 Entity Framework 5。我们使用 Microsoft Active Directory 进行用户身份验证。我们使用的是适当的 n 层架构,因此在大多数情况下,业务层完全不知道 UI。
现在我们需要保留完整的审计跟踪:每次对数据库进行任何写入操作时,我们都必须将其保存到我们的审计日志中,以及进行更改的人员。
抓写应该比较简单;我将在我的数据上下文中覆盖SaveChanges() 并使用ObjectStateManager 查找所有插入、更新和删除。真正的问题将是检测当前用户是谁,因为身份验证是在表示层完成的,而业务层 DLL 将托管在 IIS 上,为任意数量的客户端进程提供服务。
是否有某种方法可以在业务层内检测客户端使用的身份验证凭据?我绝对不想将用户 ID 传递给 API 中的每个接口!
(FWIW,我也在使用 EntityFramework.Extended,据说它具有一些本机 AuditLog 功能,但 documentation 严重不足。任何有成功使用此功能的经验的人吗?有帮助吗?)
【问题讨论】:
-
表示层是业务层的可信子系统吗?
-
我认为这是一个 Intranet 应用程序?
-
@Grumbler85 我不太明白这个问题。怎么会被信任?表示层引用了 BL,而不是相反。
-
表现层是充当用户(所以它是委托用户凭据)还是在自己的安全上下文中充当(some_user@yourdomain)?
-
@Shaul,由于您已经在使用 Windows 身份验证,您应该能够在部署的业务层上简单地使用 Windows 身份验证,从而知道正在访问该会话的用户。只需禁用匿名访问并要求 Windows 身份验证。
标签: c# asp.net-mvc entity-framework authentication active-directory