适用于
Microsoft ASP.NET
Microsoft .NET 框架
Microsoft Active Directory 或关系数据库(例如 Microsoft SQL Server?)

摘要:讨论数据源、初始化和 Microsoft .NET 框架基于角色的安全功能的使用,以及如何在 MSDN Survey Admin 示例中实现它们。

本页内容
简介
定义用户和角色
选择数据源
Survey Admin 数据源
Principal 对象和 Identity 对象
安全性漏洞
更多信息
小结

定义用户和角色
选择实现基于角色的安全性需要讨论如何识别用户(用户名)和用户类型(角色)。

Survey Admin 示例中的用户

实现基于角色的安全性时所要作出的一个重要选择是如何区分用户。该程序作为 Web 应用程序实现,因此有四种选择:Windows、Forms、Passport 或 None。该示例使用 Windows 身份验证并且拒绝匿名用户。这些更改应用到新 Web 应用程序的默认 Web.config 文件:

<authentication mode = "Windows" />
<authorization>
  <deny users="?" />
</authorization>

在授权块中,通配符 "?" 用于识别所有匿名用户。 把该通配符包含在 deny 元素中的结果是匿名用户集被拒绝授权。

当以这种方式使用 Windows 身份验证时,使用 HttpContext 对象以 DOMAIN\username 的格式给定用户名:

sUserName = HttpContext.Current.User.Identity.Name

在示例的设计讨论中我们同意有四种用户类型。首先是调查管理员(survey administrator),他能查看和更改应用程序中的所有页面。调查管理员是唯一能添加新用户和删除用户帐户的用户类型。还有调查所有者(survey owner)。该用户类型只能查看和修改他所创建的调查。另一种用户类型是调查分析员(survey analysts),调查所有者能管理调查分析员,调查分析员有查看其调查结果的权限。最后是匿名用户(anonymous),他在该示例中用作冗余的用户类型。

示例通过四种命名角色实现:SurveyAdministrator、SurveyOwner、SurveyAnalyst 和 AnonymousUser。一个用户可以拥有前三种角色中任何一种;所有用户都至少拥有 AnonymousUser 角色。

也许还有其他用户类型,例如 UserManager(用户管理器)。用户管理器可以添加新用户和删除用户帐户,但却不能查看任何调查。如果有时间验证该示例,注意您能否添加该功能。

选择数据源
在哪里管理用户角色最好?有几个安全数据源选项用于维护用户/角色关系。选择取决于公司策略、编程经验和维护要求。当您在审查数据源选项时,请选择最适合于用户数量和安全策略的数据源。

XML 数据文件作为数据源

对单用户管理而言,XML 数据文件是小用户集或用于测试目的的合理数据源。理想情况下,如果用户数量超过用户管理器的容忍阀值(用于 XML 中数据输入工作),那么应该设计一个编辑 XML 数据文件的自定义接口。

Active Directory 作为数据源

Active Directory 最有可能成为数据源的最佳选择。用户接口是操作系统的一部分,它已被广泛地测试并可以使用了。许多情况下,已建立了用户和组(角色)关系。有关如何使用 Microsoft Windows Platform SDK 从 Active Directory 中检索用户和角色信息的详情,请参阅 Enumerating Groups 上的Active Directory 帮助主题。

关系数据库作为数据源

用户上下文可能被要求改进数据库中的内容选择。使用关系数据库(例如 Microsoft SQL Server(TM))管理角色和用户是 Active Directory 基于角色的安全数据源的又一最佳选择。

Survey Admin 数据源
MSDN Survey Admin 示例使用关系数据库作为它基于角色的安全组件的数据源。实际上,该示例并专门使用 Microsoft .NET 框架基于角色的安全功能。这些功能仅在示例的用户界面组件上实现,例如控件的可视状态和页面重定向。

Microsoft .NET 框架基于角色的安全组件可用于验证对数据库内容的访问,但这在设计阶段看起来并不实用。例如,如果是对调查所有者的调查集进行查询,那么数据库不会根据角色对结果进行限制。所有用户拥有的调查都会被返回,那将是一个很大的集合。在数据库服务器上筛选由特定所有者创建的调查比在其他任何地方处理结果集都更有意义。当数据库查询结果通过网络发送到客户端时,发送比所需更多的数据常常是不明智的。MSDN Survey Admin 示例中的存储过程使用自定义 Transact-SQL 基于角色的安全检查。

MSDN Survey Admin 示例向它所使用的数据库中添加四个新的表对象;旧数据库中的五个现有对象并不作更改。

此主题相关图片如下:

图 1. 修订过的 survey 数据库架构

Owners 和 Analysts 表用于组织拥有查看特定调查权限的用户。Owners 表限制的唯一性约束将只允许一个用户成为调查所有者。角色记录在 Users 表的 Type 列。使用 HttpContext 对象的 Web 应用程序中可用的用户上下文对数据库不一定可用。它取决于数据库连接凭据。而唯一标识符,即 AuthenticatedUsers 表中的 Key 列在用户登录时维护。拥有受限访问的存储过程需要该键作为参数。

在该实现中,一个用户只关联一个角色:为特定用户选择角色列表的存储过程包括带有结果集的 AnonymousUser 角色。理想情况下,应用程序应该不需要从数据库中多次检索角色。在 MSDN Survey Admin 示例中,这种情况在加载 Login.aspx 页面时会发生。数据库返回与特定用户相关联的角色的 XML 表示,该表示被转换为字符串数组。该字符串数组保留在 Session 对象中

注 如果选择使用 XML 输出来设计存储过程,可以在 SqlCommand 对象上使用方法 ExecuteScalar。但是,输出字符串有一个最大长度。长字符串将被截断。这时使用方法 ExecuteXmlReader。还需要几条额外的语句,但使用打开的 XmlReader 对象的 OuterXML 属性可以得到相同的 XML。

Principal 对象和 Identity 对象
System.Security.Principal 命名空间中的 Principal 和 Identity 对象是 Microsoft .NET 框架用户管理工具。理解这两个对象是使用基于角色的安全功能的重要部分。Identity 对象是当前线程中的用户。Principal 对象类似于用户组的概念,但是最好仅把它定义为当前线程中用户的安全性上下文。基于角色的安全性就是在这里初始化的。

使用角色列表初始化用户

初始化用户的目标是在添加角色名称的字符串数组时保留用户标识。HttpContext.Current.User 对象是 Survey Admin 示例中被修改的用户。如果查阅源代码,模块 RoleBasedSecurity.vb 包含了初始化 Principal 对象的代码:

' sRoles is a string array of role names.
HttpContext.Current.User = _
    New GenericPrincipal(HttpContext.Current.User.Identity, sRoles)

通常,实现 Microsoft .NET 框架基于角色的安全功能的解决方案将在 global.asax 模块的 Application_AuthenticateRequest 事件中初始化用户。Survey Admin 示例从数据库请求一次角色并在会话中保留信息。Principal 对象在不同模块的 Load 事件中初始化。

使用用户检查权限

Principal 对象的 IsInRole 方法用于测试初始化的 Principal 对象。输出是一个布尔值。一旦用户被初始化,检查权限所需的命令如下所示:

cmdNewUser.Visible = User.IsInRole("SurveyAdministrator")

安全性漏洞Microsoft 的 .NET 框架安全专家 Erik Olson 建议,解决方案(例如 Survey Admin)应该使用安全套接字层 (SSL) 来实现。实施 SSL 能够保护基于 cookie 的会话和验证协议不被截获。另一个最佳选择是使用短会话生存期。通过猜测会话 ID,系统容易受到截获,但这并没有很大的危险。

当需要使用命名帐户连接到数据库时,可以把登录凭据从 Web.config 文件中移出来提高应用程序的安全性。如果使用受信任连接,这不是问题。

更多信息
Microsoft .NET 框架基于角色的安全性

有关使用 Forms 身份验证(而不是 Windows 身份验证)的基于角色的安全功能的另一个示例,请参阅 Microsoft Visual Studio .NET 产品文档中的 Duwamish 7.0:Security 部分。

要研究 .NET 框架安全对象,请参阅 .NET 框架开发者指南联机帮助中的 Role-Based Security。

MSDN Survey 示例

有关 MSDN Survey 示例(MSDN Survey Admin 示例以它为基础)的更多信息,请参阅 Survey 示例:Web Form Design in ASP.NET。

小结
Microsoft .NET 框架基于角色的安全功能为多个用户类型使用的应用程序提供了方便。实现该功能所需的代码很少,对于像 MSDN Survey Admin 示例这样的 Web 应用程序而言,对象检查权限只需要 HttpContext 对象中 Identity 对象的 IsInRole 方法。

MSDN Survey Admin 示例混合使用了 Microsoft .NET 框架和自定义基于角色的安全性。用户界面功能主要使用 Microsoft .NET 框架基于角色的安全功能来检查权限和设置显示状态。在该示例应用程序的数据源中,自定义基于角色的安全性用于限制查询结果。

Survey Admin 示例:实现 Microsoft .NET 基于角色的安全性(转)相关推荐

  1. 使用 Web Services Enhancements 2.0 的基于角色的安全性

    使用 Web Services Enhancements 2.0 的基于角色的安全性 简介 Microsoft .NET Framework 和 Microsoft ASP.NET 提供了许多保护代码 ...

  2. k8s、ServiceAccount权限详解、RBAC 详解(基于角色的访问控制),常用操作指令

    文章目录 Service Account应用示例 RBAC 详解(基于角色的访问控制) 创建一个角色(role)---权限 实验二 常用操作指令 Service Account应用示例 概念图权限关系 ...

  3. 『SQL Server 2000 Reporting Services学习笔记』(1)报表管理器的使用 与 通过角色分配配置安全性...

    『SQL Server 2000 Reporting Services学习笔记』(1)报表管理器的使用 与 通过角色分配配置安全性 __________________________________ ...

  4. 在中间层 .NET 应用程序中通过授权管理器使用基于角色的安全

    基于角色的安全是从 Windows NT 的第一个版本开始在 Windows 平台上发展而来的.使用角色,操作系统可以通过检查称为 BUILTIN\Administrators 的组的安全上下文做出一 ...

  5. Jenkins配置基于角色的项目权限管理--转

    本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理. 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Str ...

  6. .NET6之MiniAPI(九):基于角色的身份验证和授权

    身份验证是这样一个过程:由用户提供凭据,然后将其与存储在操作系统.数据库.应用或资源中的凭据进行比较. 在授权过程中,如果凭据匹配,则用户身份验证成功,可执行已向其授权的操作. 授权指判断允许用户执行 ...

  7. ThinkPHP的RBAC(基于角色权限控制)详解

    ThinkPHP的RBAC(基于角色权限控制)详解 一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到 ...

  8. spring boot shiro redis整合基于角色和权限的安全管理-Java编程

    一.概述 本博客主要讲解spring boot整合Apache的shiro框架,实现基于角色的安全访问控制或者基于权限的访问安全控制,其中还使用到分布式缓存redis进行用户认证信息的缓存,减少数据库 ...

  9. Jenkins Role-based Authorization Strategy基于角色的访问权限控制

    文章目录 一.概述 `插件允许定义如下 三种角色.` 全局角色(Global roles) 项目角色(Item roles) 从节点角色(Node roles) 二.基本操作 `安装插件Role-ba ...

最新文章

  1. python爬虫插件_Python使用Chrome插件实现爬虫过程图解
  2. python中range什么意思_python里range什么意思
  3. testNG入门详解
  4. C#使用Redis的基本操作
  5. hdu 1257 最少拦截系统 (DP)
  6. 们--加强菲波那切数列
  7. Java基础篇:简单介绍一下final
  8. configure:13747: error: You requested FFmpeg (h264, h263, theora, mp4v-es) but not found...die
  9. PMP项目管理13个计划
  10. python单循环_「单循环赛」单循环赛制 - seo实验室
  11. android 语音播报,android实现语音播报textToSpeech
  12. 谷歌seo外链Backlinks研究工具推荐
  13. crmeb多商户1.7.3
  14. 题目 1549: 盾神与积木游戏
  15. 群晖docker给showdoc添加ssl证书
  16. 网工必备工具软件——一看就懂,一听就会,一做就废
  17. vue+element UI分页的使用方法
  18. 七牛云上传视频并转码
  19. stm32c8t6+dht11+MQ系列环境检测模块+oled显示屏(基于物联网的家庭环境检测系统设计)
  20. 笨拙的手指 代码优化版

热门文章

  1. java流程控制if_java程序流程控制(分支结构之 if-else)
  2. 文件夹在哪里_在Mac电脑上截图和照片放在哪里?
  3. oracle存储过程的创建与调用,Oracle 存储过程创建及调用
  4. activemq网页管理端使用_iCloud大更新,移动端网页版推出 安卓也能使用
  5. 花瓣长度和花瓣宽度散点图鸢尾花_[创意榫卯结构] 形如花瓣的燕尾榫,不但美,而且非常牢固...
  6. linux下无线网卡安装debian,Debian/Linux下无线网卡驱动的安装,网卡型号是「BCM43228」...
  7. 解决 Beyond Compare 3 许可证密钥被撤销
  8. 获取小程序 openid
  9. flink的watermark简单理解
  10. MIPI - DVP