ASP.NET安全问题--ASP.NET中的授权问题(前篇)

前言:之前的一些文章谈了一些有关验证的问题,接下来的一些文章就说下授权以及代码访问安全的问题。
 
       在ASP.NET应用程序中,授权就意味着允许访问资源,资源的形式有很多了:文件,数据库,图片等。授权的处理过程基本上是:创建用户或者用户组,然后为他们分配权限。在.NET Framework中,有很多的方式可以实现授权,如文件授权,URL授权以及自定义的授权。

下面我们就来谈下ASP.NET是如何控制访问受限资源的,本篇主要讲述下列问题:
       1.基于角色的安全
       2. 权限的映射:
       3.权限对象Permission简介

本篇的代码不是很多,到了下篇实战篇中尽量给出更多的代码。

系列文章链接:

ASP.NET开发安全问题

ASP.NET安全问题-- 创建安全的Web应用程序

ASP.NET安全问题--ASP.NET安全架构

ASP.NET安全问题--ASP.NET安全架构--如何实现.NET安全

ASP.NET安全问题--ASP.NET生命周期中的验证以及身份验证模块

ASP.NET安全问题--Forms验证的具体介绍(上篇)

ASP.NET安全问题--Froms验证的具体介绍(中篇)

ASP.NET安全问题--Forms验证(后篇)--实战篇

ASP.NET安全问题--ASP.NET中的授权问题(前篇)

   1.基于角色的安全
       相信大家多什么是角色的,以及基于角色的安全都有一些了解,他们的概念就不赘述了。在讲述基于角色的安全之前,希望大家对之前讲过的Identity和IPrincipal要了解(如果不是很清楚的,可以参看我之前的安全的系列文章)。
 
       在.NET中,可以用.NET Framework灵活的将用户标识(Identity)和角色相结合,并且为结合后的主体定义权限。我们之前说过:

 主体(IPrincipal)=(用户标识:包含用户名等信息的对象)Identity+角色;
 
       我们可以定义很多的角色,然后为角色定义访问资源的权限。我们一般是定义角色,如定义一个Customer角色,然后使用户的角色为Customer,然后我们定义Customer的访问权限,那么这些访问的权限就应用到了那些角色为Customer的用户上,也就是说,我们并不是为每个用户分别定义权限,因为那样维护和修改起来麻烦。

当然,我们也可以对特定的用户单独的进行授权,如写入文件。授权的方式很多,但是他们的思想是大体相同的:

通常,一个应用程序的授权步骤如下:

1.判断用户是否有合法的访问资源的凭证(也就是我们之前谈论的验证的过程)
       2.拒绝特定的用户访问特定的资源
       3.允许特定的用户访问特定的资源

  2. 权限的映射:

在.NET 中,有一些内置的Permission对象,它们可以使得用户有合适的权限来访问资源。在讲后面的问题之前,首先说说什么是Permission。我们知道,我们的系统中一般有很多的文件和文件夹,而且这些文件或者文件夹常常都是有访问的权限的,比如,我们可以把一些文件的权限定义为:只能管理员修改,一般的用户只读,这点大家都不陌生了。

注意:我们是通过系统来配置这些文件或者文件夹的权限的。(大家应该都会)

我们的网站,实质其实就是放在服务器上的一些文件,既然这些文件在服务器,如Win Server 2003上,那么这些文件肯定是有访问的权限的。如果你是这台服务器的管理员,那么你就可以对这些文件进行任意的操作,其他的用户就没有这个能力了。

现在我们假设,我们的网站是放在服务器上,而且网站的文件,如aspx页面,图片,App_Code等都在网站的文件夹中,而且这些文件资源的权限早就定义好了,如只读。
 
       其实我们在.NET中的一些Permission类,其实就是权限的映射。怎么说?

假如我们的网站文件夹中的一个文件,如Admin.aspx页面,我们可以通过操作系统来定义这个文件的访问权限(操作为:选中文件,点击右键,选择"共享和安全",然后选择哪些用户可以访问,而且这些用户的操作是什么,如读,写,安全控制等)。这些都是系统定义的一些权限,.NET Framework就把定义在文件上的一些权限"取出",包装映射在一些Permission类中,这样我们就能用托管代码,如C#来操作这些权限,而不用Win API(非托管代码)来操作。(理解如有问题,欢迎大家指正!)

3.权限对象Permission简介
       下面我们就举一些Permission类的例子.
       FileIOPermission
       PrincipalPermission
 
       这些内置的权限对象都会保护指定的资源。如FileIOPermission对象将确保只允许授权的用户访问一个文件。即,FileIOPermission对象将当前用户的凭证映射在操作系统级别,映射的结果就是该用户和系统中已存在的某一用户的操作权限相同(如IUser),那么现在这个用户就可以设置文件的权限。

FileIOPermission
      FileIOPermission对象要求用户是Windows用户,或者ASP.NET处理过程运行在一个特定的标识下(一般是ASPNET用户账户),并且根据为文件系统中的文件或者文件夹定义的权限,授予读或者写的权限。即,FileIOPermission对象在文件系统中定义的权限上下文中验证Principal.

例如,在ASP.NET程序中,我们可能想要在点击按钮之后写入一个文件,那么,文件就应该配置必需的访问权限,并且为登录到应用程序的用户授予必需的权限。
 
       如果想要拒绝访问一个特定的文件夹,如C:\Windows,那么我们就可以通过在运行阶段拒绝对FileIOPermission对象操作的权限来实现。我们就可以在特定的地方写下:

[FileIOPermissionAttribute("SecurityAction.Deny,All="C:\\Windows")]

上面是以声明的方式写的,我们也可以用代码,以后讲述。
 
       其中SecurityAction枚举定义了访问的类型,如拒绝Deny。

上面的声明可以在类级别,方法级别,以及程序集级别使用。这里只是简单的描述,大家知道就行了,具体的我们后面讲述。
 
 
       PrincipalPermission
       PrincipalPermission确保调用者的上下文具有与之相关联的被请求的Principal。这话有点绕,下面看个例子就明白了:

下面的代码确保:只运行名为"xiaoyang"的用户访问一个特定的方法:

 [PrincipalPermission(SecurityAction.Demand,Name="localhost\\xiaoyang"]

将代码放在任何一个方法的声明的上面就行了。

今天就先写到这里,理论比较多。大家见谅!
       下一篇就讲述ASP.NET中的授权问题。

ASP.NET安全问题--ASP.NET中的授权问题(前篇)相关推荐

  1. 艾伟_转载:VS 2010 和 .NET 4.0 系列之《在ASP.NET 4 Web Forms中实现URL导向》篇

    本系列文章导航 VS 2010 和 .NET 4.0 系列之<ASP.NET 4 中的SEO改进 >篇 VS 2010 和 .NET 4.0 系列之<干净的Web.Config文件 ...

  2. ASP.NET Core 3.0中支持AI的生物识别安全

    本文共两个部分,这是第一部分,其中介绍了 ASP.NET Core 3 中旨在将授权逻辑与基本的用户角色相分离的基于策略的授权模型. 此部分提供了此授权进程的基于生物识别信息(如人脸识别或语音识别)的 ...

  3. Asp.Net Core 中IdentityServer4 授权流程及刷新Token

    一.前言 上面分享了IdentityServer4 两篇系列文章,核心主题主要是密码授权模式及自定义授权模式,但是仅仅是分享了这两种模式的使用,这篇文章进一步来分享IdentityServer4的授权 ...

  4. Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

    一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完美 ...

  5. Asp.Net Core 中IdentityServer4 授权中心之应用实战

    一.前言 查阅了大多数相关资料,搜索到的IdentityServer4 的应用文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应 ...

  6. ASP.NET Core 2.1中基于角色的授权

    授权是来描述用户能够做什么的过程.例如,只允许管理员用户可以在电脑上进行软件的安装以及卸载.而非管理员用户只能使用软件而不能进行软件的安装以及卸载.它是独立的而又与验证配合使用,需要身份验证机制.对于 ...

  7. 将终结点图添加到你的ASP.NET Core应用程序中

    在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章[译]使用DOT语言和G ...

  8. 一张大图了解ASP.NET Core 3.1 中的Authentication与Authorization

    下面是一张ASP.NET Core 3.1 中关于Authentication与Authorization的主流程框线图,点击这里查看全图:https://johnnyqian.net/images/ ...

  9. 避免在 ASP.NET Core 3.0 中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...

最新文章

  1. 源码安装apache及配置转发
  2. python的日志简单使用
  3. Android O 前期预研之二:HIDL相关介绍
  4. 好文转载—为程序员量身定制的12个目标
  5. Yii2 理解Validator
  6. 利用anaconda给pycharm配置python3.7版本的tensorflow虚拟环境的配置
  7. 虚拟化平台服务器故障,Vsphere虚拟化平台故障切换
  8. .net4.0切换2.0时,SplitContainer”的对象强制转换为类型
  9. 架构师原来是这样修炼出来的
  10. 误删除数据恢复 plsql
  11. 最新架构amd服务器cpu,2015年或新变化?AMD将专注高性能架构
  12. OLAP 系统选型,选 Apache Kylin 还是 ClickHouse?
  13. 测针对精密测量的重要性
  14. java导出excel 边框不全_POI 导出Excel合并单元格后部分边框不显示
  15. 从零开始对接微信支付(H5、JSAPI、小程序)
  16. jQuery1.2选择器
  17. apple tv设置_如何设置Apple TV以自动安装iPhone的应用程序
  18. 狄利克雷卷积与莫比乌斯函数
  19. 安卓平台- 中国游戏榜
  20. JavaScript——简易ATM取款机

热门文章

  1. 神经网络早期的M-P(Warren McCulloch-Walter Pitts)模型
  2. 2021年图灵奖,花落高性能计算先驱、田纳西大学教授Jack Dongarra
  3. AI 3.0》王飞跃教授推荐序——未来智能:人有人用,机有机用
  4. 盘点|应用落地,构建城市“大脑”
  5. Nature指明大脑引流“废液”的确切路径
  6. NB-IoT,你真是太让我失望了
  7. 第一本用机器生成的书籍由施普林格•自然出版
  8. 关于交通创新,这五大智慧城市做了啥?
  9. 机器学习应用的未来是什么?微型化
  10. 特斯拉VS Waymo:谁将赢得无人驾驶汽车竞赛?