Share via


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 响应。 当前用户作为 从 HttpContextClaimsPrincipal中读取。 然后从中读取声明,然后写入响应。

if (HttpContext.Current.User is ClaimsPrincipal 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 接口。 除了实现 接口外 IPrincipalClaimsPrincipal 还公开了可用于使用声明的属性和方法。

ClaimsPrincipal 公开标识的集合,其中每个标识均为 ClaimsIdentity。 在一般情况下,此集合(通过 Identities 属性访问)将只有一个元素。

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

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

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

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

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

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

注意

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

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

在基于声明的模型中,主体是否处于指定角色取决于其基础标识提供的声明。 方法 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 序列化。

适用于

另请参阅