.NET Framework 用户操作基础知识 (Visual Basic)

.NET Framework 在 System.Security.Principal 命名空间中提供了基于角色的安全实现,在应用程序中对用户进行授权和身份验证时可以使用该实现。 本主题讨论如何在 .NET Framework 中使用应用程序授权,并创建 IIdentityIPrincipal 对象来表示用户。

IIdentity 封装已经过身份验证的用户。 IPrincipal 是用户的标识及其具有的任何角色的组合。 您可以使用 System.Security.Principal 命名空间中的预定义标识和主体类,也可以通过创建实现接口的类来添加自定义身份验证。

若要使用这些接口,必须完全限定接口名称,或都通过在受影响的源代码文件开头处包括 Imports 语句来导入适当的命名空间。 有关更多信息,请参见 Imports 语句(.NET 命名空间和类型)

在 .NET Framework 应用程序中使用基于角色的安全性

每个应用程序线程都可以具有一个关联的主体对象(可通过 CurrentPrincipal 属性访问),该对象表示代码正在代表其运行的用户的安全上下文。 主体对象封装用户的用户安全上下文(或标识)对象。 使用两个对象可允许分离身份验证(在标识对象中)和授权(在主体中)。

标识对象必须实现 IIdentity 接口。 标识对象表示特定用户,并公开所要求的以下属性IIdentity接口: NameIsAuthenticatedAuthenticationType。 标识对象通常具有执行用户身份验证的其他私有成员。

主体对象必须实现 IPrincipal 接口。 主体对象封装用户的安全上下文将公开下列成员所要求的IPrincipal接口: IsInRole方法,它执行授权,和Identity属性,它提供了对用户的标识对象的访问。

处理标识

.NET Framework 提供了四个用于实现 IIdentity 接口的类:

每个类允许您处理不同类型的用户标识。 若要访问使用 Windows 身份验证的应用程序的当前 WindowsIdentity 对象,请使用 WindowsIdentity 类的静态 GetCurrent 方法。 您也可以通过调用 InitializeWithWindowsUser 方法来设置当前线程的主体。

还可以通过在自己的自定义类中实现 IIdentity 接口来创建自定义标识类。 有关创建自定义标识的更多信息,请参见演练:实现自定义身份验证和授权 (Visual Basic)

处理主体

.NET Framework 提供 IPrincipal 接口以链接用户角色和标识。 如果您的应用程序执行授权,则应该使用一个实现 IPrincipal 的对象。 例如,WindowsIdentityGenericIdentity 类提供 IPrincipal 的内置实现。 也可以基于 IPrincipal 创建自己的自定义主体类。

可以通过将 IPrincipal 对象分配给线程的 CurrentPrincipal 属性或 CurrentPrincipal 属性,将当前线程链接到该对象。 然后,可以通过测试用户是否是某个特定角色的成员来执行授权检查。 为此,请使用主体的 IsInRole 方法。

ASP.NET 应用程序处理 IPrincipal 对象的方式与其他 .NET Framework 应用程序处理该对象的方式不同。 ASP.NET 通过无状态的 HTTP 协议创建会话的外观。 作为该会话的一部分,对于执行用户请求的所有代码,可以从 HttpContext 对象的 User 属性使用表示该用户的 IPrincipal 对象。 在 Global.asax 文件的 OnAuthenticate 事件之后,公共语言运行时使用 User 值自动更新 CurrentPrincipal。 ASP.NET 应用程序通常使用 User 属性来执行授权检查。

提示

手动更改 User 将自动更新在同一 HTTP 上下文中执行的所有线程的 CurrentPrincipal 属性。 但是,更改 CurrentPrincipal 并不会影响 User 属性。 它仅影响为请求的其余部分选择的线程。

在 ASP.NET 应用程序中,CurrentPrincipal 属性更新 User 属性。

有关创建您自己的 IPrincipal 类型的更多信息,请参见演练:实现自定义身份验证和授权 (Visual Basic)

授予使用 IIdentity 和 IPrincipal 对象的权限

授予使用 IIdentity 对象的权限时应谨慎,因为这些对象可以使与用户相关的敏感信息供他人使用。 应用程序的授权功能是基于其当前主体的,因此您应该保护应用程序的当前 IPrincipal 对象不被更改。

.NET Framework 通过要求这些操作具有代码访问安全权限,来提供上述保护。 通过使用 Caspol.exe(代码访问安全策略工具),将 SecurityPermissionAttribute.ControlPrincipal 权限授予需要操作这些对象的应用程序。

默认情况下,所有本地安装的应用程序都具有该权限,因为它们是在 FullTrust 权限集下运行的。

执行下列方法需要 ControlPrincipal 权限:

请参见

任务

演练:实现自定义身份验证和授权 (Visual Basic)

参考

User

其他资源

.NET Framework 中的身份验证和授权 (Visual Basic)