[.NET 基于角色安全性验证] 之一:ASP.NET Forms 基础

H.264 Profile与Level详解:如何为不同应用场景选择合适的编码配置 本文深入解析了H.264编码标准中的Profile与Level概念,指导开发者如何为不同应用场景选择合适的配置。文章对比了Baseline、Main和High三大Profile的特性与适用场景,并解释了Level如何限定视频的分辨率、帧率与码率上限。通过实战指南,帮助读者在视频通话、在线点播和专业制作等场景中,平衡画质、兼容性与性能,实现高效编码。 阅读详情

.NET 基于角色安全性验证的核心是主体(Principal)和标识(Identity)对象,其中主体负责角色或者组的验证,标识对象封装有关正在验证的用户或实体的信息。角色安全性验证通过生成可供当前线程使用的主体信息来支持授权,其中主体用关联的标识进行构造。

public interface IPrincipal
{
// Methods
bool IsInRole(string role);

// Properties
IIdentity Identity { get; }
}

public interface IIdentity
{
// Properties
string AuthenticationType { get; }
bool IsAuthenticated { get; }
string Name { get; }
}


在 .NET Framework 中提供了两组 Principal/Identity 类型,分别是基于 Windows 操作系统账户的 WindowsPrincipal/WindowsIdentity,以及用来进行自定义验证的 GenericPrincipal/GenericIdentity。

主体(Principal)对象在应用程序域(AppDomain)中绑定到调用上下文(CallContext)对象,缺省情况下,应用程序域会自动创建采取默认安全策略的 GenericPrincipal/GenericIdentity对象,同时主体(Principal)对象引用从创建线程自动复制到新线程的调用上下文(CallContext)中。我们可以通过 Thread.CurrentPrincipal 获得缺省主体(Principal)和标识(Identity)对象信息。

Console.WriteLine(Thread.CurrentPrincipal);
Console.WriteLine(Thread.CurrentPrincipal.Identity);


接下来,我们使用 WindowsPrincipal/WindowsIdentity 做一些简单的验证,同时为了进一步理解基于角色安全性验证的用途。

static void Test()
{
   Console.WriteLine("Test...");
}

static void Main(string[] args)
{
   Test();
}


我们修改上面这段代码,要求 Test() 方法必须是拥有管理员权限才能调用。

1. 我们使用 System.Security.Permissions.PrincipalPermissionAttribute 特性为 Test 方法加上角色验证标记,要求调用用户(Windows 操作系统登录用户)必须是 "Administrators" 组成员。

2. 在 Main 方法中设置线程的主体和标识对象。WindowsIdentity.GetCurrent() 用来获取当前登录用户的标识对象,如果登录用户属于 Adminstrators 组,则 Test() 方法正常调用,否则会触发 SecurityException 异常(我们可以使用 WindowsIdentity.GetAnonymous() 获取匿名用户标识对象来触发该异常)。

[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
static void Test()
{
   Console.WriteLine("Test...");
}

static void Main(string[] args)
{
   Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
   Test();
}


我们还可以使用其他的方法来做到这一点。

1. 使用 PrincipalPermission 对象替换 PrincipalPermissionAttribute,我们就可以使用动态权限验证,可以将用户名或者角色参数写入配置文件中。
2. 使用 AppDomain.CurrentDomain.SetThreadPrincipal 设置主体对象和 Thread.CurrentPrincipal 作用相同。我们还可以直接使用 AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal) 让系统自动使用当前登录用户名创建 WindowsPrincipal/WindowsIdentity。

static void Test()
{
   new PrincipalPermission(null, "Administrators").Demand();
   Console.WriteLine("Test...");
}

static void Main(string[] args)
{
   AppDomain.CurrentDomain.SetThreadPrincipal(new WindowsPrincipal(WindowsIdentity.GetCurrent()));
   Test();
}


或者

static void Test()
{
   new PrincipalPermission(null, "Administrators").Demand();
   Console.WriteLine("Test...");
}

static void Main(string[] args)
{
   AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
   Test();
}


上面的例子都是基于角色或者组的验证,当然我们还可以基于用户进行验证。

[PrincipalPermission(SecurityAction.Demand, Name="YUHEN//q.yuhen")]
new PrincipalPermission("YUHEN//q.yuhen", null).Demand();


当然,我们还可以同时用 role 和 name。PrincipalPermission 对象比 PrincipalPermissionAttribute 更加灵活,我们可以使用它进行多个权限的并集运算,以及进行 xml 转换等。

下面是使用 GenericPrincipal/GenericIdentity 改写的代码。

//[PrincipalPermission(SecurityAction.Demand, Name="q.yuhen", Role="admins")]
static void Test()
{
   new PrincipalPermission(null, "Administrators").Demand();
   Console.WriteLine("Test...");
}

static void Main(string[] args)
{
   // 创建自定义用户标识对象。
   GenericIdentity identity = new GenericIdentity("q.yuhen");
  
   // 创建主体对象,并指定所拥有的角色数组。
   string[] roles = new string[] { "admins" };
   GenericPrincipal principal = new GenericPrincipal(identity, roles);
  
   // 设定主体。
   AppDomain.CurrentDomain.SetThreadPrincipal(principal);
  
   Test();
}


除了使用上述方法外,某些时候我们并不希望触发 SecurityException 异常,我们希望能给出另外的执行策略,那么可以直接使用 Principal.InRole 以及 Identity.Name 了。

static void Test()
{
   if (Thread.CurrentPrincipal.IsInRole("admins") && Thread.CurrentPrincipal.Identity.Name == "q.yuhen")
   {
     Console.WriteLine("Test...");
   }
   else
   {
     Console.WriteLine("您没有执行权限!");
   }
}


总结一下,基于角色的安全检查有三种方法。

1. 使用命令式安全检查。该方法主要是通过 PrincipalPermission.Demand() 方法进行。
2. 使用声明性安全检查。通过 PrincipalPermissionAttribute 特性指定运行所需角色和用户名。
3. 直接访问 Principal 对象。访问 Thread.CurrentPrincipal 属性获得当前主体和标识对象,并调用其相关方法和属性进行进一步验证。

有关细节可参考 MSDN 文档,角色验证主要用于 ASP.NET 环境,雨痕将在后续 Blog 中做进一步说明。

数据处理和分析之数据聚类:层次聚类(Hierarchical Clustering):单链接层次聚类方法 单链接层次聚类(Single-Linkage Hierarchical Clustering)是凝聚型层次聚类的一种,它基于数据点之间的最小距离来定义聚类间的相似性。在单链接层次聚类中,两个聚类之间的距离定义为这两个聚类中任意两个数据点之间的最短距离。这种聚类方法倾向于形成链状或线性的聚类,因为聚类的边界是由最远的数据点决定的,而不是聚类的平均或中心位置。单链接层次聚类通过计算簇间最近点的距离来决定簇的合并,这种方法简单直观,但可能导致簇的形状不规则,尤其是在数据点分布不均匀的情况下。 阅读详情

相关推荐

SQL Prompt 9.0插件突然无法使用解决办法(附防联网激活)多图+文字

可能由于Redgate公司最近抓盗版抓得严,导致激活后的SQL Prompt联网后突然无法使用,无论卸载重装都没办法继续使用,本人同时使用SQL Assistant和SQL Prompt,我喜欢SQL Assistant代码提示功能,而SQL Prompt我喜欢将查询结果复制后可以直接生产插入脚本,这是最爽的一件事,即便对表有多么熟悉,没有这些插件,几行语法都要敲大半天,目前本人已经离不开这两个插...

骚团长的博客 1万+

[.NET 基于角色安全性验证] 之一:基础知识

.NET 基于角色安全性验证的核心是主体(Principal)和标识(Identity)对象,其中主体负责角色或者组的验证,标识对象封装有关正在验证的用户或实体的信息。角色安全性验证通过生成可供当前线程使用的主体信息来支持授权,其中主体用关联的标识进行构造。public interface IPrincipal {  // Methods  bool IsInRole(string role)

sunchaohuang的专栏 1012

Ubuntu18.04环境搭建与疑难解析:从零复现YOLO-6D姿态估计算法

本文详细介绍了在Ubuntu18.04环境下从零开始复现YOLO-6D姿态估计算法的完整流程,包括系统配置、Conda环境搭建、PyTorch安装、依赖项管理、源代码获取、数据集准备以及训练验证过程。针对Singleshotpose算法的特殊需求,提供了详细的疑难解析和性能优化技巧,帮助开发者高效完成算法复现和应用部署。

weixin_30369041的博客 456

ASP.NET 安全验证

一、ASP.NET 支持的四种验证方式1.Windows: IIS验证,在内联网环境中非常重要。2.Passport: 微软集中式验证,一次登录便可访问所有成员站点,需要收费。3.Form:窗体验证,验证帐号/密码,Web编程最佳最流行的验证方式。4.None:表示ASP.NET自己根本不执行身份验证,完全依赖IIS身份验证。二、Forms元素的属性三、使用1.创建几个页面2.配置文件 3.登录-...

景泽元的编程博客 769

ESP32 CAM安装配置 第四部份:通过使用ESPHome的方式ESP32 Cam加到HomeAssistant

这些包括 aec_value, aec2, ae_level, agc_gain, gain_ctrl, bpc, wpc, raw_gma, lenc, hmirror, dcw, colorbar 等。这些参数的可能值和具体效果会根据你的摄像头硬件和 ESPHome 的版本有所不同。在 ESPHome 中配置 ESP32 Cam 时,每个参数的可能值取决于具体的功能和支持范围。值的范围是 0 到 63,其中 0 是最差质量,63 是最佳质量。horizontal: 水平校正的强度,通常是一个数字值。

weixin_42895252的博客 3365

IEEE投稿完整流程——以IEEE Transactions on Cybernetics为例【附:论文格式模板】

前言 以下是官方的流程,包括了论文的格式和提交的流程,重要!重要!重要! 在IEEE的官网中,也有论文提交的文件 可以直接参考: 中文版: 作者指南 英文版: Manuscripts-Author-Guide 作者指南的版本指导流程可能和最新版的官网不一致!!! 或者在下面的链接中,按照你的论文类型,选择不同的论文模板: IEEE article template 以下以IEEE Transactions on Cybernetics 为例子 IEEE Transactions on Cyberne

XC___XC的博客 10万+

Asp.net中基于角色验证授权

Asp.net的身份验证有有三种,分别是”Windows | Forms | Passport”,其中又以Forms验证用的最多,也最灵活。Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。服务端上的授权设置就可以根据不同目录对不同用户的

不是程序员 2563

CentOS-7-x86_64经典版本的含义

这个版本的ISO文件包含了所有的软件包,所以文件比较大,但在安装过程中不需要下载软件包。如果你有一个稳定的网络连接,并且希望安装时能够选择最新的软件包,或者只安装特定的软件包,那么可以选择NetInstall版本。在这里,它可能是指这个ISO文件发布于2207年2月,但是这似乎是一个错误,因为截止到现在(2022年)的时间,都没有到达2207年。另外,还有一个DVD版本,这个版本的ISO文件包含了大部分常用的软件包,安装时可能需要网络连接,但比NetInstall版本少一些。

舒一笑的博客 3535

ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇

在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号。那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Identity 进行身份验证(Authentication)以及联合ASP.NET MVC 基于角色的授权(Role-Based Authorization)。 本文的示例,你可以在此下载和预览: ...

weixin_33693070的博客 381

MAVEN教程-第一篇:MAVEN基础入门

MAVEN基础入门摘要 Maven是Java项目自动化构建工具,核心解决依赖管理(自动下载JAR包)、标准化构建流程(统一目录结构)和插件扩展问题。安装需配置环境变量(MAVEN_HOME),通过mvn -v验证。使用archetype:generate命令快速生成项目,标准结构包含src/main/java(主代码)和pom.xml(配置依赖/插件)。关键操作:mvn compile编译代码,mvn exec:java运行主类。POM文件定义项目元数据(如groupId)、依赖(如JUnit)和构建插件(

无 231

Qt视频播放器项目(打开文件,视频的播放与停止,进度条与视频进度绑定,调整音量,设置按钮图标,将槽函数与按钮绑定等功能)完整代码地址在末尾

【代码】Qt视频播放器项目。

分享计算机视觉,C++,网络摄像头研发,音视频开发,嵌入式等知识。 756

asp.net mvc5 基于角色的权限验证

第一步登录的时候写入标准的权限信息到Cookie中. [HttpPost] public ActionResult DoLogin(string username, string password, string yzm, string returnUrl) { SysUser user = DB.FirstOrDefault(x =&...

走错路的程序员 1148

uniapp:APP报错Error: Not Found:Page[2][-1,1;-1,1,0,0,2-0] at view.umd.min.js:1(uniApp安卓苹果ios出现一大堆数字错误)

Error: Not Found:Page[2][一串数字] at view.umd.min.js:1,uniapp在APP端运行报错Error: Not Found:Page[2][-1,1;-1,1,0,0,2-0] at view.umd.min.js:1,uniapp真机运行偶尔出现Not Found:Page[2][-1,28] at view.umd.min.js:1,如何解决uniApp app报错:Not found -1,71 at view.umd.min.js:1,uniapp项目在H

✅ 精选推荐文章 3984

[.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证

 在开发过程中,我们需要做的事情包括:1. 在 web.config 中设置 Forms 身份验证相关参数。2. 创建登录页。登录页中的操作包括:1. 验证用户名和密码是否正确。2. 创建身份验证票证对象。3. 将身份验证票证对象加密成字符串,写入 Cookies。4. 重定向到原始请求 URL。1. 简单演示web.config                                

CafeeJ的专栏 505

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[.NET 基于角色安全性验证] 之二:ASP.NET Forms 身份验证流程分析

MSDN 中提及 FormsAuthenticationModule 在 Forms 身份验证中起到了关键作用,那么这背后究竟隐藏了什么?本分将简要分析 Forms 身份验证流程,以便让大家更加清楚地了解并使用它。FormsAuthenticationModule 是一个 Http Module,Forms 身份验证通过 FormsAuthenticationModule 参与 ASP.NET 页

大伟先生 888

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证(转)

在开发过程中,我们需要做的事情包括:1. 在 web.config 中设置 Forms 身份验证相关参数。2. 创建登录页。登录页中的操作包括:1. 验证用户名和密码是否正确。2. 创建身份验证票证对象。3. 将身份验证票证对象加密成字符串,写入 Cookies。4. 重定向到原始请求 URL。1. 简单演示web.config<?xml version="1.0"?>&lt...

diaodai2269的博客 157

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[转][.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证

在开发过程中,我们需要做的事情包括: 1.在web.config中设置Forms身份验证相关参数。 2.创建登录页。 登录页中的操作包括: 1.验证用户名和密码是否正确。 2.创建身份验证票证对象。 3.将身份验证票证对象加密成字符串,写入Cookies。 4.重定向到原始请求URL。 1.简单演示 web.config <?...

weixin_30929295的博客 73
下一篇: [.NET 基于角色安全性验证] 之二:ASP.NET Forms 身份验证流程分析
yangfcf
博客等级 码龄19年 10粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值