【windows 访问控制】十二、C#实操 主体 System.Security.Principal 案例
案例1、主体(包含用户和组)和标识(用户名)的使用。
PrincipalPolicy枚举:主体类型 分为window主体、未认证的主体和未分配主体
GenericPrincipal、GenericIdentity主体类:自定义普通的主体,该主体是认证的。
WindowsPrincipal、WindowsIdentity主体类:系统主体
Thread.CurrentPrincipal = principal; 设置当前线程的主体
IIdentity 、IPrincipal 主体类的接口
#region 当前线程
Thread t = null; Console.WriteLine("======PrincipalPolicy.WindowsPrincipal==========="); AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); t = new Thread(new ThreadStart(CurrentThreadInfo));
t.Start();
t.Join(); Console.WriteLine("======PrincipalPolicy.UnauthenticatedPrincipal===========");
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.UnauthenticatedPrincipal);
t = new Thread(new ThreadStart( CurrentThreadInfo));
t.Start();
t.Join(); Console.WriteLine("=====PrincipalPolicy.NoPrincipal===========");
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal);
t = new Thread(new ThreadStart(CurrentThreadInfo));
t.Start();
t.Join(); Console.WriteLine("======自定义一个主体==========="); IIdentity identity = new GenericIdentity("MyIdentity"); IPrincipal principal = new GenericPrincipal(identity, new[] { "studentc", "student" }); //AppDomain.CurrentDomain.SetThreadPrincipal(principal);
Thread.CurrentPrincipal = principal;
t = new Thread(new ThreadStart(CurrentThreadInfo));
t.Start();
t.Join(); static void CurrentThreadInfo()
{
IPrincipal currentPricipal= Thread.CurrentPrincipal; if (currentPricipal != null )
{
Console.WriteLine($"TYPE:{currentPricipal.Identity.GetType().Name}");
Console.WriteLine($"Name:{currentPricipal.Identity.Name}");
Console.WriteLine($"IsAuthenticated:{currentPricipal.Identity.IsAuthenticated}");
if (currentPricipal.IsInRole("student"))
{
Console.WriteLine("role:student"); }
} else
{
Console.WriteLine("currentPricipal Is Null");
} }
案例二|、
using System.Reflection;
using System.Security.AccessControl;
using System.Security.Permissions;
using System.Security.Principal;
#region 当前进程
//将当前进程设置为安全主体,应用程序默认值为 UnauthenticatedPrincipal。
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); WindowsPrincipal currentProgramePrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
Type type = typeof(WindowsPrincipal);
Console.WriteLine("===============当前进程的主体 标识 ===========================");
//获取当前进程的主体 标识
foreach (var item in type.GetProperties())
{
Console.WriteLine($"{item.Name}:{item.GetValue(currentProgramePrincipal).ToString()}");
if (item.Name == "Identity")
{
WindowsIdentity currentProgrameIdentity = item.GetValue(currentProgramePrincipal) as WindowsIdentity;
Type currentIdentity = typeof(WindowsIdentity);
foreach (var ite in currentIdentity.GetProperties())
{
Console.WriteLine($"{ite.Name}:{ite.GetValue(currentProgrameIdentity)}");
}
}
}
//
Console.WriteLine("===============当前进程主体的角色==========================="); //获取当前进程主体的角色
foreach (var rolename in Enum.GetValues(typeof(WindowsBuiltInRole)))
{
Console.WriteLine($"{rolename.ToString()}:{currentProgramePrincipal.IsInRole((WindowsBuiltInRole)rolename)}"); ;
}
Console.WriteLine("=================当前用户的标识======================"); //获取当前用户的标识
WindowsIdentity identity = WindowsIdentity.GetCurrent();
Type WindowsIdentityType = typeof(WindowsIdentity); foreach (var item in WindowsIdentityType.GetProperties())
{
Console.WriteLine($"{item.Name}:{item.GetValue(identity)}");
}
#endregion
【windows 访问控制】十二、C#实操 主体 System.Security.Principal 案例的更多相关文章
- 【windows 访问控制】十一、C# 实操 对象 System.Security.AccessControl 命名空间
AccessControl 命名空间 结构图 解说: DirectorySecurity=目录ACLFileSecurity=文件ACLFileSystemAuditRule=目录和文件中SACL中的 ...
- Win32 Windows编程 十二
一.对话框 1.对话框的分类 2.对话框的基本使用方式 3.对话框资源 4.有模式对话框的使用 5. 无模式对话框的使用 5.1 加入对话框资源 5.2 定义窗体处理函数 BOOL CALLBACK ...
- 【windows 访问控制】二、安全描述符(Security Descriptors,SD)
安全描述符(Security Descriptors,SD) 定义 安全描述符是与安全对象的安全信息,它含有这个对象所有者的SID,以及一个访问控制列表(ACL,Access Control List ...
- Windows Phone 十二、设计器同步
在设计阶段为页面添加数据源 Blend或者VS的可视化设计器会跑我们的代码,然后来显示出来,当我们Build之后,设计器会进入页面的构造函数,调用InitializeComponent();方法来将U ...
- Spring Security(二十二):6.4 Method Security
From version 2.0 onwards Spring Security has improved support substantially for adding security to y ...
- 【windows 访问控制】六、安全标识符(SID Security Identifiers)
安全标识符(SID Security Identifiers) SID是用来标识安全主体.就是给安全主体一个唯一的ID.用户层面通过用户账户名识别,程序和资源之间通过SID识别. 什么是安全标识符? ...
- (二)Linux实操之——网络配置、进程管理、服务管理、组管理、YUM
接上段 (一)Linux实操之——权限.任务调度.磁盘分区 4.网络配置 4.1 NAT模式的网络配置 目前我们采用的网络配置是NAT模式. windows下cmd通过 ipconfig 命令可以 ...
- 号外号外:9月13号《Speed-BI云平台案例实操--十分钟做报表》开讲了
引言:如何快速分析纷繁复杂的数据?如何快速做出老板满意的报表?如何快速将Speed-BI云平台运用到实际场景中? 本课程将通过各行各业案例背景,将Speed-BI云平台运用到实际场景中 ...
- Python实操二
实操一: 1.用map来处理字符串列表啊,把列表中所有人都变成sb,比方alex_sb name=['alex','wupeiqi','yuanhao'] name=['alex','wupeiqi' ...
随机推荐
- entity framework无法写入数据库.SaveChanges()失败
参考https://stackoverflow.com/questions/26745184/ef-cant-savechanges-to-db/28256645 https://www.codepr ...
- js整体
1.引入 <script type="text/javascript"> 2.输出 使用 window.alert() 写入警告框 使用 document.write ...
- 整理全网最全K8S集群管理工具、平台
整理常见的整理全网最全K8S集群管理工具.平台解决方案. 1 Rancher Rancher中文官网:https://docs.rancher.cn/ 2 KubeSphere 官网:https:// ...
- 将项目上传至GitHub
前言: 前段时间我将自己做的2040小游戏从本地上传至了GitHub上,本篇将记录上传过程与方法 我的2048小游戏GitHub仓库链接226YZY/my2048game: 我的简易2048小游戏 ( ...
- JVM专题1: 类和类加载机制
合集目录 JVM专题1: 类和类加载机制 Java对象的结构 在HotSpot虚拟机中, 对象在内存中存储的布局可以分为3块区域 对象头Header 实例数据Instance Data 对齐填充Pad ...
- 【Containerd版】Kubeadm高可用安装K8s集群1.23+
目录 基本环境配置 节点规划 网段规划及软件版本 基本配置 内核升级配置 K8s组件及Runtime安装 Containerd安装 K8s组件安装 高可用实现 集群初始化 Master01初始化 添加 ...
- sql 同步远程数据库(表)到本地
一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...
- 对于fetch的理解
在一篇文章里见到一位作者是这么说的 XMLHttpRequest 是一个设计粗糙的 API,不符合关注分离(Separation of Concerns)的原则,配置和调用方式非常混乱,而且基于事件的 ...
- Swift 介绍
简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 几家欢喜,几家愁 愁者:只学Object-C的人 欢喜者: ...
- JS切割图片-滑动门效果
转载请注明来源:https://www.cnblogs.com/hookjc/ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...