1.概述

为了确保应用程序的安全,安全性有几个重要方面需要考虑。一是应用程序的用户,访问应用程序的是一个真正的用户,还是伪装成用户的某个人?如何确定这个用户是可以信任的?

确保应用程序安全的用户方面是一个2个阶段过程:

  • 用户首先需要身份验证
  • 再进行授权,已验证该用户是否可以使用需要的资源

    对于在网络上存储或发送的数据呢?例如,有人可以通过网络嗅探器访问这些数据吗?这里数据加密很重要。一些技术,如WCF,通过简单的配置提供了加密功能,所以可以看到后台执行了什么操作。

另一方面是应用程序本身。如果应用程序驻留在WEB提供程序上,如何禁止应用程序执行对服务器有伤害的操作?

2.身份验证和授权

安全性的两个基本支柱是身份验证和授权。身份验证是标识用户的过程,授权在验证了所标识用户是否可以访问特定资源之后进行。

2.1标识和Principal

使用标识可以验证运行应该程序的用户。Windows Indentity 类表示一个Windows用户。如果没有用windows账户标识用户,也可以使用实现了Identity接口的其他类。通过这个接口可以访问用户名,该用户是否通过身份验证,以及验证类型等信息。
Principal是一个包含用户的标识和用户的所属角色的对象。IPrincipal接口定义了Identity属性和IsInRole方法,Identity属性返回Identity对象;在IsInRole方法中,可以验证用户是否是指定角色的一个成员。角色是有相同安全权限的用户集合,同时它是用户的管理单元。角色可以是Windows组或自己定义的一个字符串集合。

表示 Windows 用户。
命名空间: System.Security.Principal
程序集: mscorlib(位于 mscorlib.dll)

继承层次结构

System.Object
  System.Security.Claims.ClaimsIdentity
    System.Security.Principal.WindowsIdentity

语法

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class WindowsIdentity : ClaimsIdentity, ISerializable,
IDeserializationCallback, IDisposable

构造函数

名称 说明
WindowsIdentity(IntPtr) 为指定的 Windows 帐户标记表示的用户初始化 WindowsIdentity 类的新实例。
WindowsIdentity(IntPtr, String) 为指定的 Windows 帐户标记和指定的身份验证类型表示的用户初始化 WindowsIdentity 类的新实例。
WindowsIdentity(IntPtr, String, WindowsAccountType) 为指定的 Windows 帐户标记、指定的身份验证类型和指定的 Windows 帐户类型表示的用户初始化 WindowsIdentity 类的新实例。
WindowsIdentity(IntPtr, String, WindowsAccountType, Boolean) 为指定的 Windows 帐户标记、指定的身份验证类型、指定的 Windows 帐户类型和指定的身份验证状态表示的用户初始化 WindowsIdentity 类的新实例。
WindowsIdentity(SerializationInfo, StreamingContext) 初始化 SerializationInfo 流中的信息所表示的用户的 WindowsIdentity 类的新实例。
WindowsIdentity(String) 初始化以指定用户主名称 (UPN) 表示的用户的 WindowsIdentity 类的新实例。
WindowsIdentity(String, String) 初始化以指定用户主名称 (UPN) 和指定身份验证类型共同表示的用户的 WindowsIdentity 类的新实例。
WindowsIdentity(WindowsIdentity) 使用指定的 WindowsIdentity 对象初始化 WindowsIdentity 类的新实例。

属性


方法


字段

显式接口实现

  protected void Page_Load(object sender, EventArgs e){AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);var principal = WindowsPrincipal.Current as WindowsPrincipal;var identity = principal.Identity as WindowsIdentity;Console.WriteLine("IdentityType:{0}",identity.ToString());Console.WriteLine("Name:{0}", identity.Name);Console.WriteLine("'user'?:{0}", principal.IsInRole(WindowsBuiltInRole.User));Console.WriteLine("'administrtors'?:{0}", principal.IsInRole(WindowsBuiltInRole.Administrator));Console.WriteLine("'authenticated'?:{0}",identity.IsAuthenticated);Console.WriteLine("'authtype'?:{0}", identity.AuthenticationType);Console.WriteLine("'anonymoues'?:{0}", identity.IsAnonymous);Console.WriteLine("'token'?:{0}", identity.Token);}

很显然用户可以很容易访问当前用户及其角色的详细信息,然后使用那些信息决定允许或拒绝用户执行某些动作,这就非常有好处。利用角色和windows用户组,管理员可以完成标准用户管理工具所能完成的工作,这样在用户的角色改变时,通常可以避免代码的更改。

安全性-身份验证和授权(一)之Principal相关推荐

  1. security工作笔记004---.NET Web安全性-身份验证和授权(一)之Principal

    JAVA技术交流QQ群:170933152 1.概述 为了确保应用程序的安全,安全性有几个重要方面需要考虑.一是应用程序的用户,访问应用程序的是一个真正的用户,还是伪装成用户的某个人?如何确定这个用户 ...

  2. java验证身份证合法性_Java安全性,第2部分:身份验证和授权

    关于本教程 本教程是关于什么的? 也许没有比应用程序安全更重要的软件工程主题. 攻击是昂贵的,无论是来自内部还是外部,而且某些攻击可能会使软件公司承担赔偿责任. 随着计算机(尤其是Internet)技 ...

  3. iis授权mysql验证_ASP.NET Web API身份验证和授权

    本文是作者所理解和翻译的内容. 这篇文章包括两部分:身份验证和授权. 身份验证用来确定一个用户的身份.例如,Alice用她的用户名和密码登陆系统,服务器用她的用户名和密码来确定她的身份. 授权是判断一 ...

  4. ASP.NET Web API身份验证和授权

    英语原文地址:http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-a ...

  5. 开源软件加密授权方案_身份验证和授权作为开源解决方案服务

    开源软件加密授权方案 通过实施身份验证和授权(a&a)机制为所有用户数据设计集中式服务. 我将分享我的经验并最终确定解决方案的结论. 该设计包括客户端(Web应用程序)和服务器(A&A ...

  6. 身份验证和授权作为开源解决方案服务

    通过实施身份验证和授权(a&a)机制为所有用户数据设计集中式服务. 我将分享我的经验并最终确定解决方案的结论. 该设计包括客户端(Web应用程序)和服务器(A&A中心). 术语: 1. ...

  7. 身份验证与授权(译)

    前言:身份验证与授权是网站开发比不可能绕开的话题,有趣的是,这两个单词的英文字母其实是很相似的,authentication and authorization,那么这两者到底有什么不同呢,下面翻译的 ...

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

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

  9. 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第2部分

    目录 介绍 用户角色 如何创建自定义授权特性? AuthorizeAttribute AuthorizeFilter 如何在控制器和操作方法级别设置权限? 检查用户权限的扩展方法 如何在操作方法(内联 ...

最新文章

  1. jpgraph中文使用手册之文本和字体控制教程
  2. HTML5 本地数据库IndexedDB数据库
  3. 体系文件管理解决方案
  4. 听说你们想学做品牌Gif动画海报?
  5. leetcode 450. 删除二叉搜索树中的节点 c语言实现
  6. codelite13 wxWidgets3 macos开发环境配置
  7. Jenkins主从节点配置
  8. 联想rd650怎么装系统win7_Lenovo g50重装win7系统|U盘重装联想g50笔记本系统
  9. python获取手机通知栏消息_Python编写简单的通知栏脚本启动工具
  10. Android 系统(164)---手机收到8bit编码的短信无法显示
  11. 返回固定页面的web服务器
  12. 搜索引擎制作_四川网站建设制作,搜索引擎付费推广公司哪家好
  13. leetcode python3 简单题13. Roman to Integer
  14. PHP的压力测试工具ab.exe 和mpm介绍提高并发数
  15. 对计算机病毒防治最科学的方法是,计算机病毒防治(复习-3
  16. Minidump文件分析
  17. 树莓派是什么?能干什么?和单片机有什么区别?
  18. 用八类网线钳和剥线刀做网线水晶头
  19. STM32F103ZET6+红外温度传感器mlx90614芯片
  20. 永久免费虚拟主机、免费云服务器,白嫖党福利!

热门文章

  1. define函数的用法
  2. 从Realme GT的安兔兔跑分开始谈起
  3. 5G网络能力开放部署及关键技术方案
  4. 数据结构进阶 哈希表
  5. Rouge | 自动文摘及机器翻译评价指标
  6. 软件测试分享15个适合练手的项目【金融/银行/商城/电商/医药......】
  7. java反射底层原理。
  8. 偏态分布(Skewed distribution)
  9. C语言如何产生一个随机数,rand函数的使用
  10. C语言实现斐波那契数列的几种方法