分,它可以从静态的 WindowsIdentity.GetCurrent() 方法获得。它返回具有 Token 属性的 WindowsIdentity 对象,该属性将一个表示 Windows 句柄的 IntPtr 返回给与当前执行线程关联的访问令牌。该令牌接着可被传递到本机 Win32® 应用程序编程接口 (API) 函数,如 GetTokenInformation、SetTokenInformation 和 CheckTokenMembership 等等,用于检索与令牌有关的安全信息。
注:静态 WindowsIdentity.GetCurrent() 方法返回当前所执行线程的标识,它可能是(也可能不是)模拟的。这与 Win32 GetUserName API类似。
GenericPrincipal 和 Associated Identity 对象
这些实现非常简单,供不使用 Windows 身份验证的应用程序在应用程序不需要主体的复杂表示时使用。您可以在代码中非常容易地创建这些实现,因此,在应用程序处理 GenericPrincipal 时,必须存在某种程度的信任。
如果依靠GenericPrincipal 上的 IsInRole 方法作出授权决定,必须信任向您发送GenericPrincipal的应用程序。这与使用 WindowsPrincipal 对象形成对比:使用 WindowsPrincipal 对象时,必须委托操作系统提供有效的 WindowsPrincipal 对象,和一个授权表示符以及有效的组/角色名。
以下类型的标识对象可以与 GenericPrincipal 类相关联:
• FormsIdentity该类表示已经过窗体身份验证的标识。它包含的 FormsAuthenticationTicket 中存储了与用户的身份验证会话有关的信息。
• PassportIdentity该类表示已经过 Passport 身份验证的标识,它包含 Passport 配置文件信息。
• GenericIdentity该类表示一个不与任何特定操作系统技术相关的逻辑用户,通常用在自定义的身份验证和授权机制中。
ASP.NET 和HttpContext.User
通常,作出任何授权决定之前,先要在 .NET 代码中检查 Thread.CurrentPrincipal。不过,ASP.NET 使用HttpContext.User提供经过身份验证的用户的安全上下文。
该属性接受并返回 IPrincipal 接口。,该属性包含一个与当前的请求相关的经过身份验证的用户。ASP.NET 在作出授权决定时将检索 HttpContext.User 。
使用 Windows 身份验证时,Windows 身份验证模块自动构造 WindowsPrincipal 对象并将它存储在 HttpContext.User。如果使用其他身份验证机制(如窗体或 Passport),必须构造 GenericPrincipal 对象并将它存储在 HttpContext.User 中。
ASP.NET 标识
在 ASP.NET 应用程序执行过程中的任何给定时间内,单个请求中可能存在多个标识。它们包括:
• HttpContext.User返回IPrincipal对象,该对象包含当前 Web 请求的安全信息。这是经过身份验证的 Web 客户端。
• WindowsIdentity.GetCurrent()返回当前所执行的 Win32 线程的安全上下文标识。默认情况下,该标识为 ASPNET;这是用于运行 ASP.NET Web 应用程序的默认帐户。.但是,如果已配置 Web 应用程序进行模拟,该标识则表示经过身份验证的用户(如果 IIS 匿名身份验证有效,该标识为 IUSR_MACHINE)。
• Thread.CurrentPrincipal返回当前所执行的 .NET 线程(它位于 Win32 线程之上)的主体。
更多信息
• 有关 Web 应用程序配置组合(包括使用模拟和不使用模拟)的ASP.NET标识的详细分析,请参阅“ASP.NET Identity Matrix”。
• 有关创建您自己的IPrincipal实现的详细信息,请参阅“ASP.NET 安全性”和“How to implement IPrincipal”。
Remoting 与 Web 服务
在.NET Framework, 的最新版本中,Remoting 与 Web 服务没有自己的安全模型。它们都继承 IIS 和 ASP.NET 的安全功能。
虽然远程处理体系结构中没有内置的安全功能,但在设计时考虑到了安全性。开发人员和/或管理员可以自行决定在远程处理应用程序中集成一定程度的安全性。是否在远程处理边界之间传递主体对象取决于客户端和远程对象的位置,例如:
• 同一进程内的远程处理。在同一应用程序域或不同的应用程序域内的对象之间使用远程处理时,远程处理基础结构将与调用方上下文相关的 IPrincipal 对象的引用复制到接收方的上下文中。
• 进程之间的远程处理。在这种情况下,不在进程之间传送 IPrincipal 对象。用于构造原始 IPrincipal 的证书必须传送到远程进程,该进程可能位于另一台计算机上。这就使得远程计算机能够根据提供的证书来构造相应的 IPrincipal 对象。
小结
本章介绍了与 .NET 相关的各种技术提供的所有身份验证和授权选项。也介绍了 .NET Framework 安全性,以及主体和标识对象,这些是 ASP.NET 验证的核心内容。.
通过在整个 .NET 应用程序中使用多个网关守卫,您将能够实现纵深防御安全策略。概括起来,有以下几点:
• ASP.NET 应用程序可以使用 Windows 和 IIS 提供的现有安全功能。
• SSL 和 IPSec 可用来在 .NET 应用程序的各层上(例如,从浏览器到数据库)联合提供安全通信。
• 使用基本或窗体身份验证时,可使用 SSL 保护通过网络传递的明文证书。
• 建立在 .NET Framework 版本1之上的 ASP.NET 应用程序必须作为完全可信的应用程序运行,这意味着代
注:静态 WindowsIdentity.GetCurrent() 方法返回当前所执行线程的标识,它可能是(也可能不是)模拟的。这与 Win32 GetUserName API类似。
GenericPrincipal 和 Associated Identity 对象
这些实现非常简单,供不使用 Windows 身份验证的应用程序在应用程序不需要主体的复杂表示时使用。您可以在代码中非常容易地创建这些实现,因此,在应用程序处理 GenericPrincipal 时,必须存在某种程度的信任。
如果依靠GenericPrincipal 上的 IsInRole 方法作出授权决定,必须信任向您发送GenericPrincipal的应用程序。这与使用 WindowsPrincipal 对象形成对比:使用 WindowsPrincipal 对象时,必须委托操作系统提供有效的 WindowsPrincipal 对象,和一个授权表示符以及有效的组/角色名。
以下类型的标识对象可以与 GenericPrincipal 类相关联:
• FormsIdentity该类表示已经过窗体身份验证的标识。它包含的 FormsAuthenticationTicket 中存储了与用户的身份验证会话有关的信息。
• PassportIdentity该类表示已经过 Passport 身份验证的标识,它包含 Passport 配置文件信息。
• GenericIdentity该类表示一个不与任何特定操作系统技术相关的逻辑用户,通常用在自定义的身份验证和授权机制中。
ASP.NET 和HttpContext.User
通常,作出任何授权决定之前,先要在 .NET 代码中检查 Thread.CurrentPrincipal。不过,ASP.NET 使用HttpContext.User提供经过身份验证的用户的安全上下文。
该属性接受并返回 IPrincipal 接口。,该属性包含一个与当前的请求相关的经过身份验证的用户。ASP.NET 在作出授权决定时将检索 HttpContext.User 。
使用 Windows 身份验证时,Windows 身份验证模块自动构造 WindowsPrincipal 对象并将它存储在 HttpContext.User。如果使用其他身份验证机制(如窗体或 Passport),必须构造 GenericPrincipal 对象并将它存储在 HttpContext.User 中。
ASP.NET 标识
在 ASP.NET 应用程序执行过程中的任何给定时间内,单个请求中可能存在多个标识。它们包括:
• HttpContext.User返回IPrincipal对象,该对象包含当前 Web 请求的安全信息。这是经过身份验证的 Web 客户端。
• WindowsIdentity.GetCurrent()返回当前所执行的 Win32 线程的安全上下文标识。默认情况下,该标识为 ASPNET;这是用于运行 ASP.NET Web 应用程序的默认帐户。.但是,如果已配置 Web 应用程序进行模拟,该标识则表示经过身份验证的用户(如果 IIS 匿名身份验证有效,该标识为 IUSR_MACHINE)。
• Thread.CurrentPrincipal返回当前所执行的 .NET 线程(它位于 Win32 线程之上)的主体。
更多信息
• 有关 Web 应用程序配置组合(包括使用模拟和不使用模拟)的ASP.NET标识的详细分析,请参阅“ASP.NET Identity Matrix”。
• 有关创建您自己的IPrincipal实现的详细信息,请参阅“ASP.NET 安全性”和“How to implement IPrincipal”。
Remoting 与 Web 服务
在.NET Framework, 的最新版本中,Remoting 与 Web 服务没有自己的安全模型。它们都继承 IIS 和 ASP.NET 的安全功能。
虽然远程处理体系结构中没有内置的安全功能,但在设计时考虑到了安全性。开发人员和/或管理员可以自行决定在远程处理应用程序中集成一定程度的安全性。是否在远程处理边界之间传递主体对象取决于客户端和远程对象的位置,例如:
• 同一进程内的远程处理。在同一应用程序域或不同的应用程序域内的对象之间使用远程处理时,远程处理基础结构将与调用方上下文相关的 IPrincipal 对象的引用复制到接收方的上下文中。
• 进程之间的远程处理。在这种情况下,不在进程之间传送 IPrincipal 对象。用于构造原始 IPrincipal 的证书必须传送到远程进程,该进程可能位于另一台计算机上。这就使得远程计算机能够根据提供的证书来构造相应的 IPrincipal 对象。
小结
本章介绍了与 .NET 相关的各种技术提供的所有身份验证和授权选项。也介绍了 .NET Framework 安全性,以及主体和标识对象,这些是 ASP.NET 验证的核心内容。.
通过在整个 .NET 应用程序中使用多个网关守卫,您将能够实现纵深防御安全策略。概括起来,有以下几点:
• ASP.NET 应用程序可以使用 Windows 和 IIS 提供的现有安全功能。
• SSL 和 IPSec 可用来在 .NET 应用程序的各层上(例如,从浏览器到数据库)联合提供安全通信。
• 使用基本或窗体身份验证时,可使用 SSL 保护通过网络传递的明文证书。
• 建立在 .NET Framework 版本1之上的 ASP.NET 应用程序必须作为完全可信的应用程序运行,这意味着代
| 对此文章发表了评论 |

