IClaimsTransformer有什么用?

时间:2016-11-03 19:57:05

标签: c# asp.net-core asp.net-core-mvc coreclr

在ASP.Net核心中,您可以使用IClaimsTransformer的实现。

你这样注册:

app.UseClaimsTransformation(o => o.Transformer = new MyClaimsTransformer());

实施

public class MyClaimsTransformer : IClaimsTransformer
{
    public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
    {
        var identity = context.Principal.Identity as ClaimsIdentity;

        foreach (var claim in ci.Claims)
        {
           // you cannot modify claim.Type or claim.Value here
        }
    }
}

但是ClaimsIdentity.Claims是只读属性。此外,Claim.TypeClaim.Value是只读属性。

这意味着在IClaimsTransformer的实施中,您只能添加新的声明。您无法删除或修改现有声明。

那么IClaimsTransformer真正的用途是什么?

2 个答案:

答案 0 :(得分:5)

您是否注意到退货类型?它的声明是主要的。

您可以构建一个全新的ClaimsPrincipal,从现有的中添加或更改您喜欢的任何内容并将其返回。

答案 1 :(得分:2)

它的价值在于您可以补充超出身份验证cookie中存储的声明。

这很有用,因为只有这么多数据可以进入cookie,如果你试图放得太多,它会被截断。

因此,如果您有大量有效负载的声明或声明,您可以将该数据存储在会话中,并使用声明转换将其添加到claimprincipal。我不认为它旨在删除存储在cookie中的声明。如果您想添加或控制cookie中的声明,您可以在自定义IClaimsPrincipalFactory中执行此操作。

相关问题