在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.Type
,Claim.Value
是只读属性。
这意味着在IClaimsTransformer
的实施中,您只能添加新的声明。您无法删除或修改现有声明。
那么IClaimsTransformer真正的用途是什么?
答案 0 :(得分:5)
您是否注意到退货类型?它的声明是主要的。
您可以构建一个全新的ClaimsPrincipal,从现有的中添加或更改您喜欢的任何内容并将其返回。
答案 1 :(得分:2)
它的价值在于您可以补充超出身份验证cookie中存储的声明。
这很有用,因为只有这么多数据可以进入cookie,如果你试图放得太多,它会被截断。
因此,如果您有大量有效负载的声明或声明,您可以将该数据存储在会话中,并使用声明转换将其添加到claimprincipal。我不认为它旨在删除存储在cookie中的声明。如果您想添加或控制cookie中的声明,您可以在自定义IClaimsPrincipalFactory中执行此操作。