ClaimsPrincipal 类

定义

支持多个基于声明的标识的 IPrincipal 实现。

public ref class ClaimsPrincipal : System::Security::Principal::IPrincipal
public class ClaimsPrincipal : System.Security.Principal.IPrincipal
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class ClaimsPrincipal : System.Security.Principal.IPrincipal
type ClaimsPrincipal = class
    interface IPrincipal
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ClaimsPrincipal = class
    interface IPrincipal
Public Class ClaimsPrincipal
Implements IPrincipal
继承
ClaimsPrincipal
派生
属性
实现

示例

以下示例提取 HTTP 请求中用户提供的声明,并将其写入 HTTP 响应。 The current user is read from the HttpContext as a ClaimsPrincipal. 然后从中读取声明,然后将其写入响应。

ClaimsPrincipal principal = HttpContext.Current.User as ClaimsPrincipal;  
if (null != principal)  
{  
   foreach (Claim claim in principal.Claims)  
   {  
      Response.Write("CLAIM TYPE: " + claim.Type + "; CLAIM VALUE: " + claim.Value + "</br>");  
   }  
}  

注解

从 .NET Framework 4.5 开始,Windows Identity Foundation (WIF) 和基于声明的标识完全集成到.NET Framework。 这意味着,表示.NET Framework中的主体的许多类现在派生自ClaimsPrincipal,而不仅仅是实现IPrincipal接口。 除了实现 IPrincipal 接口, ClaimsPrincipal 还公开可用于处理声明的属性和方法。

ClaimsPrincipal 公开标识集合,每个标识都是一个 ClaimsIdentity。 在常见情况下,通过属性访问的 Identities 此集合只包含一个元素。

.NET 4.5 中引入 ClaimsPrincipal 作为大多数主体类派生的主体不会强制你更改处理标识的方式。 但是,它确实提供了更多可能性,并提供更多的机会来执行更精细的访问控制。 例如:

  • 应用程序代码本身可以直接处理当前主体中包含的声明,以驱动额外的身份验证、授权和个性化任务。

  • 可以使用声明处理管道将资源置于前面,即使在执行到达代码之前,也能处理身份验证请求和授权策略。 例如,可以使用自定义声明身份验证管理器(派生自 ClaimsAuthenticationManager 类的类实例)配置基于 Web 的应用程序或服务。 配置后,请求处理管道会在声明身份验证管理器上调用 Authenticate 该方法,该方法传递一个 ClaimsPrincipal 表示传入请求的上下文。 然后,声明身份验证管理器可以根据传入声明的值执行身份验证。 它还可以对传入声明集进行筛选、转换或添加声明。 例如,它可用于扩充传入声明集,其中包含从本地数据源(如本地用户配置文件)创建的新声明

  • 可以使用自定义声明授权管理器(派生自 ClaimsAuthorizationManager 该类的类的实例)配置基于 Web 的应用程序。 配置后,请求处理管道会打包传入ClaimsPrincipalAuthorizationContext,并在声明授权管理器上调用CheckAccess该方法。 然后,声明授权管理器可以根据传入声明强制实施授权。

  • 可以通过使用自定义声明授权管理器配置应用程序并使用 ClaimsPrincipalPermission 类执行命令性访问检查或 ClaimsPrincipalPermissionAttribute 执行声明性访问检查来执行内联声明性访问检查来执行基于内联声明的代码访问检查。 基于声明的代码访问检查在处理管道之外内联执行,因此,只要配置声明授权管理器,即可适用于所有应用程序。

可以通过将属性强制转换为Thread.CurrentPrincipalClaimsPrincipal信赖方 (RP) 应用程序,获取ClaimsPrincipal与请求关联的主体的实例,或者获取线程所执行主体的实例。 与对象 ClaimsPrincipal 关联的声明通过其 Claims 属性可用。 该 Claims 属性返回与主体关联的标识包含的所有声明。 在包含多个ClaimsIdentity实例的不常见情况下ClaimsPrincipal,可以使用Identities该属性,也可以使用该属性访问主标识IdentityClaimsPrincipal 提供了几种方法,可通过这些方法搜索这些声明,并且完全支持语言集成查询 (LINQ) 。 可以使用或AddIdentity方法将标识添加到主体AddIdentities

备注

若要向 ClaimsPrincipal添加标识,调用方必须具有完全信任。

默认情况下,WIF 在选择要通过Identity属性返回的主标识时确定对象的优先级WindowsIdentity。 可以通过通过 PrimaryIdentitySelector 属性提供委托来执行选择来修改此行为。 该 ClaimsPrincipalSelector 属性为 Current 该属性提供类似的功能。

在基于声明的模型中,主体是否处于指定角色由其基础标识提供的声明决定。 该方法 IsInRole 实质上检查与主体关联的每个标识,以确定它是否拥有具有指定角色值的声明。 声明的类型 (由其 Claim.Type 属性表示,) 用于确定在角色检查期间应检查哪些声明通过其 ClaimsIdentity.RoleClaimType 属性在标识上指定。 因此,在角色检查期间检查的声明可以为与主体关联的不同标识的不同类型的声明。

构造函数

ClaimsPrincipal()

初始化 ClaimsPrincipal 类的新实例。

ClaimsPrincipal(BinaryReader)

用指定的 BinaryReader 初始化 ClaimsPrincipal 的实例。

ClaimsPrincipal(IEnumerable<ClaimsIdentity>)

使用指定的声明标识,初始化 ClaimsPrincipal 类的新实例。

ClaimsPrincipal(IIdentity)

从指定的标识初始化 ClaimsPrincipal 类的新实例。

ClaimsPrincipal(IPrincipal)

从指定的主体初始化 ClaimsPrincipal 类的新实例。

ClaimsPrincipal(SerializationInfo, StreamingContext)

从使用 ISerializable 创建的序列化流初始化 ClaimsPrincipal 类的新实例。

属性

Claims

获取包含所有声明的集合,这些声明来自于与此声明主体关联的所有声明标识符。

ClaimsPrincipalSelector

获取或设置用于选择 Current 属性返回的声明主体的委托。

Current

获取当前声明主体。

CustomSerializationData

包含派生类型提供的任何其他数据。 通常在调用 WriteTo(BinaryWriter, Byte[]) 时设置。

Identities

获取一个集合,该集合包含与此声明主体关联的所有声明标识。

Identity

获取与此声明主体相关联的主声明标识。

PrimaryIdentitySelector

获取或设置用于选择 Identity 属性返回的声明标识的委托。

方法

AddIdentities(IEnumerable<ClaimsIdentity>)

将指定的声明标识添加到此声明主体。

AddIdentity(ClaimsIdentity)

将指定的声明标识添加到此声明主体。

Clone()

返回此实例的副本。

CreateClaimsIdentity(BinaryReader)

创建新的声明标识。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
FindAll(Predicate<Claim>)

检索所有与指定谓词相匹配的声明。

FindAll(String)

检索所有或具有指定的声明类型的声明。

FindFirst(Predicate<Claim>)

检所由指定谓词匹配的第一个声明。

FindFirst(String)

检索有指定声明类型的第一个声明。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext)

用序列化当前SerializationInfo 对象所需的数据来填充 ClaimsPrincipal

GetType()

获取当前实例的 Type

(继承自 Object)
HasClaim(Predicate<Claim>)

确定与此声明主体相关联的任何声明标识是否包含由指定的谓词匹配的声明。

HasClaim(String, String)

确定与此声明主体相关联的任何声明标识是否包含具有指定声明类型和值的声明。

IsInRole(String)

返回一个值,该值表示此声明主体代表的实体(用户)是否属于指定角色。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)
WriteTo(BinaryWriter)

使用 BinaryWriter 序列化。

WriteTo(BinaryWriter, Byte[])

使用 BinaryWriter 序列化。

适用于

另请参阅