首页 > 解决方案 > 如何通过中间件更新 .Net Core 3.x 中的声明值

问题描述

我有一些旨在执行某些逻辑的中间件。该逻辑的一部分是在用户通过身份验证后更新声明值。我想知道是否可以这样做?

public class MyMiddleware
{
    public async Task Invoke(HttpContext context)
    {
        //logic omitted
        var claims = new List<Claim> { new Claim("MyValue", "test") }
        context.User.AddIdentity(new ClaimsIdentity(claims));
    }
}

到目前为止,我发现的唯一方法是在上面的示例中。但是,我并不完全理解这种方法。上述内容会覆盖任何现有的声明还是会有其他行为?

编辑:在我的测试中,上面的代码不起作用。正如我在下一个请求中查看它时从未实际添加的声明一样。

我也尝试了以下方法,但效果相同,下一次请求时索赔并未持续。

public class MyMiddleware
{
    public async Task Invoke(HttpContext context)
    {
        //logic omitted
        var claimsIdentity = (ClaimsIdentity) context.User.Identity;
        var identity = new ClaimsIdentity(claimsIdentity);
        var myClaim = identity.Claims.FirstOrDefault(x => x.Type.Equals(userExpirationName));

        if(myClaim != null) identity.RemoveClaim(myClaimName);
        identity.AddClaim(new Claim(myClaimName, "test"));
        context.User.AddIdentity(identity);
    }
}

标签: c#claims-based-identity.net-core-3.0asp.net-core-3.0claims

解决方案


推荐阅读