在ASP.NET Core中,您可以使用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的真正用途是什么?
最佳答案
你注意到退货类型了吗?这是索赔。
你可以构建一个全新的索赔主体,从现有的添加或更改任何你喜欢的东西并返回它。