authentication - ASP.NET MVC4 安全、身份验证和授权

标签 authentication security asp.net-mvc-4

我正在使用 Visual Studio 2011 beta 开发一个新的 asp.net mvc4 项目,并试图了解整个安全问题。它是一个内部 Intranet 应用程序,最初将使用单点登录,因此(还)不会提示用户输入 Windows ID/密码。该公司有一个自定义应用程序,用于存储不同应用程序的角色,并可通过存储过程调用获得。它将获取用户的登录 ID 并返回某种包含角色的集合,例如“MyApp.Data”、“MyApp.User”、“MyApp.Admin”。那么这指的是什么 - 这是自定义成员资格提供程序、自定义角色提供程序还是其他什么?

我一直在阅读有关授权、身份验证、成员资格、角色等的所有细节,目前我看不到树木的木材。我读过现有的 ASP.NET 安全对象已经过试验和测试,除非有非常复杂的要求,否则内置的就足够了,所以我很乐意使用已经存在的东西。

因此,如果用户已经登录到网络,这意味着他们已经过身份验证 - 对吗?如果是这样,那么我只需要实现授权。是否需要用 Authorize 属性来装饰每个 Controller 或 Action?如果是这样,如果我从自定义角色存储应用程序中检索角色,[Authorize(Roles = "ABC")] 的“ABC”部分如何设置?

我阅读了几篇文章和博客文章,包括 Jon Galloway 的这篇文章,但最后我迷路了:

Customizing Authentication and Authorization The Right Way

这么多问题......如果有人知道所有这些如何联系在一起的良好高级描述,那么我会全神贯注:)

最佳答案

好的,如果没有一个答案可以对所有这些是如何联系在一起的,我想我会草草写下我的发现:

  • 该公司使用 Active Directory 来存储用户登录详细信息,因此它用于成员(member)资格,我不需要自定义成员(member)资格提供程序。一旦用户登录到公司网络,他们就会被验证。添加全局授权过滤器可确保访问系统的任何用户都需要进行身份验证。来自 Rick Anderson 在 msdn 上的最新信息:

    http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute.aspx

  • 所以在 Global.asax 我要补充:
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new System.Web.Mvc.AuthorizeAttribute()); //new
    }
    
  • 一旦用户通过身份验证,我就需要处理授权。该公司有一个现有的全局数据存储,用于我没有更新访问权限的角色,只有读取访问权限,因此我可以通过存储的 proc 调用检索给定用户的角色。提出请求后,帮助台创建角色可能需要几天到几周的时间,因此最初将创建 2 个标准角色,用户和管理员,后续角色将存储在我们的应用程序数据库中.
  • 除了这两个标准角色之外,还需要后续角色,例如 super 用户等。这些角色将根据业务规则等具有各种权限,并且需要存储在我们的应用程序数据库中。因此,对于这种情况,我需要创建一个自定义角色提供程序,将适当的 asp.net 角色表添加到我的应用程序数据库中,并将其插入 web.config。这是一个名为“使用角色管理授权”的 ms 页面,我从中挑选了一些内容:

    http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx
  • 到目前为止,我所阅读的自定义角色提供程序所需的唯一表是 Roles 和 UsersInRoles。

    创建表角色
    (
    角色名称文本 (255) 非空,
    应用程序名称文本 (255) 非空,
    CONSTRAINT PKRoles PRIMARY KEY (Rolename, ApplicationName)
    )

    创建表用户角色
    (
    用户名文本 (255) 非空,
    角色名称文本 (255) 非空,
    应用程序名称文本 (255) 非空,
    约束 PKUsersInRoles 主键(用户名、角色名、应用程序名)
    )
  • 完成所有这些设置后,我需要弄清楚如何将全局数据存储中的 2 个标准角色(用户和管理员)与存储在我的应用程序数据库中的自定义角色合并,以及是否可以使用(例如)[Authorize(Roles= “管理员, super 用户”)] 在 Controller /操作上,或者如果我需要继承 AuthoriseAttribute 并做一些更聪明的事情。
  • 我刚刚意识到,当我使用 AD 进行身份验证时,我需要一种添加/注入(inject)当前用户所属角色集合的方法。因此,尽管我不需要任何自定义成员资格提供程序功能,但我仍然必须与 httpContext.User 交互以更新其 Roles 集合。
  • 关于authentication - ASP.NET MVC4 安全、身份验证和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742709/

    相关文章:

    api - 如何在 Flutter 中获取返回的 POST API

    php - 当我使用加盐的 CRYPT_MD5 来加密我的密码时,加密的是什么?

    c# - BundleConfig 正在捆绑我的 CSS 文件的旧版本

    security - Microsoft 帐户 JWT 身份验证 token 是如何签名的?

    c# - MVC 网络应用程序 WIX 安装程序

    c# - Asp.Net MVC、WebApi 和正确的异步方法

    ruby - 使用 Ruby 和 net-ssh,如何通过 Net::SSH.start 使用 key_data 参数进行身份验证?

    python - 如何以编程方式对 Django 中的用户进行身份验证?

    authentication - 禁止在 ASP.NET Core 中对 API URL 进行重定向

    java - 我如何知道 HttpServletRequest 是否受 <security-constraint> 约束?