以前对这部分一直糊涂着,总算理理清楚了

包名:System.Security.Principal:
Identity:(识别)包装了已经验证过的用户名和认证的方式
 主要成员:Name, IsAuthenticated, AuthenticationType
Principal: 当前代码的security上下文。包含Identity和Roles. 用于授权
 主要成员:IsInRole, Identity

* // 一般用户可以有多个Indentity, 即多种身份来访问不同资源 --pending
* 每个AppDomain里面都有CallContext,CallContext里面包含Principal。线程在启动的时候也会带上Pricncipal的ref。静态方法,仅对当前线程
* Thread.CurrentPrincipal / WindowsIdentity.GetCurrent()静态方法返回当前用户。

Permission: 权限。不是用户需要权限,是执行它的代码需要权限。
     Demand()要求调用此代码的代码有什么权限。Assert()断言
三种权限:
  1 代码权限: 基类为CodeAccessPermission .用来保护环境变量、文件、访问非托管代码。总表参见:
       ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/cpguide/html/cpconcodeaccesspermissions.htm
  2 Identity权限:基类为CodeAccessPermission。对应于控制台中的信任集设定。基于发行者、强类型、域、URL。总表:
   ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/cpguide/html/cpconidentitypermissions.htm
  3. PrincipalPermission(Role Based Permission)

Authorization 授权 判断用户是否有权操作,比如登录的用户有没有权限访问资源或者数据库
Authentication 认证 用户的Identity. 主要有:HTTP基础认证、证书、Kerberos、Passport、NTLM、Forms-based、Digest

这两个东西最好从读音上区别,以前一直糊涂。一般应用先authenticate用户, 判断用户是否能链接到系统。然后authorization, 判断对某个功能是否有权限。

authorization一般有两种:ACL/ROLES
ACL:Acess Control Lists. 判断用户是否在有权限的用户组内。缺点:不能定义动态条件。
Role based: 用户加入到某个role以后,自动获得了很多特定的权限。先判断请求者的Identity, 然后看它是否在Role里面。类似windows用户和组的关系

1. 代码中的检查方式:new PrincipalPermission(name,role).Demand();
2. 利用Attribute的方式:[PrincipalPermissionAttribute(SecurityAction.Demand,Name="MyUser", Role="Administrator")]
3. 使用 Principal 对象中的属性和 IsInRole 方法执行显式安全性检查。
4. web.config里面authorization节中的users/roles(这个一般资料都没提到)

参考:
台湾MSDN Library 中文技術文件:PPT, 文章
台湾msdn里面有不少好东西,比china的强多了!

补充:
1. ASP.net中线程的Principal是根据HttpComtext.Current.User来的,但是从线程取更值得推荐(与asp.net无关)
2. AppDomain.CurrentDomain.SetPrincipalPolicy设定Thread.CurrentPrincipal的预设值
3. AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal) 设定新线程的预设Principal, 只能调用一次

.net中的认证和授权(学习笔记)相关推荐

  1. 中移物联网onenet入门学习笔记2:中移物联的通信格式

    中移物联网onenet入门学习笔记2:中移物联的通信格式 中移物联网硬件接入协议:LWM2M协议,EDP协议,MQTT协议,HTTP协议,TCP透传,MODBUS协议,JT/T808协议,RCMP协议 ...

  2. python中if语句使用_Python学习笔记之if语句的使用示例

    前言 条件语句在实际开发中我们已经使用过几次了,在这里我们需要再次隆重的来介绍一下它,下面话不多说了,来一起看看详细的介绍吧. if语句 顾名思义,该语句为判断语句,先来一个简单的示例 cars=[' ...

  3. python中while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  4. php中声明一个函数,php学习笔记之 函数声明

    /* 函数定义: * 1.函数是一个被命名的 * 2.独立的代码段 * 3.函数执行特定任务 * 4.并可以给调用它的程序返回一个值 * * 函数的优点: * 1.提高程序的重用性 * 2.提高程序的 ...

  5. Linux中常用的文件目录,Linux学习笔记2——Linux中常用文件目录操作命令

    ls 显示文件和目录列表 -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 mkdir 创建目录 -p 父目录不存在情况下先生成父目录 cd 切换目录 touch 生成一个空文件 e ...

  6. (持续更新中)Xwave的嵌入式学习笔记~

    Xwave的小小技术栈的成长历程~ 目录: 0.嵌入式知识储备 零.CSDN写作技巧 一.C 二.C++ 三.LINUX基础 四.底层原理 1.编译.链接.装载 2.C和C陷阱 3.C和C指针 4.操 ...

  7. oracle中如何格式化输出,【学习笔记】数据库日期时间格式化输出案例

    天萃荷净 分享一篇关于开发DBA在工作中常用到的日期时间格式化输出方法案例,含:mysql.sql server.oracle 3种数据库日期时间格式化输出 1.mysql数据库时间格式化输出 DAT ...

  8. python中forward的作用_Pytorch学习笔记07----nn.Module类与前向传播函数forward的理解

    1.nn.Module类理解 pytorch里面一切自定义操作基本上都是继承nn.Module类来实现的 方法预览: classModule(object):def __init__(self):de ...

  9. python中没有arcpy怎么办_Arcpy学习笔记(一)—无中生有(上)

    一.前言 最近学习状态不是很好,理论学习进展缓慢.于是决定换换脑子,开始真正进行GIS与Python结合的相关学习,之后的文章会逐步记录学习路径与心得. 二.为什么要学习Arcpy?别问,问就是梦想 ...

最新文章

  1. 梯度中心化,一行代码加速训练并提升泛化能力
  2. 拜年+红包,都有份儿!
  3. 用Python操作MySQL(pymysql)
  4. 服务器sxs文件通用的吗,win10x sources sxs文件有什么作用
  5. AJAX,JSON与MVC
  6. SSH集成之导入导出代码示例-页面部分(1)
  7. Android中启动页ViewPager和ViewFlipper带指示器
  8. dodaf体系结构建模与分析系统软件
  9. 程序设计基础是C语言吗,程序设计基础(C语言)
  10. 基金交易席位的制度沿袭
  11. 一些个人感觉很不错的特效
  12. 布道微服务_18服务配置中心设计方案
  13. ROS2—服务(Service)
  14. 算法导论第十五章:动态规划(一)
  15. 《小白兔到大黑牛》第十一篇yum命令的总结
  16. 毫米波雷达技术应用,飞睿科技人体存在感应检测模块
  17. 工作狂小废物的桌面[51CTO博客接龙桌面秀]
  18. 使用CAShapeLayer与UIBezierPath画动态柱状图
  19. 【jQuery】网页文本格式编辑器xheditor
  20. 操作系统原理_田丽华(2)操作系统结构

热门文章

  1. linux函数实验报告,linux实验报告
  2. python是目前计算机语言的主流吗_即便C++现在是增长最快的语言,为什么它不及Java、Python流行?...
  3. 2020-12-03 matlab 反馈函数 feedback
  4. linux shell判断文件、目录是否存在并移动到指定位置
  5. java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥?
  6. python预处理c语言_详解C语言编程中预处理器的用法
  7. HTML学习01之初识HTML
  8. opencv中在图片上显示文本
  9. Caffe代码导读(1):Protobuf例子
  10. 详解Tomcat配置JVM参数步骤