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

2024-03-06

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

我一直在阅读授权、身份验证、成员资格、角色等的所有来龙去脉,但目前我还只见树木不见森林。我读到现有的 ASP.NET Security 对象已经过尝试和测试,除非有非常复杂的要求,否则内置的就足够了,所以我很乐意使用已有的内容。

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

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

以正确的方式自定义身份验证和授权 http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx

这么多问题......如果有人知道所有这些如何结合在一起的良好高级描述,那么我洗耳恭听:)


好吧,在没有一个答案可以从高层次上说明所有这些如何结合在一起的情况下,我想我应该写下到目前为止的发现:

  • 该公司使用 Active Directory 来存储用户登录详细信息,因此由于它用于会员资格,所以我不需要自定义会员资格提供商。一旦用户登录到公司网络,他们就会通过身份验证。添加全局授权过滤器可确保访问系统的任何用户都需要经过身份验证。 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 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
}
  • 一旦用户通过身份验证,我就需要处理授权。该公司有一个现有的角色全局数据存储,我没有更新访问权限,只有读取访问权限,因此我可以通过存储过程调用检索给定用户的角色。提出请求后,帮助台可能需要几天到几周的时间来创建角色,因此,最初将创建 2 个标准角色:用户和管理员,后续角色将存储在我们的应用程序数据库中。

  • 除了这 2 个标准角色之外,还需要后续角色,例如超级用户等。这些角色将根据业务规则等拥有各种权限,并且需要存储在我们的应用程序数据库中。因此,对于这种情况,我需要创建一个自定义角色提供程序,将适当的 ASP.NET 角色表添加到我的应用程序数据库中,并将其插入到 web.config 中。这是一个标题为“使用角色管理授权”的 MS 页面,我从中挑选了一些内容:

    http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx

  • 根据我到目前为止所读到的内容,自定义角色提供程序所需的唯一表是 Roles 和 UsersInRoles。

    创建表角色 ( 角色名称文本 (255) NOT NULL, 应用程序名称文本 (255) NOT NULL, CONSTRAINT PKRoles PRIMARY KEY(角色名、应用程序名称) )

    创建表 UsersInRoles ( 用户名文本 (255) NOT NULL, 角色名称文本 (255) NOT NULL, 应用程序名称文本 (255) NOT NULL, CONSTRAINT PKUsersInRoles 主键(用户名、角色名、应用程序名称) )

  • 一旦完成所有这些设置,我需要弄清楚如何将全局数据存储中的 2 个标准角色(用户和管理员)与存储在我的应用程序数据库中的自定义角色合并,以及是否可以使用(例如)[Authorize(Roles= “管理员,超级用户”)] 在控制器/操作上,或者如果我需要子类化 AuthoriseAttribute 并做一些更聪明的事情。

  • 我刚刚意识到,当我使用 AD 进行身份验证时,我需要一种添加/注入当前用户所属角色集合的方法。因此,尽管我不需要任何自定义成员资格提供程序功能,但我仍然必须与 httpContext.User 交互以更新其 Roles 集合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC4 安全性、身份验证和授权 的相关文章

  • EF5、SQL Server、经度和纬度

    我发现在 SQL Server 中存储纬度和经度的最佳类型是十进制 9 6 参考文献 1 在 SQL 数据库中存储纬度和经度数据时应使用什么数据类型 https stackoverflow com questions 1196415 wha
  • 如何在 MVC4 的 UserProfile 中创建自定义附加字段

    我遇到了新的 ASP MVC 4 功能 它附带了新的成员资格数据库模式和新的初始化 在 mvc 3 和旧版本中 开发人员能够使用 web config 中的规范创建自定义用户配置文件字段 但现在我面临默认 mvc 4 项目中过滤器命名空间中
  • Ember 数据保存方法,创建与更新

    我不明白 Ember 如何确定是否应该更新或创建记录 我认为它是基于 ID 或商店条目 但它似乎是其他东西 代码示例阐明了 this returns the user without making an api call currentUs
  • 处理 PHP 中的会话劫持

    阅读了 Stackoverflow 上有关会话劫持的许多问题 我发现验证用户会话的唯一 解决方案 是检查用户代理 这是一个薄弱的保护层 我什至懒得去检查实施它 所以 我想知道你们实施了哪些解决方案 您是否使用 PHP 的本机会话或者是否有更
  • 从 ASP.NET Web API 返回 HTML

    如何从 ASP NET MVC Web API 控制器返回 HTML 我尝试了下面的代码 但由于未定义 Response Write 而出现编译错误 public class MyController ApiController HttpP
  • 连接尝试失败,因为连接方未正确响应

    我在 1and1 上有一个共享服务器 在我的 MVC 站点中 当我尝试连接到外部的另一台服务器时 出现以下错误 发送请求时发生错误 无法连接到 远程服务器连接尝试失败 因为连接方 一段时间后没有正确回应 或建立 连接失败 因为连接的主机未能
  • 找不到实体框架数据提供程序,entityclient

    首先 我发现许多问题和许多答案与我的问题相关或被认为与我的问题相同 但似乎没有什么对我有用 我有一个全新的模板化 MVC4 网站 全新安装的 sql server 2008 r2 中有一个全新的数据库 我在数据库上运行 aspnet reg
  • 在 MVC 4 中使用路由更改 URL 参数

    我的几个 API 函数允许使用名为 attribute 和 attributeDelimiter 单数 的参数 这意味着预期的 URL 格式为 SomeController SomeAction aaa bbb attribute ccc
  • ASP.Net MVC 4 通用主要难点

    我正在开发一个ASP NET MVC 4Web应用程序 以前我的 MVC 应用程序是使用MVC 3和这个新的MVC 4我刚刚复制 重复使用了我的应用程序认证和授权码从以前的应用程序 当用户登录我的网站时 我会执行以下操作 账户控制器 pub
  • 在 C# 中创建我的对称密钥

    一直在审查一些对称加密方法 我看到了很多在类中硬编码私有静态变量的示例 通常类似于 string key THISISYOURENCRYPTIONKEY 然后在更远的地方 代码使用它来加密 解密 抛开正确的实现 算法 策略以及存储它的位置
  • 一个 Guice 就绪的安全框架?

    有没有人见过一个为与 Guice 一起工作而编写的框架 或者一个将现有安全系统 即 Acegi 与 Guice 集成的库 到目前为止我发现了以下内容 http code google com p warp security http cod
  • 是否可以从 .apk 文件获取 Android.mk 或本机源文件?

    看来从 apk文件中获取Java源文件是很容易的 但是否有可能得到Android mk or native通过工具或棘手的方法从 apk 文件中获取源文件 我正在研究 Android 应用程序本机代码安全性 因此这些文件对我来说非常重要 谢
  • python:PyPi公共模块:如何确定是否安全?

    我已经完成了我的 python 3 应用程序 它正在使用 PyPi 的多个公共模块 然而 在我将其部署到我公司的企业 将处理客户的凭据并访问第 3 方 API 之前 我需要尽职调查确保它们既安全又安全 我必须执行哪些步骤 验证 PyPi 模
  • 了解 ASP.NET 应用程序文件夹

    ASP NET 中的应用程序文件夹用于存储对运行网站至关重要的各种元素 我想更深入地了解这些文件夹 特别是文件夹的可访问性 根据有关的文章ASP NET 网站布局 http msdn microsoft com en us library
  • 如何正确链接不同View之间

    我有一个master cshtml带有导航栏 我的第一个链接是另一个视图 ProjectManagement li a href Views ProjectManagement cshtml Project Management a li
  • 使用鼠标检测的反验证码

    我想知道是否可以为仅使用 javascript 的表单创建一个安全的人体检测机制 不使用验证码 来检测鼠标移动 因为 jquery 或操作系统代码都可以移动鼠标 我是这么告诉的 这是我的计划 使用 jQuery 我可以检测鼠标是否已移动 然
  • 限制 SQL Server 连接到特定 IP 地址

    我想将 SQL Server 实例的连接限制为特定 IP 地址 我想阻止来自除特定列表之外的任何 IP 地址的任何连接 这是可以在 SQL Server 实例或数据库中配置的东西吗 听起来像是你会使用Windows防火墙 http tech
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • IsReusable 属性中的上下文切换

    是否可重用属性 下面是我的理解IsReusable财产 如果处理程序返回静态内容 将值设置为 true 是安全的 但如果线程返回动态内容 为了使其线程安全 IsReusable应设置为 false 在这种情况下 可能会发生上下文切换 这可能
  • 使用 Apache HTTPd 模块的 OAuth 2.0 身份验证

    是否可以使用 Apache HTTPd 服务器模块来实现 OAuth 2 0 或 1 0 我选择这条路线是因为每个请求都会首先到达 HTTPd 模块 因此我必须从那里进行身份验证 如果可能的话 请分享相关链接 我要补充一下尤金尼奥的答案mo

随机推荐