asp.net 2.0

时间:2024-05-07 03:10:48编辑:莆田seo君

ASP.NET入门教程 7.3.1 数据源控件的基本属性[1]

数据源控件需要很多属性 明显的有ID和runat= server 还必须指定使用哪个服务器上的哪个数据库以及验证所需的登录名和口令 这些信息保存在连接字符串中 接着必须指定从数据库中读取哪些记录和字段 数据源控件还需要一个提供商 它指定怎样和数据库进行交互(SqlDataSource控件的默认提供商即是Microsoft SQL Server的提供商) 在这个示例中VWD将通过向导带领您完成以上设置 本章中您的主要工作集中在Fixtures aspx页面上 该页面列出Wrox United球队的赛程表 在这个 试一试 练习中 将使用VWD的向导添加数据源控件并查看由IDE为您创建的源代码 ( )打开本章的Web站点(C:\BegASPNET \Chapters\Begin\Chapter )并在站点的根目录下创建一个名为Fixtures 代码文件的Web表单模板 aspx的页面 创建时该页面使用了带有站点Master页面和独立切换到Design View并在内容面板中输入Futures ( )从工具条的Data区域中将一个SqlDataSource控件拖放到内容面板的中间 可能需要向下滚动工具条窗口才能看到这个新控件 打开智能任务面板并单击Configure Data Source ( )单击该控件右上方的小箭头以打开智能任务面板并单击ConfigureData Source o VWD将弹出一个向导 在第一个对话框中单击New Connection ( )在Data Source文本框中将数据源设置为一个Microsoft SQL Server Database文件 对于Database File Name 浏览App_Data文件夹并选择 WroxUnited mdf 记住使用默认的Windows Authentication 如图 一 所示 单击Test Connection按钮以确保文件名的拼写正确无误而且一切准备妥当 单击OK关闭该窗口 ( )单击Next 对于这个示例 不要将连接保存在应用程序文件中 ASP NET 入门教程完整版 lishixinzhi/Article/program/net/201311/14726


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中有不少的控件 在这当中有一部分是用来处理数据的控件 在这里我们正要讨论的就是ASP NET数据控件 希望对大家有所帮助    ASP NET数据控件综述    前 个(GridView 控件 DetailsView 控件 FormView 控件)用于呈现多条记录 后面 个(Repeater 控件 DataList 控件)用于呈现单条数据明细 即常用的记录明细    GridView和DetailsView控件的布局固定 自定义数据显示的布局功能有限 一般适合布局简单的数据呈现    DataList Repeater和FormView数据控件都有很强的自定义布局能力 如果数据呈现需要较为复杂的布局方案 这 个控件是首选    GridView DetailsView和FormView这三个都 新增的控件 内置了分页 排序等等功能 其改进程度是 所提供控件无法比的    DataList和Repeater是 版就提供的控件 内置功能较弱 需要自己实现分页 排序 数据事件等功能   有趣的是 在现在的平台上 如果从功能上来说呈现单列数据时DetailsView和FormView相对应 DetailsView布局固定FormView自定义布局 呈现多列数据时只有GridView来负责布局固定的数据 从功能上来说 没有对应的控件与GridView相配   DataList提供的数据功能与GridView相比 实在是太弱了 与GridView几乎不需要编程就能担负数据呈现的重任相比 DataList要求程序员必须自己写代码来实现想要的功能    ASP Net 数据控件之GridView 控件   GridView 控件以表的形式显示数据 并提供对列进行排序 分页 翻阅数据以及编辑或删除单个记录的功能   注意 GridView 控件是 ASP NET 的早期版本中提供的 DataGrid 控件的后继控件 除了添加利用数据源控件功能的新功能 GridView 控件还实现了某些改进 例如 定义多个主键字段的功能 使用绑定字段和模板的改进用户界面自定义以及用于处理或取消事件的新模型    ASP Net 数据控件之DetailsView 控件   DetailsView 控件一次呈现一条表格形式的记录 并提供翻阅多条记录以及插入 更新和删除记录的功能 DetailsView 控件通常用在主/详细信息方案中 在这种方案中 主控件(如 GridView 控件)中的所选记录决定了 DetailsView 控件显示的记录    ASP NET 数据控件之FormView 控件   FormView 控件与 DetailsView 控件类似 它一次呈现数据源中的一条记录 并提供翻阅多条记录以及插入 更新和删除记录的功能 不过 FormView 控件与 DetailsView 控件之间的差别在于 DetailsView 控件使用基于表格的布局 在这种布局中 数据记录的每个字段都显示为控件中的一行 而 FormView 控件则不指定用于显示记录的预定义布局 实际上 您将创建包含控件的模板 以显示记录中的各个字段 该模板包含用于设置窗体布局的格式 控件和绑定表达式    ASP NET 数据控件之Repeater 控件   Repeater 控件使用数据源返回的一组记录呈现只读列表 与 FormView 控件类似 Repeater 控件不指定内置布局 您可以使用模板创建 Repeater 控件的布局    ASP NET 数据控件之DataList 控件 lishixinzhi/Article/program/net/201311/12813


ASP.NET入门教程 7.6 多个数据控件一起工作[1]

前一小节描述了一种使用参数的原始方法──在URL 之后输入参数 开通的方法是使用一个数据绑定控件为其他数据绑定控件创建参数 这在术语中称为ControlParameters 本节演示两种非常普遍的情况 在第一种情况中 DropDownList控件决定了在GridView控件中显示哪条(些)记录 在第二种情况中 对GridView控件中的记录进行选择以使页面在DetailsView控件中显示该记录的更多字段 这些情况称为主一从场景 在主数据绑定控件中进行选择将为从数据绑定控件的数据源控件的WHERE子句设立一个值 绝大多数情况下 主从数据绑定控件分别使用单独的数据源控件 在主控件中 只需使用一个特定的属性 如果主控件是ListBox或DropDownI ist 必须将AutoPostBack属性设置为True以便在主控件中做出选择之后 ASP NET 将触发页面进行刷新 从而使子控件显示变化后的记录 记住ListBox和DropDownList控件有两个字段参数 第一个是要显示的字段(DataTextField属性) 而第二个是要在页面的代码中使用的字段(DataValueField属性) 例如 这允许您在列表框中向用户显示球员的姓 但在SQL语句中则使用更有用的值PlayerID 如果主控件是GridView控件 可以打开它的智能任务面板 勾选Enable Selection复选框以使VWD为控件中的每条记录创建一个新列 该列带有Select按钮 单击该按钮 ASP NET将对选中的记录做出反应 如您稍后所见 在子控件中 必须在该控件的数据源控件的WHERE子句中设置一个参数 在前一小节中 您使用Configure Data Source Control向导的Add WHERE Clause对话框将参数设置在查询字符串的一个字段中 可以再次使用该向导 但这次在Add WHERE Clause对话框中将列设置为等于某个控件(而不是查询字符串)中的值 该向导将显示一个控件列表 可以从中进行选择 在选择的控件中决定使用哪个值 通常是SelectionValue 在下面的 试一试 练习中您将练习两个控件组合 在第一个组合中 使用DetaiisView控件显示在GridView控件中选择的数据的其他字段 在第二个组合中 使用DropDownList控件在GridView控件内仅显示特定的记录 ( )现在创建最终版本的Fixtures aspx页面 将已存在的Fixtures aspx文件移动到一个自己创建的文件夹中并将其命名为OIdPages 由于创建页面的步骤非常迅速和简单(而且是一次很好的复习) 您将从头开始 使用Master页面创建一个新的Web Form并将其命名为Fixtures aspx 将其VB代码保存在一个单独的文件中 切换到Design View ( )打开Database Explorer 导航到WroxUnited mdf→Tables→Fixtures 仅选择FixturelD FixtureDate和opponents(使用Ctrl+单击) 个字段 将它们拖放到页面上 VWD将稍微停顿然后创建一个GridView控件 并自动打开它的智能任务面板 勾选图 中所示的Enable Selection复选框 注意VWD己经添加了Select按钮列 ( )从工具箱中将一个DetailsView控件拖放到内容区域的底部 选择New的数据源 将数据源控件的ID设置为SqlDataSource 并继续使用您在本章一直使用的WroxUnited连接字符串 指定从Fixtures表中读取数据并选择所有字段 ( )单击WHERE按钮并选择FixtureID列 将操作符设置为等号并从Source下拉列表中选择Control ( )在参数属性面板中 将ControlID设置为GridView 默认值设置为 不要忘记单击Add按钮 单击OK Next 然后单击Test Query按钮(值 正确) 最后单击Finish按钮 ( )将DetailsView控件的宽度扩大一点 保存该页面并在浏览器中查看 在GridView控件中选择不同的记录并注意DetailsView控件中显示的注释 ( )现在改善Gallery页面 使其从单页显示变为分页显示 在Solution Explorer中 在根目录下创建Gallery All aspx页面的一个副本 将该副本的名称修改为Gallery aspx ( )打开Gallery aspx 在页面顶部添加一些换行符 然后将一个DropDownList控件拖放到页面顶部 将数据源配置为类型Database的新源 并命名为SqlDataSource 使用WroxUnited数据库 从Fixtures表中选择FixturelD FixtureDate和Opponents 单击ORDER BY在FixtureDate列上以升序排列 单击OK Next 然后测试查询并结束 您将回到Choose a Data Source窗口 把DataTextField设置为Opponents(暂时这样) 同时把DataValueField设置为FixtureID 在仍然选中DropDownList控件的情况下 从智能任务面板中打开Enable AutoPostBack开关 ASP NET 入门教程完整版 lishixinzhi/Article/program/net/201311/15201


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


在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框架的基本思想是把原有的重点从连接到互联网的单一网站或设备转移到计算机、设备和服务群组上,而将互联网本身作为新一代操作系统的基础。这样,用户将能够控制信息的传送方式、时间和内容,从而得到更多的服务。

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


上一篇:apk是什么文件

下一篇:dbc