ASP.NET MVC 4:身份验证和授权:Intranet应用程序

时间:2013-12-01 17:27:52

标签: c# asp.net .net asp.net-mvc asp.net-mvc-4

我是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应用程序中实现这个逻辑。

2 个答案:

答案 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