我一直在阅读授权,认证,会员资格,角色等所有内容,我目前无法看到树木的木头.我已经看到,现有的ASP.NET安全对象已经过试用和测试,除非有非常复杂的要求,内建的这些对象就足够了,所以我很高兴使用已经存在的内容.
所以如果用户已经登录到网络,这意味着它们是经过验证的 – 是否正确?如果是这样,那么我只需要实施授权.是否需要使用Authorize属性来装饰每个Controller或Action?如果我从我的自定义角色存储应用程序中检索角色,那么如何设置[Authorize(Roles =“ABC”)]的“ABC”部分?
我读了几篇文章和博客文章,包括Jon Galloway的这篇文章,但是我终于失去了意义:
Customizing Authentication and Authorization The Right Way
这么多问题…如果有人知道如何所有这些挂在一起的高级别的描述,那么我都是耳朵:)
解决方法
>该公司使用Active Directory来存储用户登录详细信息,因为这用于成员资格我不需要自定义会员资格提供商.一旦用户登录到公司网络,那么它们被认证.添加全局授权过滤器可确保访问系统的任何用户都需要进行身份验证.来自Rick Anderson的最新信息msdn:
所以在Global.asax我会补充说:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new System.Web.Mvc.AuthorizeAttribute()); //new }
>一旦用户认证,我需要照顾授权.该公司拥有一个现有的全球数据存储区,我不会更新访问权限,只能读取访问权限,因此我可以通过存储过程调用检索给定用户的角色.可能需要几天到几周的时间才能帮助台在请求之后创建角色,因此,最初将创建2个标准角色,即用户和管理员,随后的角色将存储在我们的应用程序数据库中.
>除了这两个标准角色,还需要后续的角色,如超级用户等.这些角色根据业务规则等具有各种权限,并且需要存储在我们的应用数据库中.所以在这种情况下,我将需要创建一个自定义角色提供程序,将相应的asp.net角色表添加到我的应用程序数据库,并将其插入到web.config中.这是一个ms页面,标题是管理授权使用角色,我正在选择一些:
http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx
>从目前为止,我所看到的唯一一个自定义角色提供程序所需的表格是Roles和UsersInRoles.
CREATE TABLE角色
(
Rolename Text(255)NOT NULL,
ApplicationName Text(255)NOT NULL,
CONSTRAINT PKRoles PRIMARY KEY(Rolename,ApplicationName)
)
CREATE TABLE UsersInRoles(用户名文本(255)NOT NULL,Rolename Text(255)NOT NULL,ApplicationName Text(255)NOT NULL,CONSTRAINT PKUsersInRoles PRIMARY KEY(用户名,Rolename,ApplicationName))>一旦设置完毕,我需要弄清楚如何将全球数据存储中的2个标准角色(User and Admin)与存储在我的应用数据库中的自定义角色合并,如果我可以使用(例如)[Authorize(Roles =“Admin,Superuser”)],或者我需要对AuthoriseAttribute进行子类化,并做一些更聪明的事情.>我只是意识到,当我使用AD进行身份验证时,我需要一种方法来添加/注入当前用户是其成员的角色集合.所以虽然我不需要任何自定义的成员资格提供者的功能,我仍然需要与httpContext.User交互来更新其角色集合.