我是ASP.NET MVC世界的新手。我正在构建一个Intranet Web应用程序。我的情况下定义了身份验证和授权,如下所示:
身份验证:如果HttpRequest包含带有“USER_ID”的标头,则会对用户进行身份验证。 授权:有一个内部WCF服务,它返回用户有权将USER_ID作为输入的角色列表。我将我的应用程序所需的角色保存在xml文件中。如果用户的必需角色是svc响应,则允许她使用该应用程序。
我正在考虑如下所示实施它:
在Global.asax中 - > Application_AuthenticateRequest,我将代码检查http Header。如果它是non_blank,我会让用户经历这个阶段。
在AuthorizeAttribute类的OnAuthorization方法中,我将把代码放到fetch role list中,并将它与xml文件中的必需角色进行匹配。
我有什么方法可以使用现有的身份验证,授权基础架构吗?
我看到这样的代码
[Authorize(Roles = "admin")]
public string Index() {
return "only admins!";
}
如何将上面的Roles属性链接到某些Xml或Table而不是硬编码?
请帮我在asp.net mvc应用程序中实现这个逻辑。
答案 0 :(得分:1)
您应该检查Windows Identity Foundation(WIF),特别是ClaimsAuthorizationManager和ClaimsPrincipalPermissionAttribute。后者允许您指定需要保护的操作和资源,而在ClaimsAuthorizationManager中,您可以检查当前用户是否可以对资源执行操作,并且可以从您想要的任何源读取。
答案 1 :(得分:0)
对于授权,我会:
在具有相应角色的global.asax AuthorizeRequest事件处理程序中创建GenericPrincipal,并将其分配给HttpContext.User和Thread.CurrentPrincipal。
或者(更好),编写一个自定义RoleProvider,从xml文件中获取用户角色。如果配置了这样的RoleProvider,ASP.NET将为HttpContext.User和Thread.CurrentPrincipal分配合适的RolePrincipal。
然后,您可以使用标准AuthorizeAttribute
。