我应该采用什么安全方法?

时间:2014-11-13 11:35:03

标签: .net asp.net-mvc security asp.net-identity-2

我的团队开发了一个大型的Web应用程序。 根据我们的分析:一些用户应该能够访问页面并使用其控件进行添加,更新,删除和批准等。 和其他人应该能够访问那些能够执行任何操作的页面(没有控件) 和其他人有能力执行一些(不是所有)行动 和其他人根本不能访问某些页面。 那么我们应该使用什么方法:成员资格,身份,或使用会话和检查每个页面和页面中每个控件的权限???我们应该做什么 ?? 有人告诉我,我为每个模块页面创建模块和其他模板,为每个页面操作创建另一个模块,并开发一个用于安全检查的类库作为上面的安全层(BLL)是否正确(最佳实践)?如果不是那么?

1 个答案:

答案 0 :(得分:1)

如果您要使用ASP.NET MVC,我建议您使用ASP.Net Identity Framework。 另一种可能性是使用旧的ASP.NET成员资格,但微软正在努力推动新的ASP.Net标识,所以如果我是你,我会使用这个新的框架。

此外,您会注意到ASP.NET Identity会自动创建所需的所有授权表(AspNetUsers,AspNetRoles,...)。因此,如果您不想对它们进行更改,则可以忘记与授权和身份验证相关的所有数据库内容。

This tutorial是了解如何实现ASP.NET标识的良好入门者。

另一方面,我认为将Security作为一个不同的模块(即使在不同的DB中)实现,这是一个好主意,保持Authorization Server和Resource Server分离。同一个博客的This post将向您展示一步一步的教程,以实现它。

<强>被修改

Asp.net身份允许您在控制器级别或操作级别授权您的应用程序:

[Authorize(Roles="Admin")]
public class AdminController : Controller
{
 // ...
}

public class UserController : Controller
{
 [Authorize(Roles="Admin,User")]
 public ActionResult LinkLogin(string provider)
 {
   // ...
 }
}

正如您将在上面的教程中看到的,要管理角色授权,您有三个表:AspnetUsers,AspnetRoles和与之相关的表,AspNetUserRoles。

因此,您可以灵活地授权某些用户使用您的控制器,同时不允许在内部执行某些操作(添加,更新,删除等)。