2012-08-13 148 views
1

我有一个asp.net webforms项目。在需要保护的所有领域的应用程序中添加业务逻辑认证检查的标准方式是什么?Asp.net身份验证检查

例如,Page X只能被标有'Admin'的人看到。

一个更复杂的例子:只有属于一组管理用户A,B和C的人的用户可以修改用户A,B或C的配置文件信息。

我可以继续谈论数百个需要身份验证检查的地方和类型,但基本上我知道这样做的唯一方法是在每个按钮单击处理程序page_load的开始处运行大量自定义代码,GridView rowChange等,它将首先检查一些业务逻辑,然后允许它或返回。

更普遍的是,是否有必要对这些业务逻辑进行身份验证检查,以便基本上每次回发?

回答

1

如果检查是基于角色和矮胖的,例如, “Admin”角色可以执行此页面上的所有代码,但是没有其他人可以 - 然后使用缓存在FormsAuthentication cookie中的角色和一个PrinciplePermission属性,例如http://msdn.microsoft.com/en-us/library/ms731200.aspx您也可以将这些属性放在方法上。但是,它们不允许进行复杂的授权检查,并且在不重新编译代码的情况下不容易更改。

如果检查仅是部分基于角色和粒度的,例如,秘书可以点击这个,管理员可以查看这个,周末可以看到这个,等等。然后你需要在你的代码中进行授权检查。您必须重新执行授权检查,除非您可以将结果缓存在安全的地方。如果ViewState已加密,则可以将结果缓存在ViewState中。

如果您没有检查回发授权,那么您很容易受到自定义制作的帖子的调用,这些帖子会在禁用的按钮,不可见的按钮等上调用事件。通过加密viewstate并保持事件验证开启,您可以减轻某些事情太。

将代码分解为实用程序类和基类,以最大限度地减少重复。