ASP.NET 2.0 中的Windows身份验证
本教程阐释在 ASP NET 版中 IIS 集成 Windows 身份验证以及 ASP NET 的Windows 身份验证的工作机制 同时 阐释 NTLM 和 Kerberos 身份验证的工作机制 此外 本教程还阐释 WindowsAuthenticationModule 类如何构造 WindowsPrincipal 和 WindowsIdentity 对象 然后将这些对象附加到当前的 ASP NET Web 请求以表示经过身份验证的用户 概述 身份验证是一个验证客户端身份的过程 通常采用指定的第三方授权方式 客户端可能是最终用户 计算机 应用程序或服务 客户端的标识称为安全原则 为了使用服务器应用程序进行验证 客户端提供某种形式的凭据来允许服务器验证客户端的标识 确认了客户端的标识后 应用程序可以授予执行操作和访问资源的原则 如果应用程序使用 Active Directory 用户存储 则应该使用集成 Windows 身份验证 对 ASP NET 应用程序使用集成 Windows 身份验证时 最好的方法是使用 ASP NET 的 Windows 身份验证提供程序附带的 Internet 信息服务 (IIS) 身份验证方法 使用该方法 将自动创建一个 WindowsPrincipal 对象(封装一个 WindowsIdentity 对象)来表示经过身份验证的用户 您无需编写任何身份验证特定的代码 ASP NET 还支持使用 Windows 身份验证的自定义解决方案(避开了 IIS 身份验证) 例如 可以编写一个根据 Active Directory 检查用户凭据的自定义 ISAPI 筛选器 使用该方法 必须手动创建一个 WindowsPrincipal 对象 ASP NET 身份验证 IIS 向 ASP NET 传递代表经过身份验证的用户或匿名用户帐户的令牌 该令牌在一个包含在 IPrincipal 对象中的 IIdentity 对象中维护 IPrincipal 对象进而附加到当前 Web 请求线程 可以通过 HttpContext User 属性访问 IPrincipal 和 IIdentity 对象 这些对象和该属性由身份验证模块设置 这些模块作为 HTTP 模块实现并作为 ASP NET 管道的一个标准部分进行调用 如图 所示 图 ASP NET 管道 ASP NET 管道模型包含一个 HttpApplication 对象 多个 HTTP 模块对象 以及一个 HTTP 处理程序对象及其相关的工厂对象 HttpRuntime 对象用于处理序列的开头 在整个请求生命周期中 HttpContext 对象用于传递有关请求和响应的详细信息 有关 ASP NET 请求生命周期的详细信息 请参阅 ASP NET Life Cycle 网址是 (en US VS ) aspx 身份验证模块 ASP NET 在计算机级别的 nfig 文件中定义一组 HTTP 模块 其中包括大量身份验证模块 如下所示 只加载一个身份验证模块 这取决于该配置文件的 authentication 元素中指定了哪种身份验证模式 该身份验证模块创建一个 IPrincipal 对象并将它存储在 HttpContext User 属性中 这是很关键的 因为其他授权模块使用该 IPrincipal 对象作出授权决定 当 IIS 中启用匿名访问且 authentication 元素的 mode 属性设置为 none 时 有一个特殊模块将默认的匿名原则添加到 HttpContext User 属性中 因此 在进行身份验证之后 HttpContext User 绝不是一个空引用(在 Visual Basic 中为 Nothing) WindowsAuthenticationModule 如果 nfig 文件包含以下元素 则激活 WindowsAuthenticationModule 类 WindowsAuthenticationModule 类负责创建 WindowsPrincipal 和 WindowsIdentity 对象来表示经过身份验证的用户 并且负责将这些对象附加到当前 Web 请求 对于 Windows 身份验证 遵循以下步骤 WindowsAuthenticationModule 使用从 IIS 传递到 ASP NET 的 Windows 访问令牌创建一个 WindowsPrincipal 对象 该令牌包装在 HttpContext 类的 WorkerRequest 属性中 引发 AuthenticateRequest 事件时 WindowsAuthenticationModule 从 HttpContext 类检索该令牌并创建 WindowsPrincipal 对象 HttpContext User 用该 WindowsPrincipal 对象进行设置 它表示所有经过身份验证的模块和 ASP NET 页的经过身份验证的用户的安全上下文 WindowsAuthenticationModule 类使用 P/Invoke 调用 Win 函数并获得该用户所属的 Windows 组的列表 这些组用于填充 WindowsPrincipal 角色列表 WindowsAuthenticationModule 类将 WindowsPrincipal 对象存储在 HttpContext User 属性中 随后 授权模块用它对经过身份验证的用户授权 lishixinzhi/Article/program/net/201311/13618
ASP.NET 2.0 中跨网页提交的三种方法[2]
五 实现跨网页提交 这部分将讨论一下如何在ASP NET 中实现跨网页提交 为了开始我们的学习 假设有两个Web页 一个是源Web页 另一个是目标Web页 在源网页中初始化了使用按钮进行的跨网页提交操作 我们首先必须设置目标网页按钮的PostBackUrl属性 顺便说一句 所有实现了System Web UI WebControls IbuttonControl接口的Web控件都有跨网页提交的特性 下面的代码将演示这一过程 当我们设置PostBackUrl属性时 ASP NET框架将相应的控件绑定到一个新的叫WebForm_DoPostBackWithOptions的JavaScript函数 产生的Html代码如下 对于上面的代码来说 当用户单击按钮时 浏览器将提交目标URL(Target aspx) 而不是源URL 六 从目标页面中获得源页面控件的值 ASP NET 提供了一个叫PreviousPage的新的属性 这个属性无论在何时当前页面进行跨网页提交操作时都会指向源页面 要注意的是 当源页面和目标页面在不同的应用程序中时 这个属性包含null(这个null并不是未初始化的意思) 还有要注意的是当目标网页访问PreviousPage属性时可以获得源页面的数据 ASP NET运行时装载并执行了源页面 这将引发ProcessChildRequest事件的发生 而且 它还会引发Page_Init事件 Page_Load和任何其他的源页面按钮单击事件 因此 我们要避免由于不小心进行误操作 所以最好通过IsCrossPostBack属性来确认是否为一个跨网页提交发生 如果这个属性值为true 那么目标网页就是通过一个跨网页提交动作而调用的 如果是通过另外一种方式调用的(如一般的请求 Response Redirect或是一个Server Transfer) 这个属性的值为false 下面的例子演示了如何使用这个属性 if ( PreviousPage IsCrossPagePostBack) { //执行代码 } 这个PreviousPage属性在Server Transfer和跨网页提交中都可以使用 在ASP NET 中 我们可以在调用Server Transfer操作后使用PreviousPage属性在目标页面中来获得源页面的数据 代码如下: protected void Redirect_Click(object sender EventArgs e){Server Transfer( menu aspx );} 在这个接收面中我们现在可以获得Web页面的数据 代码如下 protected void Page_Load(object sender EventArgs e){if (PreviousPage != null){TextBox txtBox = (TextBox)PreviousPage FindControl( txtUserName );if (textBox != null)string userName = textBox Text;//其他可执行的代码 }} 要注意的是上面的代码必须将txtUserName控件转换为TextBox类型 以便可以访问其中的值 lishixinzhi/Article/program/net/201311/15174
在ASP.NET中支持哪些身份验证呢?
ASP.NET提供四种用户验证方式:Windows身份验证、窗口身份验证、Passport验证以及IIS身份验证。ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。ASP.NET基于.NET Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。ASP.NET具备开发网站应用程序的一切解决方案,包括验证、缓存、状态管理、调试和部署等全部功能。在代码撰写方面特色是将页面逻辑和业务逻辑分开,它分离程序代码与显示的内容,让丰富多彩的网页更容易撰写。同时使程序代码看起来更洁净、更简单。1996年,ASP 1.0(Active Server Pages)版本出现了,它引起了Web开发的新革命,降低了动态网页开发的难度。以前开发动态网页需要编写大量繁杂的C代码,编程效率非常低下,需要Web网页开发者掌握非常高的编程技巧。发展历史:2000年6月,微软公司宣布了自己的.NET框架。NET框架的基本思想是把原有的重点从连接到互联网的单一网站或设备转移到计算机、设备和服务群组上,而将互联网本身作为新一代操作系统的基础。这样,用户将能够控制信息的传送方式、时间和内容,从而得到更多的服务。
win10怎么安装net2.0
1、net2.0包括到了net3.5中,所以只要安装net3.5就可以了。方法是首先按下windows键+S键,打开win10的小娜,在搜索框中输入控制面板回车打开:2、打开控制面板和,点击程序,进入程序选项:3、进入后接着点击“打开或者关闭Windows功能”选项,稍后会弹出窗口:4、弹出窗口后,第一个就是NET3.5,可以看到括号里一句显示包含了NET2.0,直接把.NET3.5给勾上,然后点击确定,稍等片刻即可安装成功:
win10怎么安装.net 3.5
win10怎么安装.net framework3.5呢?在win10的预览版中,微软为我们直接安装了.net framework4.5,但是,有时候我们在使用一些应用时还是需要用到.net framework3.5,下文小编就教大家离线安装.net framework3.5的教程,有需要的朋友可以来下文学习下。
当我们双击打开一些应用时,Windows10预览版就会提醒我们需要联网下载安装.NET Framework 3.5,我们有更方便的方式来安装它,不需要联网下载,使用DISM(部署映像服务和管理)和Win10技术预览版的安装镜像就可以搞定。
1.加载Win10技术预览版的镜像。在Win10预览版中可以通过双击的方式加载ISO镜像文件,也可以使用魔方中的软媒虚拟光驱方便的加载;
2.在Win10开始菜单按钮上点击鼠标右键,选择其中的“命令提示符(管理员)”,打开命令提示符;
3.在命令提示符中直接输入下面的一行命令,当然可以直接粘贴复制过去,还记得吗?Win10的命令提示符现在已经可以直接使用“Ctrl+C”、“Ctrl+V”等快捷键了,然后按下回车键。注意,其中的“D:”是安装镜像所在的盘符名称,这个需要根据你电脑的实际情况来进行修改。接下来你应该会看到一个进度条,完成后会提示“操作成功完成”;
Dism /online /enable-feature /featurename:NetFX3 /All /Source:D:sourcessxs /LimitAccess
4.到控制面板中的“启用或关闭Windows功能”中看看,是不是已经安装并启用了.NET Framework 3.5呢?
ASP.NET 2.0 中的 Windows 身份验证
一 概述 身份验证是一个验证客户端身份的过程 通常采用指定的第三方授权方式 客户端可能是最终用户 计算机 应用程序或服务 客户端的标识称为安全原则 为了使用服务器应用程序进行验证 客户端提供某种形式的凭据来允许服务器验证客户端的标识 确认了客户端的标识后 应用程序可以授予执行操作和访问资源的原则 如果应用程序使用 Active Directory 用户存储 则应该使用集成 Windows 身份验证 对 ASP NET 应用程序使用集成 Windows 身份验证时 最好的方法是使用 ASP NET 的 Windows 身份验证提供程序附带的 Internet 信息服务 (IIS) 身份验证方法 使用该方法 将自动创建一个 windowsprincipal 对象(封装一个 windowsidentity 对象)来表示经过身份验证的用户 您无需编写任何身份验证特定的代码 还支持使用 Windows 身份验证的自定义解决方案(避开了 IIS 身份验证) 例如 可以编写一个根据 Active Directory 检查用户凭据的自定义 ISAPI 筛选器 使用该方法 必须手动创建一个 windowsprincipal 对象 本文阐释在具有 IIS 的 ASP NET 中 Windows 身份验证的工作机制 二 IIS 身份验证 如果 ASP NET 针对 Windows 身份验证进行配置 则 ASP NET 依靠 IIS 利用配置好的身份验证模式对其客户端进行身份验证 IIS 通过检查特定应用程序的元数据库设置来确定其身份验证模式 成功验证某个用户的身份后 IIS 将代表经过身份验证的用户的 Windows 令牌传递给宿主 ASP NET 的 ASP NET 辅助进程 (w wp exe) 如果应用程序使用在 IIS 中配置的虚拟目录来支持匿名访问 该令牌代表匿名 Internet 用户帐户 否则 该令牌代表经过身份验证的用户 iis 支持以下身份验证模式 ·匿名 如果不需要对客户端进行身份验证(或者使用自定义身份验证机制 如窗体身份验证) 则可将 IIS 配置为允许匿名访问 在该事件中 IIS 创建一个 Windows 令牌来表示具有相同匿名(或客人)帐户的所有匿名用户 默认的匿名帐户是 IUSR_MACHINENAME 其中 MACHINENAME 是安装期间指定的计算机的 NetBIOS 名称 ·基本 基本身份验证要求用户以用户名和密码的形式提供凭据来证明他们的身份 基本身份验证基于 Internet 标准 RFC 所有常用浏览器都支持它 用户的凭据以未加密的 Base 编码格式从浏览器传送到 Web 服务器 为了更好保护这些凭据 只要在使用基本身份验证同时再使用安全套接字层 (SSL) 即可 由于 Web 服务器包含未加密的用户凭据 因此 ASP NET 应用程序可以模拟调用方并使用他们的凭据来访问网络资源 ·集成的 Windows 集成的 Windows 身份验证(以前称为 NTLM 也称为 Windows NT 质询/应答身份验证 Windows NT Challenge/Response)是使用 Kerberos v 身份验证还是 NTLM 身份验证 取决于客户端和服务器的配置 服务器与客户端协商确定要使用的协议 如果满足以下条件 则使用 Kerberos 身份验证 · Web 应用程序正在 NeorkService 帐户或自定义域帐户下运行 如果应用程序在本地帐户(如 Windows Server 上的 ASPNET 帐户)上运行 则使用 NTLM 身份验证 ·域帐户的 Active Directory 中有一个服务主要名称 (SPN) 该域帐户用于运行客户端进行身份验证所使用的服务 ·客户端计算机和服务器计算机至少需要运行 Windows Server 且处在相同的(即信任的)Windows 域中 注 默认情况下 对于 Windows Server 操作系统启用集成 Windows 身份验证 然而 如果 Windows Server Service Pack (SP ) 作为 Windows Server 操作系统整合安装的一部分进行安装 则默认情况下禁用集成 Windows 身份验证 如果使用 SP 升级 Windows Server 则集成 Windows 身份验证的设置与其 Windows Server 设置相同 应该使用集成 Windows 身份验证而不是基本身份验证 因为前者避免了通过网络传输用户凭据 由于 Kerberos v 身份验证支持相互身份验证 因此用户还可以对正在连接的服务器进行身份验证 集成 Windows 身份验证最适合于 Intranet 环境 其中的客户端计算机和 Web 服务器计算机都是相同(即信任的)域的一部分 三 NTLM身份验证 ntlm 是用于 Windows NT 和 Windows Server 工作组环境的身份验证协议 它还用在必须对 Windows NT 系统进行身份验证的混合 Windows Active Directory 域环境中 当 Windows Server 转换为不存在下层 Windows NT 域控制器的本机模式时 禁用 NTLM 然后 Kerberos v 变成企业级的默认身份验证协议 ntlm 身份验证机制 图 显示 NTLM 协议 图 NTLM 质询/应答机制 下面概述质询/应答机制 · 用户请求访问 用户尝试通过提供用户凭据登录到客户端 登录前 客户端计算机缓存密码的哈希值并放弃密码 客户端向服务器发送一个请求 该请求包括用户名以及纯文本格式的请求 · 服务器发送质询消息 服务器生成一个称为质询的 字节随机数(即 NONCE) 并将它发送到客户端 · 客户端发送应答消息 客户端使用由用户的密码生成的一个密码哈希值来加密服务器发送的质询 它以应答的形式将这个加密的质询发回到服务器 · 服务器将质询和应答发送到域控制器 服务器将用户名 原始质询以及应答从客户端计算机发送到域控制器 · 域控制器比较质询和应答以对用户进行身份验证 域控制器获取该用户的密码哈希值 然后使用该哈希值对原始质询进行加密 接下来 域控制器将加密的质询与客户端计算机的应答进行比较 如果匹配 域控制器则发送该用户已经过身份验证的服务器确认 · 服务器向客户端发送应答 假定凭据有效 服务器授予对所请求的服务或资源的客户端访问权 四 Kerberos 身份验证 与 NTLM 身份验证相比 Kerberos 身份验证具有以下优势 · 相互身份验证 当客户端使用 Kerberos v 协议对特定服务器上的特定服务进行身份验证 Kerberos 为客户端提供网络上恶意代码不会模拟该服务的保证 · 委托支持 使用 Kerberos 身份验证对客户端进行身份验证的服务器可以模拟这些客户端 并使用该客户端的安全上下文访问网络资源 · 性能 Kerberos 身份验证提供优于 NTLM 身份验证的改进的性能 · 简化的信任管理 具有多个域的网络不再需要一组复杂的显式 点对点信任关系 · 互操作性 Microsoft 实现的 Kerberos 协议基于向 Internet 工程任务组 (IETF) 推荐的标准跟踪规范 因此 Windows 中协议的实现为与其他网络的互操作奠定了基础(其中 Kerberos 版本 用于身份验证) kerberos 身份验证机制 图 显示 Kerberos 身份验证协议的简化视图 图 Kerberos 身份验证 当客户端对网络服务进行身份验证之后 kerberos v 协议遵循以下步骤 · 客户端从 KDC 请求 TGT 用户试图通过提供用户凭据登录到客户端 客户端计算机上的 Kerberos 服务向密钥发行中心 (KDC) 发送一个 Kerberos 身份验证服务请求 该请求包含用户名 请求票证授予票证(ticket granting ticket TGT)所获取的服务信息 以及使用用户的长期密钥(即密码)加密的时间戳 注 在 Windows Server 或 Windows Server 操作系统上 域控制器充当 KDC 而 Active Directory 宿主安全帐户数据库 · 身份验证服务发送加密的 TGT 和会话密钥 KDC 为来自 Active Directory 的用户获取长期密钥(即密码) 然后解密随请求一起传送的时间戳 如果该时间戳有效 则用户是真正的用户 KDC 身份验证服务创建一个登录会话密钥 并使用用户的长期密钥对该副本进行加密 然后 该身份验证服务创建一个 TGT 它包括用户信息和登录会话密钥 最后 该身份验证服务使用自己的密钥加密 TGT 并将加密的会话密钥和加密的 TGT 传递给客户端 · 客户端从 TGT 请求服务器访问 客户端使用其长期密钥(即密码)解密登录会话密钥 并在本地缓存它 此外 客户端还将加密的 TGT 存储在它的缓存中 访问网络服务时 客户端向 KDC 票证授予服务(ticket granting service TGS)发送一个包含信息的请求 这些信息包括用户名 使用用户登录会话密钥加密的验证者消息 TGT 以及用户想访问的服务(和服务器)名称 · TGS 发送加密的会话密钥和票证 KDC 上的 TGS 使用自己的密钥解密 KDC 并提取登录会话密钥 它使用该登录会话密钥解密验证者消息(通常是时间戳) 如果验证者消息成功解密 TGS 从 TGT 提取用户信息 并使用用户信息创建一个用于访问该服务的服务会话密钥 它使用该用户的登录会话密钥对该服务会话密钥的一个副本进行加密 创建一个具有服务会话密钥和用户信息的服务票证 然后使用该服务的长期密钥(密码)对该服务票证进行加密 然后 TGS 将加密的服务会话密钥和服务票证添加到客户端 · 客户端发送服务票证 客户端访问服务时 向服务器发送一个请求 该请求包含验证者消息(时间戳) 该消息使用服务会话密钥和服务票证进行加密 · 服务器发送加密的时间戳以进行客户端验证 服务器解密服务票证并提取服务会话密钥 通过使用服务会话密钥 服务器解密验证者消息(时间戳)并计算它 如果验证者通过测试 则服务器使用服务会话密钥对验证者(时间戳)进行加密 然后将验证者传回到客户端 客户端解密时间戳 如果该时间戳与原始时间戳相同 则该服务是真正的 客户端继续连接 服务的主要名称 kerberos v 身份验证协议之所以使用服务的主要名称 (SPN) 原因如下 · 支持相互身份验证 · 允许一个客户端请求票证 进而允许该客户端与特定服务通讯 例如 如果某个客户端需要获得一个票证 并对在侦听端口 运行的计算机 (myserver) 上的特定服务 (myservice) 进行身份验证 则该客户端使用根据该信息构造的名称从 KDC 请求一个票证 如下所示 MyService/MyServer 在 Active Directory 中注册的 SPN 在该名称和运行所请求的服务的域帐户之间维护一个映射 通过使用该机制 恶意用户难以在网络上模拟服务 恶意用户必须禁用实际服务并从该网络移除实际服务器 然后 恶意用户必须向网络中添加一台同名的新计算机并公开重复的服务 由于客户端使用具有相互身份验证的 Kerberos v 协议 因此该客户端将无法使用重复的服务 除非它可以提供配置实际服务进行运行的域帐户的密码 五 ASP NET身份验证 iis 向 ASP NET 传递代表经过身份验证的用户或匿名用户帐户的令牌 该令牌在一个包含在 iprincipal 对象中的 iidentity 对象中维护 iprincipal 对象进而附加到当前 Web 请求线程 可以通过 属性访问 iprincipal 和 iidentity 对象 这些对象和该属性由身份验证模块设置 这些模块作为 HTTP 模块实现并作为 ASP NET 管道的一个标准部分进行调用 如图 所示 图 ASP NET 管道 管道模型包含一个 application 对象 多个 HTTP 模块对象 以及一个 HTTP 处理程序对象及其相关的工厂对象 runtime 对象用于处理序列的开头 在整个请求生命周期中 context 对象用于传递有关请求和响应的详细信息 有关 ASP NET 请求生命周期的详细信息 请参阅 ASP NET Life Cycle 网址是 (en US VS ) aspx 身份验证模块 在计算机级别的 nfig 文件中定义一组 HTTP 模块 其中包括大量身份验证模块 如下所示 只加载一个身份验证模块 这取决于该配置文件的 authentication 元素中指定了哪种身份验证模式 该身份验证模块创建一个 iprincipal 对象并将它存储在 属性中 这是很关键的 因为其他授权模块使用该 iprincipal 对象作出授权决定 当 IIS 中启用匿名访问且 authentication 元素的 mode 属性设置为 none 时 有一个特殊模块将默认的匿名原则添加到 属性中 因此 在进行身份验证之后 绝不是一个空引用(在 Visual Basic 中为 nothing) windowsauthenticationmodule 如果 nfig 文件包含以下元素 则激活 windowsauthenticationmodule 类 WindowsAuthenticationModule 类负责创建 windowsprincipal 和 windowsidentity 对象来表示经过身份验证的用户 并且负责将这些对象附加到当前 Web 请求 对于 Windows 身份验证 遵循以下步骤 · WindowsAuthenticationModule 使用从 IIS 传递到 ASP NET 的 Windows 访问令牌创建一个 windowsprincipal 对象 该令牌包装在 context 类的 workerrequest 属性中 引发 authenticaterequest 事件时 windowsauthenticationmodule 从 context 类检索该令牌并创建 windowsprincipal 对象 用该 windowsprincipal 对象进行设置 它表示所有经过身份验证的模块和 ASP NET 页的经过身份验证的用户的安全上下文 · WindowsAuthenticationModule 类使用 P/Invoke 调用 Win 函数并获得该用户所属的 Windows 组的列表 这些组用于填充 windowsprincipal 角色列表 · WindowsAuthenticationModule 类将 windowsprincipal 对象存储在 属性中 随后 授权模块用它对经过身份验证的用户授权 注 defaultauthenticationmodule 类(也是 ASP NET 管道的一部分)将 thread currentprincipal 属性设置为与 属性相同的值 它在处理 authenticaterequest 事件之后进行此操作 授权模块 WindowsAuthenticationModule 类完成其处理之后 如果未拒绝请求 则调用授权模块 授权模块也在计算机级别的 nfig 文件中的 modules 元素中定义 如下所示 urlauthorizationmodule 调用 urlauthorizationmodule 类时 它在计算机级别或应用程序特定的 nfig 文件中查找 authorization 元素 如果存在该元素 则 urlauthorizationmodule 类从 属性检索 iprincipal 对象 然后使用指定的动词(GET POST 等)来确定是否授权该用户访问请求的资源 fileauthorizationmodule 接下来 调用 fileauthorizationmodule 类 它检查 属性中的 iidentity 对象是否是 windowsidentity 类的一个实例 如果 iidentity 对象不是 windowsidentity 类的一个实例 则 fileauthorizationmodule 类停止处理 如果存在 windowsidentity 类的一个实例 则 fileauthorizationmodule 类调用 accesscheck Win 函数(通过 P/Invoke)来确定是否授权经过身份验证的客户端访问请求的文件 如果该文件的安全描述符的随机访问控制列表 (DACL) 中至少包含一个 read 访问控制项 (ACE) 则允许该请求继续 否则 fileauthorizationmodule 类调用 方法并将状态码 返回到客户端 六 安全上下文 net Framework 使用以下两个接口封装 Windows 令牌和登录会话 · System Security Principal IPrincipal · System Security Principal IIdentity(它公开为 iprincipal 接口中的一个属性 ) 在 ASP NET 中 用 windowsprincipal 和 windowsidentity 类表示使用 Windows 身份验证进行身份验证的用户的安全上下文 使用 Windows 身份验证的 ASP NET 应用程序可以通过 属性访问 windowsprincipal 类 要检索启动当前请求的 Windows 经过身份验证的用户的安全上下文 使用以下代码 using System Security Principal; // Obtain the authenticated user s IdentityWindowsPrincipal winPrincipal = (WindowsPrincipal)HttpContext Current User; windowsidentity getcurrent WindowsIdentity GetCurrent 方法可用于获得当前运行的 Win 线程的安全上下文的标识 如果不使用模拟 线程继承 IIS (默认情况下的 NeorkService 帐户)上进程的安全上下文 该安全上下文在访问本地资源时使用 通过使用经过身份验证的初始用户的安全上下文或使用固定标识 您可以使用模拟重写该安全上下文 要检索运行应用程序的安全上下文 使用以下代码 using System Security Principal; // Obtain the authenticated user s identity WindowsIdentity winId = WindowsIdentity GetCurrent();WindowsPrincipal winPrincipal = new WindowsPrincipal(winId); thread currentprincipal 应用程序中的每个线程公开一个 currentprincipal 对象 该对象保存经过身份验证的初始用户的安全上下文 该安全上下文可用于基于角色的授权 要检索线程的当前原则 使用以下代码 using System Security Principal; // Obtain the authenticated user s identityWindowsPrincipal winPrincipal = (WindowsPrincipal) Thread CurrentPrincipal(); 表 显示从各种标识属性获得的结果标识 当您的应用程序使用 Windows 身份验证且 IIS 配置为使用集成 Windows 身份验证时 可以从 ASP NET 应用程序使用这些标识属性 表 线程公开的 CurrentPrincipal Object nfig 设置 变量位置 结果标识 HttpContextWindowsIdentity线程 Domain\UserNameDomain\UserNameDomain\UserName HttpContextWindowsIdentity线程 Domain\UserNameNT AUTHORITY\NEORK SERVICEDomain\UserName HttpContextWindowsIdentity线程 用户提供的名称Domain\UserName用户提供的名称 HttpContextWindowsIdentity线程 用户提供的名称NT AUTHORITY\NEORK SERVICE用户提供的名称 七 模拟 应用程序可以使用模拟来执行操作 使用经过身份验证的客户端或特定 Windows 帐户的安全上下文来访问资源 初始用户模拟 要模拟初始(经过身份验证的)用户 请在 nfig 文件中使用以下配置 使用该配置 始终模拟经过身份验证的用户 且所有资源访问均使用经过身份验证的用户的安全上下文执行 如果您的应用程序的虚拟目录上启用了匿名访问 则模拟 IUSR_MACHINENAME 帐户 要暂时模拟经过身份验证的调用方 将 identity 元素的 impersonate 属性设置为 false 然后使用以下代码 using System Security Principal; // Obtain the authenticated user s identity WindowsIdentity winId = (WindowsIdentity)HttpContext Current User Identity; WindowsImpersonationContext ctx = null; try { // Start impersonating ctx = winId Impersonate(); // Now impersonating // Access resources using the identity of the authenticated user } // Prevent exceptions from propagating catch { } finally { // Revert impersonation if (ctx != null) ctx Undo(); } // Back to running under the default ASP NET process identity 这段代码模拟经过身份验证的初始用户 在 对象中维护初始用户的标识和 Windows 令牌 固定标识模拟 如果需要在应用程序的整个生命周期中模拟相同的标识 可以在 nfig 文件中的 identity 元素上指定凭据 以下示例显示如何模拟名为 TestUser 的 Windows 帐户 如果使用该方法 应该对这些凭据进行加密 使用 ASP NET 您可以使用 ASP NET IIS 注册工具 (Aspnet_regiis exe) 使用 ASP NET 版 您可以使用 Aspnet_setreg exe 实用工具 有关该实用工具的详细信息 请参阅 ?url=/library/en us/cptools//cpgrfaspnetiisregistrationtoolaspnet_regiisexe asp 要在 ASP NET 应用程序中使用固定标识进行资源访问 可使用 Windows Server 或 Windows Server 上的 identity 元素来配置凭据 如果正在运行 Windows Server 其中的 IIS 配置为运行在辅助进程隔离模式下(默认情况) 则可通过将 ASP NET 应用程序配置为在自定义应用程序池(在特定的域标识下运行)中运行来避免模拟 然后 可以使用指定的域标识访问资源而无需使用模拟 八 委托 模拟只提供对本地资源的访问 委托是一个扩展的模拟功能 它允许您使用模拟令牌访问网络资源 如果应用程序使用 Kerberos v 身份验证对其用户进行身份验证 则可使用 Kerberos 委托在应用程序的各层传递用户标识并访问网络资源 如果应用程序不使用 Kerberos v 身份验证 则可使用协议转换切换到 Kerberos 然后使用委托传递该标识 windows Server 中的约束委托需要 Kerberos 身份验证 如果您的应用程序无法使用 Kerberos 身份验证对其调用方进行身份验证 您可以使用协议转换从可选的非 Windows 身份验证模式(如 窗体或证书身份验证)切换到 Kerberos 身份验证 然后 可使用具有约束委托的 Kerberos 访问下游网络资源 约束的和未约束的委托 windows Server 上的 Kerberos 委托是未约束的 Active Directory 中配置了委托的服务器可在使用模拟的用户安全上下文的同时访问任何网络资源或网络上的任何计算机 这会带来潜在的安全威胁 尤其是 Web 服务器遭受恶意用户攻击时 为了解决该安全问题 windows Server 引入了约束的委托 这使管理员能够在使用模拟的用户安全上下文时准确指定另一个服务器或域帐户可以访问的服务 配置委托 要使用 Kerberos 委托 需要适当的 Active Directory 配置 要授予 Web 服务器委托客户端凭据的权限 请按以下方式配置 Active Directory · 如果在 NeorkService 帐户下运行应用程序 Web 服务器计算机帐户必须在 Active Directory 中标记为受信任委托 · 如果在自定义域帐户下运行应用程序 该用户帐户必须在 Active Directory 中标记为受信任委托 · 如果应用程序模拟一个用户帐户 请确保应用程序模拟的用户帐户在 Active Directory 中未标记为 敏感帐户 不能被委托 有关协议转换和约束委托的详细信息 请参阅 How To Use Protocol Transition and Constrained Delegation in ASP NET lishixinzhi/Article/program/net/201311/13414
Microsoft .NET Framework是干什么用的?
Microsoft .NET Framework是用于Windows的新托管代码编程模型。它基于管理代码的概念,以及由通用语言运行时(CLR)加强的安全规则。将强大的功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。扩展资料:.NET Framework提供了一组加密对象,它们支持加密算法、数字签名、散列、生成随机数,是通过众所周知的运算法则实现的,如RSA, DSA, Rijndael/AES, Triple DES, DES, 和 RC2, 以及MD5, SHA1, SHA-256, SHA-384 和 SHA-512散列算法。同时还支持在IETF和W3C开发的XML数字签名规范。.NET Framework使用加密对象支持内部服务。这些对象还作为管理代码提供给需要加密支持的开发人员。
Microsoft .NET Framework是什么,重要吗
Microsoft .NET Framework对于专业人士来说重要,一般人用不上。Microsoft .NET Framework是用于Windows的新托管代码编程模型。它将强大的功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。.NET Framework 是以一种采用系统虚拟机运行的编程平台,以通用语言运行库(Common Language Runtime)为基础,支持多种语言(C#、VB、C++、Python等)的开发。NET也为应用程序接口(API)提供了新功能和开发工具。这些革新使得程序设计员可以同时进行Windows应用软件和网络应用软件以及组件和服务(web服务)的开发。.NET提供了一个新的反射性的且面向对象程序设计编程接口。.NET设计得足够通用化从而使许多不同高级语言都得以被汇集。.NET Framework 中的所有语言都提供基类库(BCL)。微软的开发工具,visual studio,Sql server等编程工具,或者CAD制图软件的时候要求安装,因为他们需要.net framework 平台的一些类库来处理数据.普通用户几乎用不上。扩展资料:Microsoft .NET Framework 是一个 Microsoft Windows 组件,Windows 用户可通过各种分发渠道获得它。这些分发渠道包括 Microsoft Update 网站和 Microsoft 下载中心。该组件还安装在一些新的计算机上。本文论述在计算机上安装 .NET Framework 的好处。更多信息目前有六个 .NET Framework 发行版:Service Pack 1 (SP1) 为最新的 Service Pack。·.NET Framework 4.0· .NET Framework 3.5Service Pack 2 (SP2) 为最新的 Service Pack。· .NET Framework 3.0Service Pack 1 (SP1) 为最新的 Service Pack。· .NET Framework 2.0Service Pack 2 (SP2) 为最新的 Service Pack。· .NET Framework 1.1Service Pack 1 (SP1) 为最新的 Service Pack。· .NET Framework 1.0Service Pack 3 (SP3) 为最新的 Service Pack。您可能在计算机上安装了多个版本的 .NET Framework。计算机上的每个 .NET Framework 版本都能与其他版本共存。不过最近微软公司也出了新版本,也就是.NET Framework 4.0。参考资料:Microsoft .NET Framework_百度百科
ASP.NET 2.0 中跨网页提交的三种方法
当在一个ASP NET Web页面中进行操作时 在默认情况下向当前页进行提交 这种行为在ASP NET出现之前并没有什么关系 但在ASP NET中当我们想向另外一个Web页提交一个Web Form时该如何做呢?在ASP NET 中这个问题变得很难解决 但在ASP NET 中为开发人员提供了更容易的解决的技术 跨网页提交 这种技术允许一个网页在提交数据时提交给另外的一个页面 在跨网页提交中 用于初始化提交代码的页面叫源页面 而客户提交的页面叫目标页面 为了方便起见 目标页面仍然获得原页面提交的所有数据 换名话说 从技术观点出发 我们可以用同样的方式处理其他ASP NET页面提交的数据 这个新特性意味着ASP NET 开发人员目前有三种可供选择的技术来将数据从一个web页面传送到另外一个页面 这三种方法是 响应重定向 服务端传输和新的跨网页提交特性 我们可以已经熟悉前两种技术了 因此 我们只是简要地复习一下它们 然后我们会将主要精力放到学习如何使用跨网页提交特性 以及阐述一下这种方法和响应重定向以及服务传输方式有什么不同 一 响应重定向方法 响应重定向方法是目前为止将一个网页重定向到另一个网页的最简单的方法的最简单的方法 当Web服务器接到一个重定向请求后 它会将一个响应头送给客户端 这将导致客户端发送一个新的请求到服务器 按句话说 一个重定向请求实际上是两个请求响应 一个是最初的请求响应 另一个是新的重定向请求响应 在ASP NET中实现重定向很容易 下面的代码演示了如何使用Response Redirect方法实现网页重定向 protected void Redirect_Click(object sender EventArgs e) { Response Redirect( menu aspx ); } 要注意的是重定向请求只是一个GET请求 这就意味着我们不能从源页中通过重定向命令提交数据 但是我们可以在重定向中使用查询字符串来传递数据 如下面代码所示 protected void Redirect_Click(object sender EventArgs e) { Response Redirect( menu aspx?userName= + UserName Text)); } 上面的例子将一个查询字符串作为参数传递给了Response Redirect方法的目标URL 我们可以通过如下的代码获得源数据 protected void Page_Load(object sender EventArgs e) { string userName = Request[ userName ]; } 二 服务器传输方法 和依赖于客户端向另一个新页发请求不同 服务器传输是一种服务器重定向技术 这种技术通过简单的改变Web服务器所处理的代码来达到请求一个新页的目的 当被请求页和源页面在同一个服务器时 服务器传输要比Response Redirect方法更有效 这是由于这种技术可以避免额外的开销 仅仅使用服务器的资源就可以进行重定向 要注意的这种技术有一个副作用 在页面进行重定向时 客户端的URL仍然会保持源页面的URL 这可能会使客户认为他们所获得的数据是源页面产生的 当然 在大多数情况下 这不是问题 但是这将使调试变得更困难 Server Transfer方法还可以保存初始页的HttpContext 因此 目标页可以访问源页面的值 我们可以使用FormsCollection属性来从目标页面中获得源页面的值 首先 要确定我们使用了被重载的方法 这个方法有两个参数 目标URL和一个Boolean类型的值 告诉服务器是否保存用于描述源页面值的Form 如下面的代码所示 [NextPage] Server Transfer( Menu aspx true); 然后 我们在目标页面中获得一个叫txtUserName的Textbox控件的值的代码如下 object obj = Request Form[ txtUserName ]; 三 Response Redirect和Server Transfer的比较 由于Response Redirect方法要进行两次请求响应操作 因此 我们应该在对性能要求高的网站尽量避免使用这种方法 然而 只从技术上说 使用redirect方式确实可以从一个网页跳到另一个网页 相比之下 Server Transfer会更有效率 但是跳转的范围仅限于同一个Web服务器的不同网页 从本质上说 我们可以使用Server Transfer来消除不必要的请求响应操作 如果我们需要重定位到不同服务器的网页 就需要使用Response Redirect方法 四 跨页提交概述 在ASP NET 中 我们可以通过实现IbuttonControl接口提交给不同的WebForm 来实现跨网页的提交 和Response Redirect类似 跨网页提交是一个基于客户端的传输机制 但也有点象Server Transfer 目标网页也可以访问源网页的数据 为了使用跨网页提交 我们需要在源网页中的PostBackUrl属性中指定目标URL 五 实现跨网页提交 这部分将讨论一下如何在ASP NET 中实现跨网页提交 为了开始我们的学习 假设有两个Web页 一个是源Web页 另一个是目标Web页 在源网页中初始化了使用按钮进行的跨网页提交操作 我们首先必须设置目标网页按钮的PostBackUrl属性 顺便说一句 所有实现了System Web UI WebControls IbuttonControl接口的Web控件都有跨网页提交的特性 下面的代码将演示这一过程 PostBackUrl= ~/target aspx text = Post to a target page /> 当我们设置PostBackUrl属性时 ASP NET框架将相应的控件绑定到一个新的叫WebForm_DoPostBackWithOptions的JavaScript函数 产生的Html代码如下 onclick= javascript:WebForm_DoPostBackWithOptions( new WebForm_PostBackOptions( btnSubmit false Target aspx false false)) id= btnSubmit /> 对于上面的代码来说 当用户单击按钮时 浏览器将提交目标URL(Target aspx) 而不是源URL 六 从目标页面中获得源页面控件的值 ASP NET 提供了一个叫PreviousPage的新的属性 这个属性无论在何时当前页面进行跨网页提交操作时都会指向源页面 要注意的是 当源页面和目标页面在不同的应用程序中时 这个属性包含null(这个null并不是未初始化的意思) 还有要注意的是当目标网页访问PreviousPage属性时可以获得源页面的数据 ASP NET运行时装载并执行了源页面 这将引发ProcessChildRequest事件的发生 而且 它还会引发Page_Init事件 Page_Load和任何其他的源页面按钮单击事件 因此 我们要避免由于不小心进行误操作 所以最好通过IsCrossPostBack属性来确认是否为一个跨网页提交发生 如果这个属性值为true 那么目标网页就是通过一个跨网页提交动作而调用的 如果是通过另外一种方式调用的(如一般的请求 Response Redirect或是一个Server Transfer) 这个属性的值为false 下面的例子演示了如何使用这个属性 if ( PreviousPage IsCrossPagePostBack) { //执行代码 }[NextPage] 这个PreviousPage属性在Server Transfer和跨网页提交中都可以使用 在ASP NET 中 我们可以在调用Server Transfer操作后使用PreviousPage属性在目标页面中来获得源页面的数据 代码如下: { Server Transfer( menu aspx ); } protected void Redirect_Click(object sender EventArgs e) 在这个接收面中我们现在可以获得Web页面的数据 代码如下 protected void Page_Load(object sender EventArgs e) { if (PreviousPage != null) { TextBox txtBox = (TextBox) PreviousPage FindControl( txtUserName ); if (textBox != null) string userName = textBox Text; //其他可执行的代码 } } 要注意的是上面的代码必须将txtUserName控件转换为TextBox类型 以便可以访问其中的值 七 使用PreviousPageType PreviousPageType属性提供了在跨网页操作中访问源页面的强类型能力 下面让我们演示一下如何不通过任何类型转换来从源页面中获得控件值 代码如下 < asp:Button ID= Submit Runat= server Text= Login PostBackUrl= Menu aspx /> 要注意的是单击按钮可以重定向到一个叫 Menu asp 的目标页 这个目标页可以使用如下的代码获得用户名和密码 八 保存视图状态 对于跨网页提交来说 ASP NET 内嵌了一个叫__POSTBACK的隐藏字段 这个字段包含了关于源页面的视图信息 也就是由源页面提供了 包含了一个带有一个非空PostBackUrl属性值的服务端控件 目标页可以使用__POSTBACK中的信息来获得源页面的视图状态信息 代码如下 if(PreviousPage!=null && PreviousPage IsCrossPagePostBack && PreviousPage IsValid) { TextBox txtBox = PreviousPage FindControl( txtUserName ); Response Write(txtBox Text); } 在上面的代码中核对了用于确保PreviousPage属性不为null的检查代码 顺便提一下 如果目标页和源页面不在同一个应用程序中 这个PreviousPage属性的值为null 只有在进行跨网页提交操作时 IsCrossPagePostBack属性才为true lishixinzhi/Article/program/net/201311/12923