业务逻辑层应该实现授权和认证吗?

11

我有一个业务逻辑层(“存储库”), 它作为一组.NET接口,支持可交换的具体实现。

最初,这个业务层实现了身份验证和授权(authn/authz),意味着我有像IUserIdentity和IUserRole这样的接口,所有访问敏感数据的方法都需要传入IUserIdentity并在允许动作之前进行授权。

到目前为止,业务层非常不依赖于前端...但是现在,当我尝试集成到一个ASP.NET网站时,我意识到ASP.NET本身通过Membership和Role API内置了丰富的身份验证/授权系统。

所以问题是,我应该从业务逻辑层中删除所有的authn/authz并依靠Web前端来做这件事吗?这会使事情简化很多,但我不知道以后会不会后悔移除它。

另一种选择是保留authn/authz在我的业务逻辑中,但通过自定义的Membership/Role提供程序与ASP.NET集成。然而这似乎非常繁琐...我仍然需要调查这样做的成本。

您会怎么做(或已经做过)以及原因是什么?

5个回答

5

我认为安全是一个横跨各方面的问题,应该包含在方面中。我不知道.NET是否有方面,除非你使用Spring.NET。


实际上(抱歉我应该提到这一点),我正在使用ASP.NET MVC,它通过Authorize属性实现了安全方面的切面概念。 - dso
.NET 中的属性就像 Java EE 中的注解一样,如果我没记错的话。是否有类似于 AspectJ 表达式语言的东西,可以将一个方面应用于一系列方法、类或包? - duffymo

1

保留它。在ASP.NET中,表单身份验证非常容易自定义,您的业务逻辑层保持前端不可知。

考虑远离这种方法,而是尝试使用表单身份验证。基本上,您可以从登录控件的Authenticate事件中调用已建立的方法。


1
我建议您保留现有的逻辑,并围绕现有的安全类编写自定义成员身份验证/角色提供程序,如果您想直接使用asp.net。这比您想象的要容易得多。

http://www.codeproject.com/KB/aspnet/customaspnetproviders.aspx

由于您已经有了管理安全权限的类,这只是意味着对现有逻辑进行封装。

这也将帮助您在以后使用安全逻辑时,比如创建一个使用您的业务逻辑的Winform客户端,或者将您的业务逻辑作为Web服务公开。


0

我认为基于角色的安全性应该在业务层中实现,这也是CSLA所采用的方式。


0

您是否计划使用多个前端(asp.net、winforms、移动设备?)或通过(Web)服务公开业务层?那么您应该在业务层之上实现身份验证。

当您只想授予/拒绝访问权限时,可以在IIS上使用集成安全性,而无需编写自定义代码。

您还可以查看asp.net成员资格提供程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接