安全性-身份验证和授权(一)之Principal
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相关推荐
- security工作笔记004---.NET Web安全性-身份验证和授权(一)之Principal
JAVA技术交流QQ群:170933152 1.概述 为了确保应用程序的安全,安全性有几个重要方面需要考虑.一是应用程序的用户,访问应用程序的是一个真正的用户,还是伪装成用户的某个人?如何确定这个用户 ...
- java验证身份证合法性_Java安全性,第2部分:身份验证和授权
关于本教程 本教程是关于什么的? 也许没有比应用程序安全更重要的软件工程主题. 攻击是昂贵的,无论是来自内部还是外部,而且某些攻击可能会使软件公司承担赔偿责任. 随着计算机(尤其是Internet)技 ...
- iis授权mysql验证_ASP.NET Web API身份验证和授权
本文是作者所理解和翻译的内容. 这篇文章包括两部分:身份验证和授权. 身份验证用来确定一个用户的身份.例如,Alice用她的用户名和密码登陆系统,服务器用她的用户名和密码来确定她的身份. 授权是判断一 ...
- ASP.NET Web API身份验证和授权
英语原文地址:http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-a ...
- 开源软件加密授权方案_身份验证和授权作为开源解决方案服务
开源软件加密授权方案 通过实施身份验证和授权(a&a)机制为所有用户数据设计集中式服务. 我将分享我的经验并最终确定解决方案的结论. 该设计包括客户端(Web应用程序)和服务器(A&A ...
- 身份验证和授权作为开源解决方案服务
通过实施身份验证和授权(a&a)机制为所有用户数据设计集中式服务. 我将分享我的经验并最终确定解决方案的结论. 该设计包括客户端(Web应用程序)和服务器(A&A中心). 术语: 1. ...
- 身份验证与授权(译)
前言:身份验证与授权是网站开发比不可能绕开的话题,有趣的是,这两个单词的英文字母其实是很相似的,authentication and authorization,那么这两者到底有什么不同呢,下面翻译的 ...
- .NET6之MiniAPI(九):基于角色的身份验证和授权
身份验证是这样一个过程:由用户提供凭据,然后将其与存储在操作系统.数据库.应用或资源中的凭据进行比较. 在授权过程中,如果凭据匹配,则用户身份验证成功,可执行已向其授权的操作. 授权指判断允许用户执行 ...
- 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第2部分
目录 介绍 用户角色 如何创建自定义授权特性? AuthorizeAttribute AuthorizeFilter 如何在控制器和操作方法级别设置权限? 检查用户权限的扩展方法 如何在操作方法(内联 ...
最新文章
- jpgraph中文使用手册之文本和字体控制教程
- HTML5 本地数据库IndexedDB数据库
- 体系文件管理解决方案
- 听说你们想学做品牌Gif动画海报?
- leetcode 450. 删除二叉搜索树中的节点 c语言实现
- codelite13 wxWidgets3 macos开发环境配置
- Jenkins主从节点配置
- 联想rd650怎么装系统win7_Lenovo g50重装win7系统|U盘重装联想g50笔记本系统
- python获取手机通知栏消息_Python编写简单的通知栏脚本启动工具
- Android 系统(164)---手机收到8bit编码的短信无法显示
- 返回固定页面的web服务器
- 搜索引擎制作_四川网站建设制作,搜索引擎付费推广公司哪家好
- leetcode python3 简单题13. Roman to Integer
- PHP的压力测试工具ab.exe 和mpm介绍提高并发数
- 对计算机病毒防治最科学的方法是,计算机病毒防治(复习-3
- Minidump文件分析
- 树莓派是什么?能干什么?和单片机有什么区别?
- 用八类网线钳和剥线刀做网线水晶头
- STM32F103ZET6+红外温度传感器mlx90614芯片
- 永久免费虚拟主机、免费云服务器,白嫖党福利!