在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的真正用途是什么?

最佳答案

你注意到退货类型了吗?这是索赔。
你可以构建一个全新的索赔主体,从现有的添加或更改任何你喜欢的东西并返回它。

08-07 10:46