前言

在C#中,“Claims”(声明)是.NET框架中的一种安全概念,主要用于身份验证和授权。Claims是关于用户的信息,它们以键值对的形式存储,通常用于描述用户的属性和身份,例如用户名、电子邮件、角色等。


内容

一、Clians属性:

Type属性 是一个字符串 (通常包含声明语义信息的 URI),它告知声明的值的含义。 例如,声明类型 ClaimTypes.GivenName表示用户的名字。Type 可以是  ClaimTypes类中 定义的已知声明类型之一,也可以是自定义;
     
Value属性 包含声明的值,也就是验证的对象。 为了减少依赖项并简化管理,在 WIF 中,声明的值仅表示为字符串。对于更复杂的值类型,建议使用标准 XML 架构类型来指示值应如何序列化为字符串并从字符串反序列化。  

      

ValueType属性 包含一个字符串,用于标识值的类型信息。 此属性应用于了解值的格式,并提供有关如何反序列化它的信息。常用的有ClaimValueTypes类中的String、Boolean、DateTime、Integer、Base64Binary、Email等;    

          

Issuer属性 包含发出声明的实体的名称,也就是声明的颁发者。 声明的颁发者在 WIF 中由一个字符串表示,该字符串包含从由颁发者名称注册表维护的已知颁发者列表获取的名称。 颁发者名称注册表是从 类派生的类的 IssuerNameRegistry 实例。 颁发者名称注册表将助记符名称关联到验证相应颁发者生成的令牌签名所需的加密材料。

OriginalIssuer属性 包含最初发出声明的实体的名称。 此属性旨在简化在客户端向 RP 应用程序呈现声明之前可能通过多个颁发者的情况;例如联合方案。 可以检查 OriginalIssuer 属性以确定最初发出声明的实体。 该名称取自由颁发者名称注册表维护的已知颁发者列表,如 属性的情况 Issuer 一样。

Subject属性 是一个 ClaimsIdentity 对象,表示声明的主题。 声明的主题是实体 (通常是请求访问声明的资源) 的用户。 在其 ClaimsIdentity 属性中,包含一组声明,用于描述由一个或多个颁发者证明的主题的属性和属性。

二、Cliams的使用

类 ClaimsIdentity 是基于声明的标识的具体实现;即由声明集合描述的标识。 声明是颁发者关于实体的声明,该声明描述了该实体的属性、权利或某种其他质量。 这种实体据说是索赔的对象。 声明由 Claim 类表示。 包含在 中的 ClaimsIdentity 声明描述相应标识所表示的实体,可用于做出授权和身份验证决策。 与完全依赖于角色的更传统的访问模型比较,基于声明的访问模型具有许多优势。 例如,声明可以提供有关它们所表示的标识的更丰富信息,并且可以以更具体的方式评估授权或身份验证。

public async Task OnValidateCredentials(ValidateCredentialsContext context)
{
    var claims = new[]
    {
        new Claim(
            ClaimTypes.NameIdentifier,
            user.UserName,
            ClaimValueTypes.String,
            context.Options.ClaimsIssuer),
        new Claim(
            ClaimTypes.Name,
            user.UserName,
            ClaimValueTypes.String,
            context.Options.ClaimsIssuer),
        new Claim(
            ClaimTypes.Role,
            user.Role.ToString(),
            ClaimValueTypes.String,
            context.Options.ClaimsIssuer)
    };

    // 创建一个身份验证令牌并将claims添加到其中
	var identity = new ClaimsIdentity(claims, context.Scheme.Name);
    // 创建一个主体
    var principal = new ClaimsPrincipal();
    context.Principal = principal;
    context.Success();
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐